-/**
- * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $
- * Copyright (c) 2006-2012, JGraph Ltd
- */
-// Specifies if local storage should be used (eg. on the iPad which has no filesystem)
-var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined';
-var fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
-
-// Specifies if connector should be shown on selected cells
-var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1';
-
-// Counts open editor tabs (must be global for cross-window access)
-var counter = 0;
-
-// Cross-domain window access is not allowed in FF, so if we
-// were opened from another domain then this will fail.
-try {
- var op = window;
-
- while (op.opener != null && !isNaN(op.opener.counter)) {
- op = op.opener;
- }
-
- // Increments the counter in the first opener in the chain
- if (op != null) {
- op.counter++;
- counter = op.counter;
- }
-} catch (e) {
- // ignore
-}
-
-/**
- * Editor constructor executed on page load.
- */
-Editor = function() {
- mxEventSource.call(this);
- this.init();
- this.initStencilRegistry();
- this.graph = new Graph();
- this.outline = new mxOutline(this.graph);
- this.outline.updateOnPan = true;
- this.undoManager = this.createUndoManager();
- this.status = '';
-
- // Contains the name which was used for the last save. Default value is null.
- this.filename = null;
-
- this.getOrCreateFilename = function() {
- return this.filename || mxResources.get('drawing', [counter]) + '.xml';
- };
-
- this.getFilename = function() {
- return this.filename;
- };
-
- // Sets the status and fires a statusChanged event
- this.setStatus = function(value) {
- this.status = value;
- this.fireEvent(new mxEventObject('statusChanged'));
- };
-
- // Returns the current status
- this.getStatus = function() {
- return this.status;
- };
-
- // Contains the current modified state of the diagram. This is false for
- // new diagrams and after the diagram was saved.
- this.modified = false;
-
- // Updates modified state if graph changes
- this.graphChangeListener = function() {
- this.modified = true;
- };
- this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() {
- this.graphChangeListener.apply(this, arguments);
- }));
-
- // Installs dialog if browser window is closed without saving
- // This must be disabled during save and image export
- window.onbeforeunload = mxUtils.bind(this, function() {
- if (this.modified) {
- return mxResources.get('allChangesLost');
- }
- });
-
- // Sets persistent graph state defaults
- this.graph.resetViewOnRootChange = false;
- this.graph.scrollbars = true;
- this.graph.background = null;
-};
-
-// Editor inherits from mxEventSource
-mxUtils.extend(Editor, mxEventSource);
-
-/**
- * Specifies the image URL to be used for the grid.
- */
-Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif';
-
-/**
- * Specifies the image URL to be used for the transparent background.
- */
-Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif';
-
-/**
- * Sets the XML node for the current diagram.
- */
-Editor.prototype.setGraphXml = function(node) {
- var dec = new mxCodec(node.ownerDocument);
-
- if (node.nodeName == 'mxGraphModel') {
- this.graph.view.scale = 1;
- this.graph.gridEnabled = node.getAttribute('grid') != '0';
- this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0';
- this.graph.setTooltips(node.getAttribute('tooltips') != '0');
- this.graph.setConnectable(node.getAttribute('connect') != '0');
- this.graph.foldingEnabled = node.getAttribute('fold') != '0';
- this.graph.scrollbars = node.getAttribute('scrollbars') != '0';
-
- if (!this.graph.scrollbars) {
- this.graph.container.scrollLeft = 0;
- this.graph.container.scrollTop = 0;
- this.graph.view.translate.x = Number(node.getAttribute('dx') || 0);
- this.graph.view.translate.y = Number(node.getAttribute('dy') || 0);
- }
-
- this.graph.pageVisible = node.getAttribute('page') == '1';
- this.graph.pageBreaksVisible = this.graph.pageVisible;
- this.graph.preferPageSize = this.graph.pageBreaksVisible;
-
- // Loads the persistent state settings
- var ps = node.getAttribute('pageScale');
-
- if (ps != null) {
- this.graph.pageScale = ps;
- } else {
- this.graph.pageScale = 1.5;
- }
-
- var pw = node.getAttribute('pageWidth');
- var ph = node.getAttribute('pageHeight');
-
- if (pw != null && ph != null) {
- this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph));
- this.outline.outline.pageFormat = this.graph.pageFormat;
- }
-
- // Loads the persistent state settings
- var bg = node.getAttribute('background');
-
- if (bg != null && bg.length > 0) {
- this.graph.background = bg;
- }
-
- dec.decode(node, this.graph.getModel());
- this.updateGraphComponents();
- }
-};
-
-/**
- * Returns the XML node that represents the current diagram.
- */
-Editor.prototype.getGraphXml = function() {
- var enc = new mxCodec(mxUtils.createXmlDocument());
- var node = enc.encode(this.graph.getModel());
-
- if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) {
- node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100);
- node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100);
- }
-
- node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0');
- node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
- node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
- node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0');
- node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0');
- node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0');
- node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0');
- node.setAttribute('pageScale', this.graph.pageScale);
- node.setAttribute('pageWidth', this.graph.pageFormat.width);
- node.setAttribute('pageHeight', this.graph.pageFormat.height);
-
- if (!this.graph.scrollbars) {
- node.setAttribute('scrollbars', '0');
- }
-
- if (this.graph.background != null) {
- node.setAttribute('background', this.graph.background);
- }
-
- return node;
-};
-
-/**
- * Keeps the graph container in sync with the persistent graph state
- */
-Editor.prototype.updateGraphComponents = function() {
- var graph = this.graph;
- var outline = this.outline;
-
- if (graph.container != null && outline.outline.container != null) {
- if (graph.background != null) {
- if (graph.background == 'none') {
- graph.container.style.backgroundColor = 'transparent';
- } else {
- if (graph.view.backgroundPageShape != null) {
- graph.view.backgroundPageShape.fill = graph.background;
- graph.view.backgroundPageShape.reconfigure();
- }
-
- graph.container.style.backgroundColor = graph.background;
- }
- } else {
- graph.container.style.backgroundColor = '';
- }
-
- if (graph.pageVisible) {
- graph.container.style.backgroundColor = '#ebebeb';
- graph.container.style.borderStyle = 'solid';
- graph.container.style.borderColor = '#e5e5e5';
- graph.container.style.borderTopWidth = '1px';
- graph.container.style.borderLeftWidth = '1px';
- graph.container.style.borderRightWidth = '0px';
- graph.container.style.borderBottomWidth = '0px';
- } else {
- graph.container.style.border = '';
- }
-
- outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor;
-
- if (outline.outline.pageVisible != graph.pageVisible ||
- outline.outline.pageScale != graph.pageScale) {
- outline.outline.pageScale = graph.pageScale;
- outline.outline.pageVisible = graph.pageVisible;
- outline.outline.view.validate();
- }
-
- if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) {
- graph.container.style.overflow = 'auto';
- } else if (!graph.scrollbars || touchStyle) {
- graph.container.style.overflow = 'hidden';
- }
-
- // Transparent.gif is a workaround for focus repaint problems in IE
- var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none';
- graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground;
-
- if (graph.view.backgroundPageShape != null) {
- graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none';
- }
- }
-};
-
-/**
- * Initializes the environment.
- */
-Editor.prototype.init = function() {
- // Adds stylesheet for IE6
- if (mxClient.IS_IE6) {
- mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css');
- }
-
- // Adds required resources (disables loading of fallback properties, this can only
- // be used if we know that all keys are defined in the language specific file)
- mxResources.loadDefaultBundle = false;
- mxResources.add(RESOURCE_BASE);
-
- // Makes the connection hotspot smaller
- mxConstants.DEFAULT_HOTSPOT = 0.3;
-
- var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
- mxConnectionHandler.prototype.createMarker = function() {
- var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
-
- // Overrides to ignore hotspot only for target terminal
- marker.intersects = mxUtils.bind(this, function(state, evt) {
- if (this.isConnecting()) {
- return true;
- }
-
- return mxCellMarker.prototype.intersects.apply(marker, arguments);
- });
-
- return marker;
- };
-
- // Makes the shadow brighter
- mxConstants.SHADOWCOLOR = '#d0d0d0';
-
- // Changes some default colors
- mxConstants.HANDLE_FILLCOLOR = '#99ccff';
- mxConstants.HANDLE_STROKECOLOR = '#0088cf';
- mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
- mxConstants.OUTLINE_COLOR = '#00a8ff';
- mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff';
- mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff';
- mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff';
- mxConstants.EDGE_SELECTION_COLOR = '#00a8ff';
- mxConstants.DEFAULT_VALID_COLOR = '#00a8ff';
- mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff';
- mxConstants.GUIDE_COLOR = '#0088cf';
-
- mxGraph.prototype.pageBreakColor = '#c0c0c0';
- mxGraph.prototype.pageScale = 1;
-
- // Increases default rubberband opacity (default is 20)
- mxRubberband.prototype.defaultOpacity = 30;
-
- // Changes border color of background page shape
- mxGraphView.prototype.createBackgroundPageShape = function(bounds) {
- return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca');
- };
-
- // Fits the number of background pages to the graph
- mxGraphView.prototype.getBackgroundPageBounds = function() {
- var gb = this.getGraphBounds();
-
- // Computes unscaled, untranslated graph bounds
- var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
- var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
- var w = gb.width / this.scale;
- var h = gb.height / this.scale;
-
- var fmt = this.graph.pageFormat;
- var ps = this.graph.pageScale;
-
- var pw = fmt.width * ps;
- var ph = fmt.height * ps;
-
- var x0 = Math.floor(Math.min(0, x) / pw);
- var y0 = Math.floor(Math.min(0, y) / ph);
- var xe = Math.ceil(Math.max(1, x + w) / pw);
- var ye = Math.ceil(Math.max(1, y + h) / ph);
-
- var rows = xe - x0;
- var cols = ye - y0;
-
- var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
- (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph);
-
- return bounds;
- };
-
- // Add panning for background page in VML
- var graphPanGraph = mxGraph.prototype.panGraph;
- mxGraph.prototype.panGraph = function(dx, dy) {
- graphPanGraph.apply(this, arguments);
-
- if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) &&
- (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) {
- this.view.backgroundPageShape.node.style.marginLeft = dx + 'px';
- this.view.backgroundPageShape.node.style.marginTop = dy + 'px';
- }
- };
-
- var editor = this;
-
- // Uses HTML for background pages (to support grid background image)
- mxGraphView.prototype.validateBackground = function() {
- var bg = this.graph.getBackgroundImage();
-
- if (bg != null) {
- if (this.backgroundImage == null || this.backgroundImage.image != bg.src) {
- if (this.backgroundImage != null) {
- this.backgroundImage.destroy();
- }
-
- var bounds = new mxRectangle(0, 0, 1, 1);
-
- this.backgroundImage = new mxImageShape(bounds, bg.src);
- this.backgroundImage.dialect = this.graph.dialect;
- this.backgroundImage.init(this.backgroundPane);
- this.backgroundImage.redraw();
- }
-
- this.redrawBackgroundImage(this.backgroundImage, bg);
- } else if (this.backgroundImage != null) {
- this.backgroundImage.destroy();
- this.backgroundImage = null;
- }
-
- if (this.graph.pageVisible) {
- var bounds = this.getBackgroundPageBounds();
-
- if (this.backgroundPageShape == null) {
- this.backgroundPageShape = this.createBackgroundPageShape(bounds);
- this.backgroundPageShape.scale = 1;
- this.backgroundPageShape.isShadow = true;
- this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML;
- this.backgroundPageShape.init(this.graph.container);
- // Required for the browser to render the background page in correct order
- this.graph.container.firstChild.style.position = 'absolute';
- this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild);
- this.backgroundPageShape.redraw();
-
- this.backgroundPageShape.node.className = 'geBackgroundPage';
- this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px';
-
- // Adds listener for double click handling on background
- mxEvent.addListener(this.backgroundPageShape.node, 'dblclick',
- mxUtils.bind(this, function(evt) {
- this.graph.dblClick(evt);
- })
- );
-
- // Adds basic listeners for graph event dispatching outside of the
- // container and finishing the handling of a single gesture
- mxEvent.addGestureListeners(this.backgroundPageShape.node,
- mxUtils.bind(this, function(evt) {
- this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt));
- }),
- mxUtils.bind(this, function(evt) {
- // Hides the tooltip if mouse is outside container
- if (this.graph.tooltipHandler != null &&
- this.graph.tooltipHandler.isHideOnHover()) {
- this.graph.tooltipHandler.hide();
- }
-
- if (this.graph.isMouseDown &&
- !mxEvent.isConsumed(evt)) {
- this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,
- new mxMouseEvent(evt));
- }
- }),
- mxUtils.bind(this, function(evt) {
- this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
- new mxMouseEvent(evt));
- }));
- } else {
- this.backgroundPageShape.scale = 1;
- this.backgroundPageShape.bounds = bounds;
- this.backgroundPageShape.redraw();
- }
-
- this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ?
- 'url(' + editor.gridImage + ')' : 'none';
- } else if (this.backgroundPageShape != null) {
- this.backgroundPageShape.destroy();
- this.backgroundPageShape = null;
- }
- };
-
- // Draws page breaks only within the page
- mxGraph.prototype.updatePageBreaks = function(visible, width, height) {
- var scale = this.view.scale;
- var tr = this.view.translate;
- var fmt = this.pageFormat;
- var ps = scale * this.pageScale;
-
- var bounds2 = this.view.getBackgroundPageBounds();
-
- width = bounds2.width;
- height = bounds2.height;
- var bounds = new mxRectangle(scale * tr.x, scale * tr.y,
- fmt.width * ps, fmt.height * ps);
-
- // Does not show page breaks if the scale is too small
- visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
-
- var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
- var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
- var right = bounds2.x + width;
- var bottom = bounds2.y + height;
-
- if (this.horizontalPageBreaks == null && horizontalCount > 0) {
- this.horizontalPageBreaks = [];
- }
-
- if (this.horizontalPageBreaks != null) {
- for (var i = 0; i <= horizontalCount; i++) {
- var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y),
- new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom)
- ];
-
- if (this.horizontalPageBreaks[i] != null) {
- this.horizontalPageBreaks[i].scale = 1;
- this.horizontalPageBreaks[i].points = pts;
- this.horizontalPageBreaks[i].redraw();
- } else {
- var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale);
- pageBreak.dialect = this.dialect;
- pageBreak.isDashed = this.pageBreakDashed;
- pageBreak.addPipe = false;
- pageBreak.scale = scale;
- pageBreak.init(this.view.backgroundPane);
- pageBreak.redraw();
-
- this.horizontalPageBreaks[i] = pageBreak;
- }
- }
-
- for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) {
- this.horizontalPageBreaks[i].destroy();
- }
-
- this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount);
- }
-
- if (this.verticalPageBreaks == null && verticalCount > 0) {
- this.verticalPageBreaks = [];
- }
-
- if (this.verticalPageBreaks != null) {
- for (var i = 0; i <= verticalCount; i++) {
- var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height),
- new mxPoint(right, bounds2.y + (i + 1) * bounds.height)
- ];
-
- if (this.verticalPageBreaks[i] != null) {
- this.verticalPageBreaks[i].scale = 1; //scale;
- this.verticalPageBreaks[i].points = pts;
- this.verticalPageBreaks[i].redraw();
- } else {
- var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale);
- pageBreak.dialect = this.dialect;
- pageBreak.isDashed = this.pageBreakDashed;
- pageBreak.addPipe = false;
- pageBreak.scale = scale;
- pageBreak.init(this.view.backgroundPane);
- pageBreak.redraw();
-
- this.verticalPageBreaks[i] = pageBreak;
- }
- }
-
- for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) {
- this.verticalPageBreaks[i].destroy();
- }
-
- this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount);
- }
- };
-
- // Enables snapping to off-grid terminals for edge waypoints
- mxEdgeHandler.prototype.snapToTerminals = true;
-
- // Enables guides
- mxGraphHandler.prototype.guidesEnabled = true;
-
- // Disables removing relative children from parents
- var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
- mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) {
- for (var i = 0; i < cells.length; i++) {
- if (this.graph.getModel().isVertex(cells[i])) {
- var geo = this.graph.getCellGeometry(cells[i]);
-
- if (geo != null && geo.relative) {
- return false;
- }
- }
- }
-
- return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments);
- };
-
- // Alt-move disables guides
- mxGuide.prototype.isEnabledForEvent = function(evt) {
- return !mxEvent.isAltDown(evt);
- };
-
- // Consumes click events for disabled menu items
- mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
- mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) {
- var result = mxPopupMenuAddItem.apply(this, arguments);
-
- if (enabled != null && !enabled) {
- mxEvent.addListener(result, 'mousedown', function(evt) {
- mxEvent.consume(evt);
- });
- }
-
- return result;
- };
-
- // Selects descendants before children selection mode
- var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
- mxGraphHandler.prototype.getInitialCellForEvent = function(me) {
- var model = this.graph.getModel();
- var psel = model.getParent(this.graph.getSelectionCell());
- var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
- var parent = model.getParent(cell);
-
- if (psel == null || (psel != cell && psel != parent)) {
- while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) &&
- model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
- cell = parent;
- parent = this.graph.getModel().getParent(cell);
- }
- }
-
- return cell;
- };
-
- // Selection is delayed to mouseup if child selected
- var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
- mxGraphHandler.prototype.isDelayedSelection = function(cell) {
- var result = graphHandlerIsDelayedSelection.apply(this, arguments);
- var model = this.graph.getModel();
- var psel = model.getParent(this.graph.getSelectionCell());
- var parent = model.getParent(cell);
-
- if (psel == null || (psel != cell && psel != parent)) {
- if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
- result = true;
- }
- }
-
- return result;
- };
-
- // Delayed selection of parent group
- mxGraphHandler.prototype.selectDelayed = function(me) {
- var cell = me.getCell();
-
- if (cell == null) {
- cell = this.cell;
- }
-
- var model = this.graph.getModel();
- var parent = model.getParent(cell);
-
- while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
- cell = parent;
- parent = model.getParent(cell);
- }
-
- this.graph.selectCellForEvent(cell, me.getEvent());
- };
-
- // Returns last selected ancestor
- mxPanningHandler.prototype.getCellForPopupEvent = function(me) {
- var cell = me.getCell();
- var model = this.graph.getModel();
- var parent = model.getParent(cell);
-
- while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) {
- if (this.graph.isCellSelected(parent)) {
- cell = parent;
- }
-
- parent = model.getParent(parent);
- }
-
- return cell;
- };
-};
-
-/**
- * Creates and returns a new undo manager.
- */
-Editor.prototype.createUndoManager = function() {
- var graph = this.graph;
- var undoMgr = new mxUndoManager();
-
- // Installs the command history
- var listener = function(sender, evt) {
- undoMgr.undoableEditHappened(evt.getProperty('edit'));
- };
-
- graph.getModel().addListener(mxEvent.UNDO, listener);
- graph.getView().addListener(mxEvent.UNDO, listener);
-
- // Keeps the selection in sync with the history
- var undoHandler = function(sender, evt) {
- var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes);
- var cells = [];
-
- for (var i = 1; i < cand.length; i++) {
- if (graph.view.getState(cand[i]) != null) {
- cells.push(cand[i]);
- }
- }
-
- graph.setSelectionCells(cells);
- };
-
- undoMgr.addListener(mxEvent.UNDO, undoHandler);
- undoMgr.addListener(mxEvent.REDO, undoHandler);
-
- return undoMgr;
-};
-
-/**
- * Adds basic stencil set (no namespace).
- */
-Editor.prototype.initStencilRegistry = function() {
- // Loads default stencils
- mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml');
-};
-
-/**
- * Overrides stencil registry for dynamic loading of stencils.
- */
-(function() {
- /**
- * Maps from library names to an array of Javascript filenames,
- * which are synchronously loaded. Currently only stencil files
- * (.xml) and JS files (.js) are supported.
- * IMPORTANT: For embedded diagrams to work entries must also
- * be added in EmbedServlet.java.
- */
- mxStencilRegistry.libraries = {};
-
- /**
- * Stores all package names that have been dynamically loaded.
- * Each package is only loaded once.
- */
- mxStencilRegistry.packages = [];
-
- // Extends the default stencil registry to add dynamic loading
- mxStencilRegistry.getStencil = function(name) {
- var result = mxStencilRegistry.stencils[name];
-
- if (result == null) {
- var basename = mxStencilRegistry.getBasenameForStencil(name);
-
- // Loads stencil files and tries again
- if (basename != null) {
- var libs = mxStencilRegistry.libraries[basename];
-
- if (libs != null) {
- if (mxStencilRegistry.packages[basename] == null) {
- mxStencilRegistry.packages[basename] = 1;
-
- for (var i = 0; i < libs.length; i++) {
- var fname = libs[i];
-
- if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') {
- mxStencilRegistry.loadStencilSet(fname, null);
- } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') {
- var req = mxUtils.load(fname);
-
- if (req != null) {
- eval.call(window, req.getText());
- }
- } else {
- // FIXME: This does not yet work as the loading is triggered after
- // the shape was used in the graph, at which point the keys have
- // typically been translated in the calling method.
- //mxResources.add(fname);
- }
- }
- }
- } else {
- mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null);
- }
-
- result = mxStencilRegistry.stencils[name];
- }
- }
-
- return result;
- };
-
- // Returns the basename for the given stencil or null if no file must be
- // loaded to render the given stencil.
- mxStencilRegistry.getBasenameForStencil = function(name) {
- var parts = name.split('.');
- var tmp = null;
-
- if (parts.length > 0 && parts[0] == 'mxgraph') {
- tmp = parts[1];
-
- for (var i = 2; i < parts.length - 1; i++) {
- tmp += '/' + parts[i];
- }
- }
-
- return tmp;
- };
-
- // Loads the given stencil set
- mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) {
- force = (force != null) ? force : false;
-
- // Uses additional cache for detecting previous load attempts
- var xmlDoc = mxStencilRegistry.packages[stencilFile];
-
- if (force || xmlDoc == null) {
- var install = false;
-
- if (xmlDoc == null) {
- var req = mxUtils.load(stencilFile);
- xmlDoc = req.getXml();
- mxStencilRegistry.packages[stencilFile] = xmlDoc;
- install = true;
- }
-
- mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install);
- }
- };
-
- // Parses the given stencil set
- mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) {
- install = (install != null) ? install : true;
- var root = xmlDocument.documentElement;
- var shape = root.firstChild;
- var packageName = '';
- var name = root.getAttribute('name');
-
- if (name != null) {
- packageName = name + '.';
- }
-
- while (shape != null) {
- if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) {
- name = shape.getAttribute('name');
-
- if (name != null) {
- packageName = packageName.toLowerCase();
- var stencilName = name.replace(/ /g, "_");
-
- if (install) {
- mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape));
- }
-
- if (postStencilLoad != null) {
- var w = shape.getAttribute('w');
- var h = shape.getAttribute('h');
-
- w = (w == null) ? 80 : parseInt(w, 10);
- h = (h == null) ? 80 : parseInt(h, 10);
-
- postStencilLoad(packageName, stencilName, name, w, h);
- }
- }
- }
-
- shape = shape.nextSibling;
- }
- };
-})();
-
-/**
- * Class for asynchronously opening a new window and loading a file at the same
- * time. This acts as a bridge between the open dialog and the new editor.
- */
-OpenFile = function(done) {
- this.producer = null;
- this.consumer = null;
- this.done = done;
-};
-
-/**
- * Registers the editor from the new window.
- */
-OpenFile.prototype.setConsumer = function(value) {
- this.consumer = value;
- this.execute();
-};
-
-/**
- * Sets the data from the loaded file.
- */
-OpenFile.prototype.setData = function(value, filename) {
- this.data = value;
- this.filename = filename;
- this.execute();
-};
-
-/**
- * Displays an error message.
- */
-OpenFile.prototype.error = function(msg) {
- this.cancel();
- mxUtils.alert(msg);
-};
-
-/**
- * Consumes the data.
- */
-OpenFile.prototype.execute = function() {
- if (this.consumer != null && this.data != null) {
- this.consumer(this.data, this.filename);
- this.cancel();
- }
-};
-
-/**
- * Cancels the operation.
- */
-OpenFile.prototype.cancel = function() {
- if (this.done != null) {
- this.done();
- }
-};
+var _0x3b95=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0x3b95[0]]|| urlParams[_0x3b95[1]]== _0x3b95[2])&& typeof (localStorage)!= _0x3b95[3];var fileSupport=window[_0x3b95[4]]!= null&& window[_0x3b95[5]]!= null&& window[_0x3b95[6]]!= null;var touchStyle=mxClient[_0x3b95[0]]|| urlParams[_0x3b95[7]]== _0x3b95[8];var counter=0;try{var op=window;while(op[_0x3b95[9]]!= null&& !isNaN(op[_0x3b95[9]][_0x3b95[10]])){op= op[_0x3b95[9]]};if(op!= null){op[_0x3b95[10]]++;counter= op[_0x3b95[10]]}}catch(e){};Editor= function(){mxEventSource[_0x3b95[11]](this);this[_0x3b95[12]]();this[_0x3b95[13]]();this[_0x3b95[14]]= new Graph();this[_0x3b95[15]]= new mxOutline(this[_0x3b95[14]]);this[_0x3b95[15]][_0x3b95[16]]= true;this[_0x3b95[17]]= this[_0x3b95[18]]();this[_0x3b95[19]]= _0x3b95[20];this[_0x3b95[21]]= null;this[_0x3b95[22]]= function(){return this[_0x3b95[21]]|| mxResources[_0x3b95[24]](_0x3b95[23],[counter])+ _0x3b95[25]};this[_0x3b95[26]]= function(){return this[_0x3b95[21]]};this[_0x3b95[27]]= function(_0xb8dcx6){this[_0x3b95[19]]= _0xb8dcx6;this[_0x3b95[29]]( new mxEventObject(_0x3b95[28]))};this[_0x3b95[30]]= function(){return this[_0x3b95[19]]};this[_0x3b95[31]]= false;this[_0x3b95[32]]= function(){this[_0x3b95[31]]= true};this[_0x3b95[14]][_0x3b95[36]]()[_0x3b95[35]](mxEvent.CHANGE,mxUtils[_0x3b95[34]](this,function(){this[_0x3b95[32]][_0x3b95[33]](this,arguments)}));window[_0x3b95[37]]= mxUtils[_0x3b95[34]](this,function(){if(this[_0x3b95[31]]){return mxResources[_0x3b95[24]](_0x3b95[38])}});this[_0x3b95[14]][_0x3b95[39]]= false;this[_0x3b95[14]][_0x3b95[40]]= true;this[_0x3b95[14]][_0x3b95[41]]= null};mxUtils[_0x3b95[42]](Editor,mxEventSource);Editor[_0x3b95[44]][_0x3b95[43]]= IMAGE_PATH+ _0x3b95[45];Editor[_0x3b95[44]][_0x3b95[46]]= IMAGE_PATH+ _0x3b95[47];Editor[_0x3b95[44]][_0x3b95[48]]= function(_0xb8dcx7){var _0xb8dcx8= new mxCodec(_0xb8dcx7[_0x3b95[49]]);if(_0xb8dcx7[_0x3b95[50]]== _0x3b95[51]){this[_0x3b95[14]][_0x3b95[53]][_0x3b95[52]]= 1;this[_0x3b95[14]][_0x3b95[54]]= _0xb8dcx7[_0x3b95[56]](_0x3b95[55])!= _0x3b95[57];this[_0x3b95[14]][_0x3b95[59]][_0x3b95[58]]= _0xb8dcx7[_0x3b95[56]](_0x3b95[60])!= _0x3b95[57];this[_0x3b95[14]][_0x3b95[62]](_0xb8dcx7[_0x3b95[56]](_0x3b95[61])!= _0x3b95[57]);this[_0x3b95[14]][_0x3b95[64]](_0xb8dcx7[_0x3b95[56]](_0x3b95[63])!= _0x3b95[57]);this[_0x3b95[14]][_0x3b95[65]]= _0xb8dcx7[_0x3b95[56]](_0x3b95[66])!= _0x3b95[57];this[_0x3b95[14]][_0x3b95[40]]= _0xb8dcx7[_0x3b95[56]](_0x3b95[40])!= _0x3b95[57];if(!this[_0x3b95[14]][_0x3b95[40]]){this[_0x3b95[14]][_0x3b95[68]][_0x3b95[67]]= 0;this[_0x3b95[14]][_0x3b95[68]][_0x3b95[69]]= 0;this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[70]]= Number(_0xb8dcx7[_0x3b95[56]](_0x3b95[72])|| 0);this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[73]]= Number(_0xb8dcx7[_0x3b95[56]](_0x3b95[74])|| 0)};this[_0x3b95[14]][_0x3b95[75]]= _0xb8dcx7[_0x3b95[56]](_0x3b95[76])== _0x3b95[8];this[_0x3b95[14]][_0x3b95[77]]= this[_0x3b95[14]][_0x3b95[75]];this[_0x3b95[14]][_0x3b95[78]]= this[_0x3b95[14]][_0x3b95[77]];var _0xb8dcx9=_0xb8dcx7[_0x3b95[56]](_0x3b95[79]);if(_0xb8dcx9!= null){this[_0x3b95[14]][_0x3b95[79]]= _0xb8dcx9}else {this[_0x3b95[14]][_0x3b95[79]]= 1.5};var _0xb8dcxa=_0xb8dcx7[_0x3b95[56]](_0x3b95[80]);var _0xb8dcxb=_0xb8dcx7[_0x3b95[56]](_0x3b95[81]);if(_0xb8dcxa!= null&& _0xb8dcxb!= null){this[_0x3b95[14]][_0x3b95[82]]= new mxRectangle(0,0,parseFloat(_0xb8dcxa),parseFloat(_0xb8dcxb));this[_0x3b95[15]][_0x3b95[15]][_0x3b95[82]]= this[_0x3b95[14]][_0x3b95[82]]};var _0xb8dcxc=_0xb8dcx7[_0x3b95[56]](_0x3b95[41]);if(_0xb8dcxc!= null&& _0xb8dcxc[_0x3b95[83]]> 0){this[_0x3b95[14]][_0x3b95[41]]= _0xb8dcxc};_0xb8dcx8[_0x3b95[84]](_0xb8dcx7,this[_0x3b95[14]][_0x3b95[36]]());this[_0x3b95[85]]()}};Editor[_0x3b95[44]][_0x3b95[86]]= function(){var _0xb8dcxd= new mxCodec(mxUtils[_0x3b95[87]]());var _0xb8dcx7=_0xb8dcxd[_0x3b95[88]](this[_0x3b95[14]][_0x3b95[36]]());if(this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[70]]!= 0|| this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[73]]!= 0){_0xb8dcx7[_0x3b95[90]](_0x3b95[72],Math[_0x3b95[89]](this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[70]]* 100)/ 100);_0xb8dcx7[_0x3b95[90]](_0x3b95[74],Math[_0x3b95[89]](this[_0x3b95[14]][_0x3b95[53]][_0x3b95[71]][_0x3b95[73]]* 100)/ 100)};_0xb8dcx7[_0x3b95[90]](_0x3b95[55],(this[_0x3b95[14]][_0x3b95[91]]())?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[60],(this[_0x3b95[14]][_0x3b95[59]][_0x3b95[58]])?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[60],(this[_0x3b95[14]][_0x3b95[59]][_0x3b95[58]])?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[61],(this[_0x3b95[14]][_0x3b95[93]][_0x3b95[92]]())?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[63],(this[_0x3b95[14]][_0x3b95[94]][_0x3b95[92]]())?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[66],(this[_0x3b95[14]][_0x3b95[65]])?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[76],(this[_0x3b95[14]][_0x3b95[75]])?_0x3b95[8]:_0x3b95[57]);_0xb8dcx7[_0x3b95[90]](_0x3b95[79],this[_0x3b95[14]][_0x3b95[79]]);_0xb8dcx7[_0x3b95[90]](_0x3b95[80],this[_0x3b95[14]][_0x3b95[82]][_0x3b95[95]]);_0xb8dcx7[_0x3b95[90]](_0x3b95[81],this[_0x3b95[14]][_0x3b95[82]][_0x3b95[96]]);if(!this[_0x3b95[14]][_0x3b95[40]]){_0xb8dcx7[_0x3b95[90]](_0x3b95[40],_0x3b95[57])};if(this[_0x3b95[14]][_0x3b95[41]]!= null){_0xb8dcx7[_0x3b95[90]](_0x3b95[41],this[_0x3b95[14]][_0x3b95[41]])};return _0xb8dcx7};Editor[_0x3b95[44]][_0x3b95[85]]= function(){var _0xb8dcxe=this[_0x3b95[14]];var _0xb8dcxf=this[_0x3b95[15]];if(_0xb8dcxe[_0x3b95[68]]!= null&& _0xb8dcxf[_0x3b95[15]][_0x3b95[68]]!= null){if(_0xb8dcxe[_0x3b95[41]]!= null){if(_0xb8dcxe[_0x3b95[41]]== _0x3b95[97]){_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[98]]= _0x3b95[100]}else {if(_0xb8dcxe[_0x3b95[53]][_0x3b95[101]]!= null){_0xb8dcxe[_0x3b95[53]][_0x3b95[101]][_0x3b95[102]]= _0xb8dcxe[_0x3b95[41]];_0xb8dcxe[_0x3b95[53]][_0x3b95[101]][_0x3b95[103]]()};_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[98]]= _0xb8dcxe[_0x3b95[41]]}}else {_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[98]]= _0x3b95[20]};if(_0xb8dcxe[_0x3b95[75]]){_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[98]]= _0x3b95[104];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[105]]= _0x3b95[106];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[107]]= _0x3b95[108];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[109]]= _0x3b95[110];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[111]]= _0x3b95[110];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[112]]= _0x3b95[113];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[114]]= _0x3b95[113]}else {_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[115]]= _0x3b95[20]};_0xb8dcxf[_0x3b95[15]][_0x3b95[68]][_0x3b95[99]][_0x3b95[98]]= _0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[98]];if(_0xb8dcxf[_0x3b95[15]][_0x3b95[75]]!= _0xb8dcxe[_0x3b95[75]]|| _0xb8dcxf[_0x3b95[15]][_0x3b95[79]]!= _0xb8dcxe[_0x3b95[79]]){_0xb8dcxf[_0x3b95[15]][_0x3b95[79]]= _0xb8dcxe[_0x3b95[79]];_0xb8dcxf[_0x3b95[15]][_0x3b95[75]]= _0xb8dcxe[_0x3b95[75]];_0xb8dcxf[_0x3b95[15]][_0x3b95[53]][_0x3b95[116]]()};if(_0xb8dcxe[_0x3b95[40]]&& _0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[117]]== _0x3b95[118]&& !touchStyle){_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[117]]= _0x3b95[119]}else {if(!_0xb8dcxe[_0x3b95[40]]|| touchStyle){_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[117]]= _0x3b95[118]}};var _0xb8dcx10=(mxClient[_0x3b95[120]]&& document[_0x3b95[121]]>= 9)?_0x3b95[122]+ this[_0x3b95[46]]+ _0x3b95[123]:_0x3b95[97];_0xb8dcxe[_0x3b95[68]][_0x3b95[99]][_0x3b95[124]]= (!_0xb8dcxe[_0x3b95[75]]&& _0xb8dcxe[_0x3b95[91]]())?_0x3b95[122]+ this[_0x3b95[43]]+ _0x3b95[123]:_0xb8dcx10;if(_0xb8dcxe[_0x3b95[53]][_0x3b95[101]]!= null){_0xb8dcxe[_0x3b95[53]][_0x3b95[101]][_0x3b95[125]][_0x3b95[99]][_0x3b95[124]]= (this[_0x3b95[14]][_0x3b95[91]]())?_0x3b95[122]+ this[_0x3b95[43]]+ _0x3b95[123]:_0x3b95[97]}}};Editor[_0x3b95[44]][_0x3b95[12]]= function(){if(mxClient[_0x3b95[126]]){mxClient[_0x3b95[129]](_0x3b95[127],CSS_PATH+ _0x3b95[128])};mxResources[_0x3b95[130]]= false;mxResources[_0x3b95[131]](RESOURCE_BASE);mxConstants[_0x3b95[132]]= 0.3;var _0xb8dcx11=mxConnectionHandler[_0x3b95[44]][_0x3b95[133]];mxConnectionHandler[_0x3b95[44]][_0x3b95[133]]= function(){var _0xb8dcx12=_0xb8dcx11[_0x3b95[33]](this,arguments);_0xb8dcx12[_0x3b95[134]]= mxUtils[_0x3b95[34]](this,function(_0xb8dcx13,_0xb8dcx14){if(this[_0x3b95[135]]()){return true};return mxCellMarker[_0x3b95[44]][_0x3b95[134]][_0x3b95[33]](_0xb8dcx12,arguments)});return _0xb8dcx12};mxConstants[_0x3b95[136]]= _0x3b95[137];mxConstants[_0x3b95[138]]= _0x3b95[139];mxConstants[_0x3b95[140]]= _0x3b95[141];mxConstants[_0x3b95[142]]= _0x3b95[143];mxConstants[_0x3b95[144]]= _0x3b95[143];mxConstants[_0x3b95[145]]= _0x3b95[139];mxConstants[_0x3b95[146]]= _0x3b95[143];mxConstants[_0x3b95[147]]= _0x3b95[148];mxConstants[_0x3b95[149]]= _0x3b95[143];mxConstants[_0x3b95[150]]= _0x3b95[143];mxConstants[_0x3b95[151]]= _0x3b95[148];mxConstants[_0x3b95[152]]= _0x3b95[141];mxGraph[_0x3b95[44]][_0x3b95[153]]= _0x3b95[154];mxGraph[_0x3b95[44]][_0x3b95[79]]= 1;mxRubberband[_0x3b95[44]][_0x3b95[155]]= 30;mxGraphView[_0x3b95[44]][_0x3b95[156]]= function(_0xb8dcx15){return new mxRectangleShape(_0xb8dcx15,this[_0x3b95[14]][_0x3b95[41]]|| _0x3b95[157],_0x3b95[158])};mxGraphView[_0x3b95[44]][_0x3b95[159]]= function(){var _0xb8dcx16=this[_0x3b95[160]]();var _0xb8dcx17=(_0xb8dcx16[_0x3b95[95]]> 0)?_0xb8dcx16[_0x3b95[70]]/ this[_0x3b95[52]]- this[_0x3b95[71]][_0x3b95[70]]:0;var _0xb8dcx18=(_0xb8dcx16[_0x3b95[96]]> 0)?_0xb8dcx16[_0x3b95[73]]/ this[_0x3b95[52]]- this[_0x3b95[71]][_0x3b95[73]]:0;var _0xb8dcx19=_0xb8dcx16[_0x3b95[95]]/ this[_0x3b95[52]];var _0xb8dcx1a=_0xb8dcx16[_0x3b95[96]]/ this[_0x3b95[52]];var _0xb8dcx1b=this[_0x3b95[14]][_0x3b95[82]];var _0xb8dcx9=this[_0x3b95[14]][_0x3b95[79]];var _0xb8dcxa=_0xb8dcx1b[_0x3b95[95]]* _0xb8dcx9;var _0xb8dcxb=_0xb8dcx1b[_0x3b95[96]]* _0xb8dcx9;var _0xb8dcx1c=Math[_0x3b95[162]](Math[_0x3b95[161]](0,_0xb8dcx17)/ _0xb8dcxa);var _0xb8dcx1d=Math[_0x3b95[162]](Math[_0x3b95[161]](0,_0xb8dcx18)/ _0xb8dcxb);var _0xb8dcx1e=Math[_0x3b95[164]](Math[_0x3b95[163]](1,_0xb8dcx17+ _0xb8dcx19)/ _0xb8dcxa);var _0xb8dcx1f=Math[_0x3b95[164]](Math[_0x3b95[163]](1,_0xb8dcx18+ _0xb8dcx1a)/ _0xb8dcxb);var _0xb8dcx20=_0xb8dcx1e- _0xb8dcx1c;var _0xb8dcx21=_0xb8dcx1f- _0xb8dcx1d;var _0xb8dcx15= new mxRectangle(this[_0x3b95[52]]* (this[_0x3b95[71]][_0x3b95[70]]+ _0xb8dcx1c* _0xb8dcxa),this[_0x3b95[52]]* (this[_0x3b95[71]][_0x3b95[73]]+ _0xb8dcx1d* _0xb8dcxb),this[_0x3b95[52]]* _0xb8dcx20* _0xb8dcxa,this[_0x3b95[52]]* _0xb8dcx21* _0xb8dcxb);return _0xb8dcx15};var _0xb8dcx22=mxGraph[_0x3b95[44]][_0x3b95[165]];mxGraph[_0x3b95[44]][_0x3b95[165]]= function(_0xb8dcx23,_0xb8dcx24){_0xb8dcx22[_0x3b95[33]](this,arguments);if((this[_0x3b95[166]]!= mxConstants[_0x3b95[167]]&& this[_0x3b95[53]][_0x3b95[101]]!= null)&& (!this[_0x3b95[168]]|| !mxUtils[_0x3b95[169]](this[_0x3b95[68]]))){this[_0x3b95[53]][_0x3b95[101]][_0x3b95[125]][_0x3b95[99]][_0x3b95[170]]= _0xb8dcx23+ _0x3b95[171];this[_0x3b95[53]][_0x3b95[101]][_0x3b95[125]][_0x3b95[99]][_0x3b95[172]]= _0xb8dcx24+ _0x3b95[171]}};var _0xb8dcx25=this;mxGraphView[_0x3b95[44]][_0x3b95[173]]= function(){var _0xb8dcxc=this[_0x3b95[14]][_0x3b95[174]]();if(_0xb8dcxc!= null){if(this[_0x3b95[124]]== null|| this[_0x3b95[124]][_0x3b95[175]]!= _0xb8dcxc[_0x3b95[176]]){if(this[_0x3b95[124]]!= null){this[_0x3b95[124]][_0x3b95[177]]()};var _0xb8dcx15= new mxRectangle(0,0,1,1);this[_0x3b95[124]]= new mxImageShape(_0xb8dcx15,_0xb8dcxc[_0x3b95[176]]);this[_0x3b95[124]][_0x3b95[166]]= this[_0x3b95[14]][_0x3b95[166]];this[_0x3b95[124]][_0x3b95[12]](this[_0x3b95[178]]);this[_0x3b95[124]][_0x3b95[179]]()};this[_0x3b95[180]](this[_0x3b95[124]],_0xb8dcxc)}else {if(this[_0x3b95[124]]!= null){this[_0x3b95[124]][_0x3b95[177]]();this[_0x3b95[124]]= null}};if(this[_0x3b95[14]][_0x3b95[75]]){var _0xb8dcx15=this[_0x3b95[159]]();if(this[_0x3b95[101]]== null){this[_0x3b95[101]]= this[_0x3b95[156]](_0xb8dcx15);this[_0x3b95[101]][_0x3b95[52]]= 1;this[_0x3b95[101]][_0x3b95[181]]= true;this[_0x3b95[101]][_0x3b95[166]]= mxConstants[_0x3b95[182]];this[_0x3b95[101]][_0x3b95[12]](this[_0x3b95[14]][_0x3b95[68]]);this[_0x3b95[14]][_0x3b95[68]][_0x3b95[184]][_0x3b95[99]][_0x3b95[183]]= _0x3b95[185];this[_0x3b95[14]][_0x3b95[68]][_0x3b95[186]](this[_0x3b95[101]][_0x3b95[125]],this[_0x3b95[14]][_0x3b95[68]][_0x3b95[184]]);this[_0x3b95[101]][_0x3b95[179]]();this[_0x3b95[101]][_0x3b95[125]][_0x3b95[187]]= _0x3b95[188];this[_0x3b95[101]][_0x3b95[125]][_0x3b95[99]][_0x3b95[189]]= _0x3b95[190];mxEvent[_0x3b95[35]](this[_0x3b95[101]][_0x3b95[125]],_0x3b95[191],mxUtils[_0x3b95[34]](this,function(_0xb8dcx14){this[_0x3b95[14]][_0x3b95[192]](_0xb8dcx14)}));mxEvent[_0x3b95[198]](this[_0x3b95[101]][_0x3b95[125]],mxUtils[_0x3b95[34]](this,function(_0xb8dcx14){this[_0x3b95[14]][_0x3b95[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0xb8dcx14))}),mxUtils[_0x3b95[34]](this,function(_0xb8dcx14){if(this[_0x3b95[14]][_0x3b95[93]]!= null&& this[_0x3b95[14]][_0x3b95[93]][_0x3b95[194]]()){this[_0x3b95[14]][_0x3b95[93]][_0x3b95[195]]()};if(this[_0x3b95[14]][_0x3b95[196]]&& !mxEvent[_0x3b95[197]](_0xb8dcx14)){this[_0x3b95[14]][_0x3b95[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0xb8dcx14))}}),mxUtils[_0x3b95[34]](this,function(_0xb8dcx14){this[_0x3b95[14]][_0x3b95[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0xb8dcx14))}))}else {this[_0x3b95[101]][_0x3b95[52]]= 1;this[_0x3b95[101]][_0x3b95[199]]= _0xb8dcx15;this[_0x3b95[101]][_0x3b95[179]]()};this[_0x3b95[101]][_0x3b95[125]][_0x3b95[99]][_0x3b95[124]]= (this[_0x3b95[14]][_0x3b95[91]]())?_0x3b95[122]+ _0xb8dcx25[_0x3b95[43]]+ _0x3b95[123]:_0x3b95[97]}else {if(this[_0x3b95[101]]!= null){this[_0x3b95[101]][_0x3b95[177]]();this[_0x3b95[101]]= null}}};mxGraph[_0x3b95[44]][_0x3b95[200]]= function(_0xb8dcx26,_0xb8dcx27,_0xb8dcx28){var _0xb8dcx29=this[_0x3b95[53]][_0x3b95[52]];var _0xb8dcx2a=this[_0x3b95[53]][_0x3b95[71]];var _0xb8dcx1b=this[_0x3b95[82]];var _0xb8dcx9=_0xb8dcx29* this[_0x3b95[79]];var _0xb8dcx2b=this[_0x3b95[53]][_0x3b95[159]]();_0xb8dcx27= _0xb8dcx2b[_0x3b95[95]];_0xb8dcx28= _0xb8dcx2b[_0x3b95[96]];var _0xb8dcx15= new mxRectangle(_0xb8dcx29* _0xb8dcx2a[_0x3b95[70]],_0xb8dcx29* _0xb8dcx2a[_0x3b95[73]],_0xb8dcx1b[_0x3b95[95]]* _0xb8dcx9,_0xb8dcx1b[_0x3b95[96]]* _0xb8dcx9);_0xb8dcx26= _0xb8dcx26&& Math[_0x3b95[161]](_0xb8dcx15[_0x3b95[95]],_0xb8dcx15[_0x3b95[96]])> this[_0x3b95[201]];var _0xb8dcx2c=(_0xb8dcx26)?Math[_0x3b95[164]](_0xb8dcx27/ _0xb8dcx15[_0x3b95[95]])- 1:0;var _0xb8dcx2d=(_0xb8dcx26)?Math[_0x3b95[164]](_0xb8dcx28/ _0xb8dcx15[_0x3b95[96]])- 1:0;var _0xb8dcx2e=_0xb8dcx2b[_0x3b95[70]]+ _0xb8dcx27;var _0xb8dcx2f=_0xb8dcx2b[_0x3b95[73]]+ _0xb8dcx28;if(this[_0x3b95[202]]== null&& _0xb8dcx2c> 0){this[_0x3b95[202]]= []};if(this[_0x3b95[202]]!= null){for(var _0xb8dcx30=0;_0xb8dcx30<= _0xb8dcx2c;_0xb8dcx30++){var _0xb8dcx31=[ new mxPoint(_0xb8dcx2b[_0x3b95[70]]+ (_0xb8dcx30+ 1)* _0xb8dcx15[_0x3b95[95]],_0xb8dcx2b[_0x3b95[73]]), new mxPoint(_0xb8dcx2b[_0x3b95[70]]+ (_0xb8dcx30+ 1)* _0xb8dcx15[_0x3b95[95]],_0xb8dcx2f)];if(this[_0x3b95[202]][_0xb8dcx30]!= null){this[_0x3b95[202]][_0xb8dcx30][_0x3b95[52]]= 1;this[_0x3b95[202]][_0xb8dcx30][_0x3b95[203]]= _0xb8dcx31;this[_0x3b95[202]][_0xb8dcx30][_0x3b95[179]]()}else {var _0xb8dcx32= new mxPolyline(_0xb8dcx31,this[_0x3b95[153]],this[_0x3b95[52]]);_0xb8dcx32[_0x3b95[166]]= this[_0x3b95[166]];_0xb8dcx32[_0x3b95[204]]= this[_0x3b95[205]];_0xb8dcx32[_0x3b95[206]]= false;_0xb8dcx32[_0x3b95[52]]= _0xb8dcx29;_0xb8dcx32[_0x3b95[12]](this[_0x3b95[53]][_0x3b95[178]]);_0xb8dcx32[_0x3b95[179]]();this[_0x3b95[202]][_0xb8dcx30]= _0xb8dcx32}};for(var _0xb8dcx30=_0xb8dcx2c;_0xb8dcx30< this[_0x3b95[202]][_0x3b95[83]];_0xb8dcx30++){this[_0x3b95[202]][_0xb8dcx30][_0x3b95[177]]()};this[_0x3b95[202]][_0x3b95[207]](_0xb8dcx2c,this[_0x3b95[202]][_0x3b95[83]]- _0xb8dcx2c)};if(this[_0x3b95[208]]== null&& _0xb8dcx2d> 0){this[_0x3b95[208]]= []};if(this[_0x3b95[208]]!= null){for(var _0xb8dcx30=0;_0xb8dcx30<= _0xb8dcx2d;_0xb8dcx30++){var _0xb8dcx31=[ new mxPoint(_0xb8dcx2b[_0x3b95[70]],_0xb8dcx2b[_0x3b95[73]]+ (_0xb8dcx30+ 1)* _0xb8dcx15[_0x3b95[96]]), new mxPoint(_0xb8dcx2e,_0xb8dcx2b[_0x3b95[73]]+ (_0xb8dcx30+ 1)* _0xb8dcx15[_0x3b95[96]])];if(this[_0x3b95[208]][_0xb8dcx30]!= null){this[_0x3b95[208]][_0xb8dcx30][_0x3b95[52]]= 1;this[_0x3b95[208]][_0xb8dcx30][_0x3b95[203]]= _0xb8dcx31;this[_0x3b95[208]][_0xb8dcx30][_0x3b95[179]]()}else {var _0xb8dcx32= new mxPolyline(_0xb8dcx31,this[_0x3b95[153]],_0xb8dcx29);_0xb8dcx32[_0x3b95[166]]= this[_0x3b95[166]];_0xb8dcx32[_0x3b95[204]]= this[_0x3b95[205]];_0xb8dcx32[_0x3b95[206]]= false;_0xb8dcx32[_0x3b95[52]]= _0xb8dcx29;_0xb8dcx32[_0x3b95[12]](this[_0x3b95[53]][_0x3b95[178]]);_0xb8dcx32[_0x3b95[179]]();this[_0x3b95[208]][_0xb8dcx30]= _0xb8dcx32}};for(var _0xb8dcx30=_0xb8dcx2d;_0xb8dcx30< this[_0x3b95[208]][_0x3b95[83]];_0xb8dcx30++){this[_0x3b95[208]][_0xb8dcx30][_0x3b95[177]]()};this[_0x3b95[208]][_0x3b95[207]](_0xb8dcx2d,this[_0x3b95[208]][_0x3b95[83]]- _0xb8dcx2d)}};mxEdgeHandler[_0x3b95[44]][_0x3b95[209]]= true;mxGraphHandler[_0x3b95[44]][_0x3b95[58]]= true;var _0xb8dcx33=mxGraphHandler[_0x3b95[44]][_0x3b95[210]];mxGraphHandler[_0x3b95[44]][_0x3b95[210]]= function(_0xb8dcx34,_0xb8dcx35,_0xb8dcx14){for(var _0xb8dcx30=0;_0xb8dcx30< _0xb8dcx35[_0x3b95[83]];_0xb8dcx30++){if(this[_0x3b95[14]][_0x3b95[36]]()[_0x3b95[211]](_0xb8dcx35[_0xb8dcx30])){var _0xb8dcx36=this[_0x3b95[14]][_0x3b95[212]](_0xb8dcx35[_0xb8dcx30]);if(_0xb8dcx36!= null&& _0xb8dcx36[_0x3b95[213]]){return false}}};return _0xb8dcx33[_0x3b95[33]](this,arguments)};mxGuide[_0x3b95[44]][_0x3b95[214]]= function(_0xb8dcx14){return !mxEvent[_0x3b95[215]](_0xb8dcx14)};mxPopupMenuAddItem= mxPopupMenu[_0x3b95[44]][_0x3b95[216]];mxPopupMenu[_0x3b95[44]][_0x3b95[216]]= function(_0xb8dcx37,_0xb8dcx38,_0xb8dcx39,_0xb8dcx34,_0xb8dcx3a,_0xb8dcx3b){var _0xb8dcx3c=mxPopupMenuAddItem[_0x3b95[33]](this,arguments);if(_0xb8dcx3b!= null&& !_0xb8dcx3b){mxEvent[_0x3b95[35]](_0xb8dcx3c,_0x3b95[217],function(_0xb8dcx14){mxEvent[_0x3b95[218]](_0xb8dcx14)})};return _0xb8dcx3c};var _0xb8dcx3d=mxGraphHandler[_0x3b95[44]][_0x3b95[219]];mxGraphHandler[_0x3b95[44]][_0x3b95[219]]= function(_0xb8dcx3e){var _0xb8dcx3f=this[_0x3b95[14]][_0x3b95[36]]();var _0xb8dcx40=_0xb8dcx3f[_0x3b95[221]](this[_0x3b95[14]][_0x3b95[220]]());var _0xb8dcx41=_0xb8dcx3d[_0x3b95[33]](this,arguments);var _0xb8dcx34=_0xb8dcx3f[_0x3b95[221]](_0xb8dcx41);if(_0xb8dcx40== null|| (_0xb8dcx40!= _0xb8dcx41&& _0xb8dcx40!= _0xb8dcx34)){while(!this[_0x3b95[14]][_0x3b95[222]](_0xb8dcx41)&& !this[_0x3b95[14]][_0x3b95[222]](_0xb8dcx34)&& _0xb8dcx3f[_0x3b95[211]](_0xb8dcx34)&& !this[_0x3b95[14]][_0x3b95[223]](_0xb8dcx34)){_0xb8dcx41= _0xb8dcx34;_0xb8dcx34= this[_0x3b95[14]][_0x3b95[36]]()[_0x3b95[221]](_0xb8dcx41)}};return _0xb8dcx41};var _0xb8dcx42=mxGraphHandler[_0x3b95[44]][_0x3b95[224]];mxGraphHandler[_0x3b95[44]][_0x3b95[224]]= function(_0xb8dcx41){var _0xb8dcx3c=_0xb8dcx42[_0x3b95[33]](this,arguments);var _0xb8dcx3f=this[_0x3b95[14]][_0x3b95[36]]();var _0xb8dcx40=_0xb8dcx3f[_0x3b95[221]](this[_0x3b95[14]][_0x3b95[220]]());var _0xb8dcx34=_0xb8dcx3f[_0x3b95[221]](_0xb8dcx41);if(_0xb8dcx40== null|| (_0xb8dcx40!= _0xb8dcx41&& _0xb8dcx40!= _0xb8dcx34)){if(!this[_0x3b95[14]][_0x3b95[222]](_0xb8dcx41)&& _0xb8dcx3f[_0x3b95[211]](_0xb8dcx34)&& !this[_0x3b95[14]][_0x3b95[223]](_0xb8dcx34)){_0xb8dcx3c= true}};return _0xb8dcx3c};mxGraphHandler[_0x3b95[44]][_0x3b95[225]]= function(_0xb8dcx3e){var _0xb8dcx41=_0xb8dcx3e[_0x3b95[226]]();if(_0xb8dcx41== null){_0xb8dcx41= this[_0x3b95[227]]};var _0xb8dcx3f=this[_0x3b95[14]][_0x3b95[36]]();var _0xb8dcx34=_0xb8dcx3f[_0x3b95[221]](_0xb8dcx41);while(this[_0x3b95[14]][_0x3b95[222]](_0xb8dcx41)&& _0xb8dcx3f[_0x3b95[211]](_0xb8dcx34)&& !this[_0x3b95[14]][_0x3b95[223]](_0xb8dcx34)){_0xb8dcx41= _0xb8dcx34;_0xb8dcx34= _0xb8dcx3f[_0x3b95[221]](_0xb8dcx41)};this[_0x3b95[14]][_0x3b95[229]](_0xb8dcx41,_0xb8dcx3e[_0x3b95[228]]())};mxPanningHandler[_0x3b95[44]][_0x3b95[230]]= function(_0xb8dcx3e){var _0xb8dcx41=_0xb8dcx3e[_0x3b95[226]]();var _0xb8dcx3f=this[_0x3b95[14]][_0x3b95[36]]();var _0xb8dcx34=_0xb8dcx3f[_0x3b95[221]](_0xb8dcx41);while(_0xb8dcx3f[_0x3b95[211]](_0xb8dcx34)&& !this[_0x3b95[14]][_0x3b95[223]](_0xb8dcx34)){if(this[_0x3b95[14]][_0x3b95[222]](_0xb8dcx34)){_0xb8dcx41= _0xb8dcx34};_0xb8dcx34= _0xb8dcx3f[_0x3b95[221]](_0xb8dcx34)};return _0xb8dcx41}};Editor[_0x3b95[44]][_0x3b95[18]]= function(){var _0xb8dcxe=this[_0x3b95[14]];var _0xb8dcx43= new mxUndoManager();var _0xb8dcx44=function(_0xb8dcx45,_0xb8dcx14){_0xb8dcx43[_0x3b95[233]](_0xb8dcx14[_0x3b95[232]](_0x3b95[231]))};_0xb8dcxe[_0x3b95[36]]()[_0x3b95[35]](mxEvent.UNDO,_0xb8dcx44);_0xb8dcxe[_0x3b95[234]]()[_0x3b95[35]](mxEvent.UNDO,_0xb8dcx44);var _0xb8dcx46=function(_0xb8dcx45,_0xb8dcx14){var _0xb8dcx47=_0xb8dcxe[_0x3b95[236]](_0xb8dcx14[_0x3b95[232]](_0x3b95[231])[_0x3b95[235]]);var _0xb8dcx35=[];for(var _0xb8dcx30=1;_0xb8dcx30< _0xb8dcx47[_0x3b95[83]];_0xb8dcx30++){if(_0xb8dcxe[_0x3b95[53]][_0x3b95[237]](_0xb8dcx47[_0xb8dcx30])!= null){_0xb8dcx35[_0x3b95[238]](_0xb8dcx47[_0xb8dcx30])}};_0xb8dcxe[_0x3b95[239]](_0xb8dcx35)};_0xb8dcx43[_0x3b95[35]](mxEvent.UNDO,_0xb8dcx46);_0xb8dcx43[_0x3b95[35]](mxEvent.REDO,_0xb8dcx46);return _0xb8dcx43};Editor[_0x3b95[44]][_0x3b95[13]]= function(){mxStencilRegistry[_0x3b95[241]](STENCIL_PATH+ _0x3b95[240])};(function(){mxStencilRegistry[_0x3b95[242]]= {};mxStencilRegistry[_0x3b95[243]]= [];mxStencilRegistry[_0x3b95[244]]= function(_0xb8dcx48){var _0xb8dcx3c=mxStencilRegistry[_0x3b95[245]][_0xb8dcx48];if(_0xb8dcx3c== null){var _0xb8dcx49=mxStencilRegistry[_0x3b95[246]](_0xb8dcx48);if(_0xb8dcx49!= null){var _0xb8dcx4a=mxStencilRegistry[_0x3b95[242]][_0xb8dcx49];if(_0xb8dcx4a!= null){if(mxStencilRegistry[_0x3b95[243]][_0xb8dcx49]== null){mxStencilRegistry[_0x3b95[243]][_0xb8dcx49]= 1;for(var _0xb8dcx30=0;_0xb8dcx30< _0xb8dcx4a[_0x3b95[83]];_0xb8dcx30++){var _0xb8dcx4b=_0xb8dcx4a[_0xb8dcx30];if(_0xb8dcx4b[_0x3b95[248]]()[_0x3b95[247]](_0xb8dcx4b[_0x3b95[83]]- 4,_0xb8dcx4b[_0x3b95[83]])== _0x3b95[25]){mxStencilRegistry[_0x3b95[241]](_0xb8dcx4b,null)}else {if(_0xb8dcx4b[_0x3b95[248]]()[_0x3b95[247]](_0xb8dcx4b[_0x3b95[83]]- 3,_0xb8dcx4b[_0x3b95[83]])== _0x3b95[249]){var _0xb8dcx4c=mxUtils[_0x3b95[250]](_0xb8dcx4b);if(_0xb8dcx4c!= null){eval[_0x3b95[11]](window,_0xb8dcx4c[_0x3b95[251]]())}}else {}}}}}else {mxStencilRegistry[_0x3b95[241]](STENCIL_PATH+ _0x3b95[252]+ _0xb8dcx49+ _0x3b95[25],null)};_0xb8dcx3c= mxStencilRegistry[_0x3b95[245]][_0xb8dcx48]}};return _0xb8dcx3c};mxStencilRegistry[_0x3b95[246]]= function(_0xb8dcx48){var _0xb8dcx4d=_0xb8dcx48[_0x3b95[254]](_0x3b95[253]);var _0xb8dcx4e=null;if(_0xb8dcx4d[_0x3b95[83]]> 0&& _0xb8dcx4d[0]== _0x3b95[255]){_0xb8dcx4e= _0xb8dcx4d[1];for(var _0xb8dcx30=2;_0xb8dcx30< _0xb8dcx4d[_0x3b95[83]]- 1;_0xb8dcx30++){_0xb8dcx4e+= _0x3b95[252]+ _0xb8dcx4d[_0xb8dcx30]}};return _0xb8dcx4e};mxStencilRegistry[_0x3b95[241]]= function(_0xb8dcx4f,_0xb8dcx50,_0xb8dcx51){_0xb8dcx51= (_0xb8dcx51!= null)?_0xb8dcx51:false;var _0xb8dcx52=mxStencilRegistry[_0x3b95[243]][_0xb8dcx4f];if(_0xb8dcx51|| _0xb8dcx52== null){var _0xb8dcx53=false;if(_0xb8dcx52== null){var _0xb8dcx4c=mxUtils[_0x3b95[250]](_0xb8dcx4f);_0xb8dcx52= _0xb8dcx4c[_0x3b95[256]]();mxStencilRegistry[_0x3b95[243]][_0xb8dcx4f]= _0xb8dcx52;_0xb8dcx53= true};mxStencilRegistry[_0x3b95[257]](_0xb8dcx52,_0xb8dcx50,_0xb8dcx53)}};mxStencilRegistry[_0x3b95[257]]= function(_0xb8dcx54,_0xb8dcx50,_0xb8dcx53){_0xb8dcx53= (_0xb8dcx53!= null)?_0xb8dcx53:true;var _0xb8dcx55=_0xb8dcx54[_0x3b95[258]];var _0xb8dcx56=_0xb8dcx55[_0x3b95[184]];var _0xb8dcx57=_0x3b95[20];var _0xb8dcx48=_0xb8dcx55[_0x3b95[56]](_0x3b95[259]);if(_0xb8dcx48!= null){_0xb8dcx57= _0xb8dcx48+ _0x3b95[253]};while(_0xb8dcx56!= null){if(_0xb8dcx56[_0x3b95[260]]== mxConstants[_0x3b95[261]]){_0xb8dcx48= _0xb8dcx56[_0x3b95[56]](_0x3b95[259]);if(_0xb8dcx48!= null){_0xb8dcx57= _0xb8dcx57[_0x3b95[248]]();var _0xb8dcx58=_0xb8dcx48[_0x3b95[263]](/ /g,_0x3b95[262]);if(_0xb8dcx53){mxStencilRegistry[_0x3b95[264]](_0xb8dcx57+ _0xb8dcx58[_0x3b95[248]](), new mxStencil(_0xb8dcx56))};if(_0xb8dcx50!= null){var _0xb8dcx19=_0xb8dcx56[_0x3b95[56]](_0x3b95[265]);var _0xb8dcx1a=_0xb8dcx56[_0x3b95[56]](_0x3b95[266]);_0xb8dcx19= (_0xb8dcx19== null)?80:parseInt(_0xb8dcx19,10);_0xb8dcx1a= (_0xb8dcx1a== null)?80:parseInt(_0xb8dcx1a,10);_0xb8dcx50(_0xb8dcx57,_0xb8dcx58,_0xb8dcx48,_0xb8dcx19,_0xb8dcx1a)}}};_0xb8dcx56= _0xb8dcx56[_0x3b95[267]]}}})();OpenFile= function(_0xb8dcx59){this[_0x3b95[268]]= null;this[_0x3b95[269]]= null;this[_0x3b95[270]]= _0xb8dcx59};OpenFile[_0x3b95[44]][_0x3b95[271]]= function(_0xb8dcx6){this[_0x3b95[269]]= _0xb8dcx6;this[_0x3b95[272]]()};OpenFile[_0x3b95[44]][_0x3b95[273]]= function(_0xb8dcx6,_0xb8dcx5a){this[_0x3b95[274]]= _0xb8dcx6;this[_0x3b95[21]]= _0xb8dcx5a;this[_0x3b95[272]]()};OpenFile[_0x3b95[44]][_0x3b95[275]]= function(_0xb8dcx5b){this[_0x3b95[276]]();mxUtils[_0x3b95[277]](_0xb8dcx5b)};OpenFile[_0x3b95[44]][_0x3b95[272]]= function(){if(this[_0x3b95[269]]!= null&& this[_0x3b95[274]]!= null){this[_0x3b95[269]](this[_0x3b95[274]],this[_0x3b95[21]]);this[_0x3b95[276]]()}};OpenFile[_0x3b95[44]][_0x3b95[276]]= function(){if(this[_0x3b95[270]]!= null){this[_0x3b95[270]]()}}
\ No newline at end of file