From 7856213f7b000e898380c9298f6d6738cd22cb8e Mon Sep 17 00:00:00 2001 From: xhlulu Date: Mon, 15 Feb 2021 19:06:17 -0500 Subject: [PATCH 1/5] Add persistence prop types --- src/lib/components/Cytoscape.react.js | 32 ++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/lib/components/Cytoscape.react.js b/src/lib/components/Cytoscape.react.js index 24d19b1c..4009e0be 100644 --- a/src/lib/components/Cytoscape.react.js +++ b/src/lib/components/Cytoscape.react.js @@ -899,7 +899,37 @@ Cytoscape.propTypes = { /** * Toggles intelligent responsive resize of Cytoscape graph with viewport size change */ - responsive: PropTypes.bool + responsive: PropTypes.bool, + + /** + * Used to allow user interactions in this component to be persisted when + * the component - or the page - is refreshed. If `persisted` is truthy and + * hasn't changed from its previous value, any `persisted_props` that the + * user has changed while using the app will keep those changes, as long as + * the new prop value also matches what was given originally. + * Used in conjunction with `persistence_type` and `persisted_props`. + */ + persistence: PropTypes.oneOfType([ + PropTypes.bool, + PropTypes.string, + PropTypes.number, + ]), + + /** + * Properties whose user interactions will persist after refreshing the + * component or the page. + */ + persisted_props: PropTypes.arrayOf( + PropTypes.oneOf(['elements', 'stylesheet', 'layout']) + ), + + /** + * Where persisted user changes will be stored: + * memory: only kept in memory, reset on page refresh. + * local: window.localStorage, data is kept after the browser quit. + * session: window.sessionStorage, data is cleared once the browser quit. + */ + persistence_type: PropTypes.oneOf(['local', 'session', 'memory']), }; Cytoscape.defaultProps = { From 8c95c123e92411d26c7c48eaaae0ccc231a627d3 Mon Sep 17 00:00:00 2001 From: xhlulu Date: Mon, 15 Feb 2021 19:06:32 -0500 Subject: [PATCH 2/5] Add persistence default props --- src/lib/components/Cytoscape.react.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/components/Cytoscape.react.js b/src/lib/components/Cytoscape.react.js index 4009e0be..ff595291 100644 --- a/src/lib/components/Cytoscape.react.js +++ b/src/lib/components/Cytoscape.react.js @@ -951,7 +951,9 @@ Cytoscape.defaultProps = { generateImage: {}, imageData: null, responsive: false, - elements: [] + elements: [], + persisted_props: [], + persistence_type: 'local', }; export default Cytoscape; From 7fcb9f0e9d1d88885e1e25198a24c0a6459405e3 Mon Sep 17 00:00:00 2001 From: xhlulu Date: Mon, 15 Feb 2021 19:09:38 -0500 Subject: [PATCH 3/5] Add persistenceTransforms --- src/lib/components/Cytoscape.react.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/lib/components/Cytoscape.react.js b/src/lib/components/Cytoscape.react.js index ff595291..fbea1b6b 100644 --- a/src/lib/components/Cytoscape.react.js +++ b/src/lib/components/Cytoscape.react.js @@ -956,4 +956,16 @@ Cytoscape.defaultProps = { persistence_type: 'local', }; +const defaultPersistenceTransform = { + extract: propValue => propValue, + apply: storedValue => storedValue, +}; + +Cytoscape.persistenceTransforms = { + elements: defaultPersistenceTransform, + stylesheet: defaultPersistenceTransform, + layout: defaultPersistenceTransform + +} + export default Cytoscape; From 07b8b59cc4444c2bb5df078c4d3b0d11c8cf737b Mon Sep 17 00:00:00 2001 From: xhlulu Date: Mon, 15 Feb 2021 19:10:31 -0500 Subject: [PATCH 4/5] npm run build --- dash_cytoscape/Cytoscape.py | 20 ++++-- dash_cytoscape/dash_cytoscape.dev.js | 2 +- dash_cytoscape/dash_cytoscape.min.js | 2 +- dash_cytoscape/dash_cytoscape_extra.dev.js | 2 +- dash_cytoscape/dash_cytoscape_extra.min.js | 2 +- dash_cytoscape/metadata.json | 71 ++++++++++++++++++++++ 6 files changed, 91 insertions(+), 8 deletions(-) diff --git a/dash_cytoscape/Cytoscape.py b/dash_cytoscape/Cytoscape.py index 2cf52013..47b822ac 100644 --- a/dash_cytoscape/Cytoscape.py +++ b/dash_cytoscape/Cytoscape.py @@ -191,14 +191,26 @@ class attribute). - filename (string; optional): Name for the file to be downloaded. Default: 'cyto'. - imageData (string; optional): String representation of the image requested with generateImage. Null if no image was requested yet or the previous request failed. Read-only. -- responsive (boolean; default False): Toggles intelligent responsive resize of Cytoscape graph with viewport size change""" +- responsive (boolean; default False): Toggles intelligent responsive resize of Cytoscape graph with viewport size change +- persistence (boolean | string | number; optional): Used to allow user interactions in this component to be persisted when +the component - or the page - is refreshed. If `persisted` is truthy and +hasn't changed from its previous value, any `persisted_props` that the +user has changed while using the app will keep those changes, as long as +the new prop value also matches what was given originally. +Used in conjunction with `persistence_type` and `persisted_props`. +- persisted_props (list of a value equal to: 'elements', 'stylesheet', 'layout's; optional): Properties whose user interactions will persist after refreshing the +component or the page. +- persistence_type (a value equal to: 'local', 'session', 'memory'; default 'local'): Where persisted user changes will be stored: +memory: only kept in memory, reset on page refresh. +local: window.localStorage, data is kept after the browser quit. +session: window.sessionStorage, data is cleared once the browser quit.""" @_explicitize_args - def __init__(self, id=Component.UNDEFINED, className=Component.UNDEFINED, style=Component.UNDEFINED, elements=Component.UNDEFINED, stylesheet=Component.UNDEFINED, layout=Component.UNDEFINED, pan=Component.UNDEFINED, zoom=Component.UNDEFINED, panningEnabled=Component.UNDEFINED, userPanningEnabled=Component.UNDEFINED, minZoom=Component.UNDEFINED, maxZoom=Component.UNDEFINED, zoomingEnabled=Component.UNDEFINED, userZoomingEnabled=Component.UNDEFINED, boxSelectionEnabled=Component.UNDEFINED, autoungrabify=Component.UNDEFINED, autolock=Component.UNDEFINED, autounselectify=Component.UNDEFINED, autoRefreshLayout=Component.UNDEFINED, tapNode=Component.UNDEFINED, tapNodeData=Component.UNDEFINED, tapEdge=Component.UNDEFINED, tapEdgeData=Component.UNDEFINED, mouseoverNodeData=Component.UNDEFINED, mouseoverEdgeData=Component.UNDEFINED, selectedNodeData=Component.UNDEFINED, selectedEdgeData=Component.UNDEFINED, generateImage=Component.UNDEFINED, imageData=Component.UNDEFINED, responsive=Component.UNDEFINED, **kwargs): - self._prop_names = ['id', 'className', 'style', 'elements', 'stylesheet', 'layout', 'pan', 'zoom', 'panningEnabled', 'userPanningEnabled', 'minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'boxSelectionEnabled', 'autoungrabify', 'autolock', 'autounselectify', 'autoRefreshLayout', 'tapNode', 'tapNodeData', 'tapEdge', 'tapEdgeData', 'mouseoverNodeData', 'mouseoverEdgeData', 'selectedNodeData', 'selectedEdgeData', 'generateImage', 'imageData', 'responsive'] + def __init__(self, id=Component.UNDEFINED, className=Component.UNDEFINED, style=Component.UNDEFINED, elements=Component.UNDEFINED, stylesheet=Component.UNDEFINED, layout=Component.UNDEFINED, pan=Component.UNDEFINED, zoom=Component.UNDEFINED, panningEnabled=Component.UNDEFINED, userPanningEnabled=Component.UNDEFINED, minZoom=Component.UNDEFINED, maxZoom=Component.UNDEFINED, zoomingEnabled=Component.UNDEFINED, userZoomingEnabled=Component.UNDEFINED, boxSelectionEnabled=Component.UNDEFINED, autoungrabify=Component.UNDEFINED, autolock=Component.UNDEFINED, autounselectify=Component.UNDEFINED, autoRefreshLayout=Component.UNDEFINED, tapNode=Component.UNDEFINED, tapNodeData=Component.UNDEFINED, tapEdge=Component.UNDEFINED, tapEdgeData=Component.UNDEFINED, mouseoverNodeData=Component.UNDEFINED, mouseoverEdgeData=Component.UNDEFINED, selectedNodeData=Component.UNDEFINED, selectedEdgeData=Component.UNDEFINED, generateImage=Component.UNDEFINED, imageData=Component.UNDEFINED, responsive=Component.UNDEFINED, persistence=Component.UNDEFINED, persisted_props=Component.UNDEFINED, persistence_type=Component.UNDEFINED, **kwargs): + self._prop_names = ['id', 'className', 'style', 'elements', 'stylesheet', 'layout', 'pan', 'zoom', 'panningEnabled', 'userPanningEnabled', 'minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'boxSelectionEnabled', 'autoungrabify', 'autolock', 'autounselectify', 'autoRefreshLayout', 'tapNode', 'tapNodeData', 'tapEdge', 'tapEdgeData', 'mouseoverNodeData', 'mouseoverEdgeData', 'selectedNodeData', 'selectedEdgeData', 'generateImage', 'imageData', 'responsive', 'persistence', 'persisted_props', 'persistence_type'] self._type = 'Cytoscape' self._namespace = 'dash_cytoscape' self._valid_wildcard_attributes = [] - self.available_properties = ['id', 'className', 'style', 'elements', 'stylesheet', 'layout', 'pan', 'zoom', 'panningEnabled', 'userPanningEnabled', 'minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'boxSelectionEnabled', 'autoungrabify', 'autolock', 'autounselectify', 'autoRefreshLayout', 'tapNode', 'tapNodeData', 'tapEdge', 'tapEdgeData', 'mouseoverNodeData', 'mouseoverEdgeData', 'selectedNodeData', 'selectedEdgeData', 'generateImage', 'imageData', 'responsive'] + self.available_properties = ['id', 'className', 'style', 'elements', 'stylesheet', 'layout', 'pan', 'zoom', 'panningEnabled', 'userPanningEnabled', 'minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'boxSelectionEnabled', 'autoungrabify', 'autolock', 'autounselectify', 'autoRefreshLayout', 'tapNode', 'tapNodeData', 'tapEdge', 'tapEdgeData', 'mouseoverNodeData', 'mouseoverEdgeData', 'selectedNodeData', 'selectedEdgeData', 'generateImage', 'imageData', 'responsive', 'persistence', 'persisted_props', 'persistence_type'] self.available_wildcard_properties = [] _explicit_args = kwargs.pop('_explicit_args') diff --git a/dash_cytoscape/dash_cytoscape.dev.js b/dash_cytoscape/dash_cytoscape.dev.js index 2f6dfc66..69bb22d1 100644 --- a/dash_cytoscape/dash_cytoscape.dev.js +++ b/dash_cytoscape/dash_cytoscape.dev.js @@ -300,7 +300,7 @@ eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactCytoscapejs = __webpack_require__(/*! react-cytoscapejs */ \"./node_modules/react-cytoscapejs/dist/react-cytoscape.js\");\n\nvar _reactCytoscapejs2 = _interopRequireDefault(_reactCytoscapejs);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _cyResponsive = __webpack_require__(/*! ../cyResponsive.js */ \"./src/lib/cyResponsive.js\");\n\nvar _cyResponsive2 = _interopRequireDefault(_cyResponsive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * JavaScript Requirements: cytoscape, cytoscape-svg\n * React.js requirements: react-cytoscapejs\n */\n\n\n/**\nA Component Library for Dash aimed at facilitating network visualization in\nPython, wrapped around [Cytoscape.js](http://js.cytoscape.org/).\n */\nvar Cytoscape = function (_Component) {\n _inherits(Cytoscape, _Component);\n\n function Cytoscape(props) {\n _classCallCheck(this, Cytoscape);\n\n var _this = _possibleConstructorReturn(this, (Cytoscape.__proto__ || Object.getPrototypeOf(Cytoscape)).call(this, props));\n\n _this.handleCy = _this.handleCy.bind(_this);\n _this._handleCyCalled = false;\n _this.handleImageGeneration = _this.handleImageGeneration.bind(_this);\n _this.cyResponsiveClass = false;\n return _this;\n }\n\n _createClass(Cytoscape, [{\n key: 'generateNode',\n value: function generateNode(event) {\n var ele = event.target;\n\n var isParent = ele.isParent(),\n isChildless = ele.isChildless(),\n isChild = ele.isChild(),\n isOrphan = ele.isOrphan(),\n renderedPosition = ele.renderedPosition(),\n relativePosition = ele.relativePosition(),\n parent = ele.parent(),\n style = ele.style();\n\n // Trim down the element objects to only the data contained\n var edgesData = ele.connectedEdges().map(function (ele) {\n return ele.data();\n }),\n childrenData = ele.children().map(function (ele) {\n return ele.data();\n }),\n ancestorsData = ele.ancestors().map(function (ele) {\n return ele.data();\n }),\n descendantsData = ele.descendants().map(function (ele) {\n return ele.data();\n }),\n siblingsData = ele.siblings().map(function (ele) {\n return ele.data();\n });\n\n var timeStamp = event.timeStamp;\n\n var _ele$json = ele.json(),\n classes = _ele$json.classes,\n data = _ele$json.data,\n grabbable = _ele$json.grabbable,\n group = _ele$json.group,\n locked = _ele$json.locked,\n position = _ele$json.position,\n selected = _ele$json.selected,\n selectable = _ele$json.selectable;\n\n var parentData = void 0;\n if (parent) {\n parentData = parent.data();\n } else {\n parentData = null;\n }\n\n var nodeObject = {\n // Nodes attributes\n edgesData: edgesData,\n renderedPosition: renderedPosition,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n position: position,\n selectable: selectable,\n selected: selected,\n // Compound Nodes additional attributes\n ancestorsData: ancestorsData,\n childrenData: childrenData,\n descendantsData: descendantsData,\n parentData: parentData,\n siblingsData: siblingsData,\n isParent: isParent,\n isChildless: isChildless,\n isChild: isChild,\n isOrphan: isOrphan,\n relativePosition: relativePosition,\n // Styling\n style: style\n };\n return nodeObject;\n }\n }, {\n key: 'generateEdge',\n value: function generateEdge(event) {\n var ele = event.target;\n\n var midpoint = ele.midpoint(),\n isLoop = ele.isLoop(),\n isSimple = ele.isSimple(),\n sourceData = ele.source().data(),\n sourceEndpoint = ele.sourceEndpoint(),\n style = ele.style(),\n targetData = ele.target().data(),\n targetEndpoint = ele.targetEndpoint();\n\n var timeStamp = event.timeStamp;\n\n var _ele$json2 = ele.json(),\n classes = _ele$json2.classes,\n data = _ele$json2.data,\n grabbable = _ele$json2.grabbable,\n group = _ele$json2.group,\n locked = _ele$json2.locked,\n selectable = _ele$json2.selectable,\n selected = _ele$json2.selected;\n\n var edgeObject = {\n // Edges attributes\n isLoop: isLoop,\n isSimple: isSimple,\n midpoint: midpoint,\n sourceData: sourceData,\n sourceEndpoint: sourceEndpoint,\n targetData: targetData,\n targetEndpoint: targetEndpoint,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n selectable: selectable,\n selected: selected,\n // Styling\n style: style\n };\n\n return edgeObject;\n }\n }, {\n key: 'handleCy',\n value: function handleCy(cy) {\n var _this2 = this;\n\n // If the cy pointer has not been modified, and handleCy has already\n // been called before, than we don't run this function.\n if (cy === this._cy && this._handleCyCalled) {\n return;\n }\n this._cy = cy;\n window.cy = cy;\n this._handleCyCalled = true;\n\n // ///////////////////////////////////// CONSTANTS /////////////////////////////////////////\n var SELECT_THRESHOLD = 100;\n\n var selectedNodes = cy.collection();\n var selectedEdges = cy.collection();\n\n // ///////////////////////////////////// FUNCTIONS /////////////////////////////////////////\n var refreshLayout = _lodash2.default.debounce(function () {\n /**\n * Refresh Layout if needed\n */\n var _props = _this2.props,\n autoRefreshLayout = _props.autoRefreshLayout,\n layout = _props.layout;\n\n\n if (autoRefreshLayout) {\n cy.layout(layout).run();\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedNodesData = _lodash2.default.debounce(function () {\n /**\n This function is repetitively called every time a node is selected\n or unselected, but keeps being debounced if it is called again\n within 100 ms (given by SELECT_THRESHOLD). Effectively, it only\n runs when all the nodes have been correctly selected/unselected and\n added/removed from the selectedNodes collection, and then updates\n the selectedNodeData prop.\n */\n var nodeData = selectedNodes.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedNodeData: nodeData\n });\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedEdgesData = _lodash2.default.debounce(function () {\n var edgeData = selectedEdges.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedEdgeData: edgeData\n });\n }\n }, SELECT_THRESHOLD);\n\n // /////////////////////////////////////// EVENTS //////////////////////////////////////////\n cy.on('tap', 'node', function (event) {\n var nodeObject = _this2.generateNode(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapNode: nodeObject,\n tapNodeData: nodeObject.data\n });\n }\n });\n\n cy.on('tap', 'edge', function (event) {\n var edgeObject = _this2.generateEdge(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapEdge: edgeObject,\n tapEdgeData: edgeObject.data\n });\n }\n });\n\n cy.on('mouseover', 'node', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverNodeData: event.target.data()\n });\n }\n });\n\n cy.on('mouseover', 'edge', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverEdgeData: event.target.data()\n });\n }\n });\n\n cy.on('select', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.merge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('unselect remove', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.unmerge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('select', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.merge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('unselect remove', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.unmerge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('add remove', function () {\n refreshLayout();\n });\n\n this.cyResponsiveClass = new _cyResponsive2.default(cy);\n this.cyResponsiveClass.toggle(this.props.responsive);\n }\n }, {\n key: 'handleImageGeneration',\n value: function handleImageGeneration(imageType, imageOptions, actionsToPerform, fileName) {\n var _this3 = this;\n\n var options = {};\n if (imageOptions) {\n options = imageOptions;\n }\n\n var desiredOutput = options.output;\n options.output = 'blob';\n\n var downloadImage = void 0;\n var storeImage = void 0;\n switch (actionsToPerform) {\n case 'store':\n downloadImage = false;\n storeImage = true;\n break;\n case 'download':\n downloadImage = true;\n storeImage = false;\n break;\n case 'both':\n downloadImage = true;\n storeImage = true;\n break;\n default:\n downloadImage = false;\n storeImage = true;\n break;\n }\n\n var output = void 0;\n if (imageType === 'png') {\n output = this._cy.png(options);\n }\n if (imageType === 'jpg' || imageType === 'jpeg') {\n output = this._cy.jpg(options);\n }\n // only works when svg is imported (see lib/extra_index.js)\n if (imageType === 'svg') {\n output = this._cy.svg(options);\n }\n\n /*\n * If output is empty because of bad options or a cytoscape error,\n * skip any download or storage steps.\n */\n if (output && downloadImage) {\n /*\n * Downloading is initiated client-side because the image is generated at\n * the client. This avoids transferring a potentially large image\n * to the server and back again through a callback.\n */\n var fName = fileName;\n if (!fileName) {\n fName = 'cyto';\n }\n\n if (imageType !== 'svg') {\n this.downloadBlob(output, fName + '.' + imageType);\n } else {\n var blob = new Blob([output], {\n type: 'image/svg+xml;charset=utf-8'\n });\n this.downloadBlob(blob, fName + '.' + imageType);\n }\n }\n\n if (output && storeImage) {\n // Default output type if unspecified\n if (!desiredOutput) {\n desiredOutput = 'base64uri';\n }\n\n if (!(desiredOutput === 'base64uri' || desiredOutput === 'base64')) {\n return;\n }\n\n /*\n * Convert blob to base64uri or base64 string to store the image data.\n * Thank you, base64guru https://base64.guru/developers/javascript/examples/encode-blob\n */\n var reader = new FileReader();\n reader.onload = function () {\n /* FileReader is asynchronous, so the read function is non-blocking.\n * If this code block is placed after the read command, it\n * may result in empty output because the blob has not been loaded yet.\n */\n var callbackData = reader.result;\n if (desiredOutput === 'base64') {\n callbackData = callbackData.replace(/^data:.+;base64,/, '');\n }\n _this3.props.setProps({ imageData: callbackData });\n };\n reader.readAsDataURL(output);\n }\n }\n }, {\n key: 'downloadBlob',\n value: function downloadBlob(blob, fileName) {\n /*\n * Download blob as file by dynamically creating link.\n * Chrome does not open data URLs when JS opens a new tab directed\n * at the data URL, so this is an alternate implementation\n * that doesn't require extra packages. It may not behave in\n * exactly the same way across browsers (might display image in new tab\n * intead of downloading as a file).\n * Thank you, koldev https://jsfiddle.net/koldev/cW7W5/\n */\n var downloadLink = document.createElement('a');\n downloadLink.style = 'display: none';\n document.body.appendChild(downloadLink);\n\n var url = window.URL.createObjectURL(blob);\n downloadLink.href = url;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(url);\n\n document.body.removeChild(downloadLink);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n style = _props2.style,\n className = _props2.className,\n elements = _props2.elements,\n stylesheet = _props2.stylesheet,\n layout = _props2.layout,\n pan = _props2.pan,\n zoom = _props2.zoom,\n panningEnabled = _props2.panningEnabled,\n userPanningEnabled = _props2.userPanningEnabled,\n minZoom = _props2.minZoom,\n maxZoom = _props2.maxZoom,\n zoomingEnabled = _props2.zoomingEnabled,\n userZoomingEnabled = _props2.userZoomingEnabled,\n boxSelectionEnabled = _props2.boxSelectionEnabled,\n autoungrabify = _props2.autoungrabify,\n autolock = _props2.autolock,\n autounselectify = _props2.autounselectify,\n generateImage = _props2.generateImage,\n responsive = _props2.responsive;\n\n\n if (Object.keys(generateImage).length > 0) {\n // If no cytoscape object has been created yet, an image cannot be generated,\n // so generateImage will be ignored and cleared.\n this.props.setProps({ generateImage: {} });\n if (this._cy) {\n this.handleImageGeneration(generateImage.type, generateImage.options, generateImage.action, generateImage.filename);\n }\n }\n\n if (this.cyResponsiveClass) {\n this.cyResponsiveClass.toggle(responsive);\n }\n\n return _react2.default.createElement(_reactCytoscapejs2.default, {\n id: id,\n cy: this.handleCy,\n className: className,\n style: style,\n elements: _reactCytoscapejs2.default.normalizeElements(elements),\n stylesheet: stylesheet,\n layout: layout,\n pan: pan,\n zoom: zoom,\n panningEnabled: panningEnabled,\n userPanningEnabled: userPanningEnabled,\n minZoom: minZoom,\n maxZoom: maxZoom,\n zoomingEnabled: zoomingEnabled,\n userZoomingEnabled: userZoomingEnabled,\n boxSelectionEnabled: boxSelectionEnabled,\n autoungrabify: autoungrabify,\n autolock: autolock,\n autounselectify: autounselectify\n });\n }\n }]);\n\n return Cytoscape;\n}(_react.Component);\n\nCytoscape.propTypes = {\n // HTML attribute props\n\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: _propTypes2.default.string,\n\n /**\n * Sets the class name of the element (the value of an element's html\n * class attribute).\n */\n className: _propTypes2.default.string,\n\n /**\n * Add inline styles to the root element.\n */\n style: _propTypes2.default.object,\n\n // Dash specific props\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: _propTypes2.default.func,\n\n // Common props\n\n /**\n * A list of dictionaries representing the elements of the networks. Each dictionary describes an element, and\n * specifies its purpose. The [official Cytoscape.js documentation](https://js.cytoscape.org/#notation/elements-json)\n * offers an extensive overview and examples of element declaration.\n * Alternatively, a dictionary with the format { 'nodes': [], 'edges': [] } is allowed at initialization,\n * but arrays remain the recommended format.\n */\n elements: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.shape({\n /**\n * Either 'nodes' or 'edges'. If not given, it's automatically inferred.\n */\n group: _propTypes2.default.string,\n /** Element specific data.*/\n data: _propTypes2.default.shape({\n /** Reference to the element, useful for selectors and edges. Randomly assigned if not given.*/\n id: _propTypes2.default.string,\n /**\n * Optional name for the element, useful when `data(label)` is given to a style's `content`\n * or `label`. It is only a convention. */\n label: _propTypes2.default.string,\n /** Only for nodes. Optional reference to another node. Needed to create compound nodes. */\n parent: _propTypes2.default.string,\n /** Only for edges. The id of the source node, which is where the edge starts. */\n source: _propTypes2.default.string,\n /** Only for edges. The id of the target node, where the edge ends. */\n target: _propTypes2.default.string\n }),\n /** Only for nodes. The position of the node. */\n position: _propTypes2.default.shape({\n /** The x-coordinate of the node. */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node. */\n y: _propTypes2.default.number\n }),\n /** If the element is selected upon initialisation. */\n selected: _propTypes2.default.bool,\n /** If the element can be selected. */\n selectable: _propTypes2.default.bool,\n /** Only for nodes. If the position is immutable. */\n locked: _propTypes2.default.bool,\n /** Only for nodes. If the node can be grabbed and moved by the user. */\n grabbable: _propTypes2.default.bool,\n /**\n * Space separated string of class names of the element. Those classes can be selected\n * by a style selector.\n */\n classes: _propTypes2.default.string\n })), _propTypes2.default.exact({\n nodes: _propTypes2.default.array,\n edges: _propTypes2.default.array\n })]),\n\n /**\n * A list of dictionaries representing the styles of the elements.\n * Each dictionary requires the following keys: `selector` and `style`.\n *\n * Both the [selector](https://js.cytoscape.org/#selectors) and\n * the [style](https://js.cytoscape.org/#style/node-body) are\n * exhaustively documented in the Cytoscape.js docs. Although methods such\n * as `cy.elements(...)` and `cy.filter(...)` are not available, the selector\n * string syntax stays the same.\n */\n stylesheet: _propTypes2.default.arrayOf(_propTypes2.default.exact({\n /**\n * Which elements you are styling. Generally, you select a group of elements (node, edges, both),\n * a class (that you declare in the element dictionary), or an element by ID.\n */\n selector: _propTypes2.default.string.isRequired,\n /**\n * What aspects of the elements you want to modify. This could be the size or\n * color of a node, the shape of an edge arrow, or many more.\n */\n style: _propTypes2.default.object.isRequired\n })),\n\n /**\n * A dictionary specifying how to set the position of the elements in your\n * graph. The `'name'` key is required, and indicates which layout (algorithm) to\n * use. The keys accepted by `layout` vary depending on the algorithm, but these\n * keys are accepted by all layouts: `fit`, `padding`, `animate`, `animationDuration`,\n * `boundingBox`.\n *\n * The complete list of layouts and their accepted options are available on the\n * [Cytoscape.js docs](https://js.cytoscape.org/#layouts) . For the external layouts,\n * the options are listed in the \"API\" section of the README.\n * Note that certain keys are not supported in Dash since the value is a JavaScript\n * function or a callback. Please visit this\n * [issue](https://github.com/plotly/dash-cytoscape/issues/25) for more information.\n */\n layout: _propTypes2.default.shape({\n /**\n * The layouts available by default are:\n * `random`: Randomly assigns positions.\n * `preset`: Assigns position based on the `position` key in element dictionaries.\n * `circle`: Single-level circle, with optional radius.\n * `concentric`: Multi-level circle, with optional radius.\n * `grid`: Square grid, optionally with numbers of `rows` and `cols`.\n * `breadthfirst`: Tree structure built using BFS, with optional `roots`.\n * `cose`: Force-directed physics simulation.\n *\n * Some external layouts are also included. To use them, run\n * `dash_cytoscape.load_extra_layouts()` before creating your Dash app. Be careful about\n * using the extra layouts when not necessary, since they require supplementary bandwidth\n * for loading, which impacts the startup time of the app.\n * The external layouts are:\n * [cose-bilkent](https://github.com/cytoscape/cytoscape.js-cose-bilkent),\n * [cola](https://github.com/cytoscape/cytoscape.js-cola),\n * [euler](https://github.com/cytoscape/cytoscape.js-dagre),\n * [spread](https://github.com/cytoscape/cytoscape.js-spread),\n * [dagre](https://github.com/cytoscape/cytoscape.js-dagre),\n * [klay](https://github.com/cytoscape/cytoscape.js-klay),\n */\n name: _propTypes2.default.oneOf(['random', 'preset', 'circle', 'concentric', 'grid', 'breadthfirst', 'cose', 'close-bilkent', 'cola', 'euler', 'spread', 'dagre', 'klay']).isRequired,\n /** Whether to render the nodes in order to fit the canvas. */\n fit: _propTypes2.default.bool,\n /** Padding around the sides of the canvas, if fit is enabled. */\n padding: _propTypes2.default.number,\n /** Whether to animate change in position when the layout changes. */\n animate: _propTypes2.default.bool,\n /** Duration of animation in milliseconds, if enabled. */\n animationDuration: _propTypes2.default.number,\n /**\n * How to constrain the layout in a specific area. Keys accepted are either\n * `x1, y1, x2, y2` or `x1, y1, w, h`, all of which receive a pixel value.\n */\n boundingBox: _propTypes2.default.object\n }),\n\n // Viewport Manipulation\n\n /**\n * Dictionary indicating the initial panning position of the graph. The\n * following keys are accepted:\n */\n pan: _propTypes2.default.exact({\n /** The x-coordinate of the node */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node */\n y: _propTypes2.default.number\n }),\n\n /**\n * The initial zoom level of the graph. You can set `minZoom` and\n * `maxZoom` to set restrictions on the zoom level.\n */\n zoom: _propTypes2.default.number,\n\n // Viewport Mutability and gesture Toggling\n /**\n * Whether panning the graph is enabled (i.e., the position of the graph is\n * mutable overall).\n */\n panningEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed to\n * pan the graph.\n */\n userPanningEnabled: _propTypes2.default.bool,\n\n /**\n * A minimum bound on the zoom level of the graph. The viewport can not be\n * scaled smaller than this zoom level.\n */\n minZoom: _propTypes2.default.number,\n\n /**\n * A maximum bound on the zoom level of the graph. The viewport can not be\n * scaled larger than this zoom level.\n */\n maxZoom: _propTypes2.default.number,\n\n /**\n * Whether zooming the graph is enabled (i.e., the zoom level of the graph\n * is mutable overall).\n */\n zoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed\n * to pan the graph.\n */\n userZoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether box selection (i.e. drag a box overlay around, and release it\n * to select) is enabled. If enabled, the user must taphold to pan the graph.\n */\n boxSelectionEnabled: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be ungrabified (not grabbable by user) by\n * default (if true, overrides individual node state).\n */\n autoungrabify: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be locked (not draggable at all) by default\n * (if true, overrides individual node state).\n */\n autolock: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be unselectified (immutable selection state) by\n * default (if true, overrides individual element state).\n */\n autounselectify: _propTypes2.default.bool,\n\n /**\n * Whether the layout should be refreshed when elements are added or removed.\n */\n autoRefreshLayout: _propTypes2.default.bool,\n\n // User Events Props\n\n /**\n * The complete node dictionary returned when you tap or click it. Read-only.\n */\n tapNode: _propTypes2.default.exact({\n /** node specific item */\n edgesData: _propTypes2.default.object,\n /** node specific item */\n renderedPosition: _propTypes2.default.object,\n /** node specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n position: _propTypes2.default.object,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object,\n /** Item for compound nodes */\n ancestorsData: _propTypes2.default.object,\n /** Item for compound nodes */\n childrenData: _propTypes2.default.object,\n /** Item for compound nodes */\n descendantsData: _propTypes2.default.object,\n /** Item for compound nodes */\n parentData: _propTypes2.default.object,\n /** Item for compound nodes */\n siblingsData: _propTypes2.default.object,\n /** Item for compound nodes */\n isParent: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChildless: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChild: _propTypes2.default.bool,\n /** Item for compound nodes */\n isOrphan: _propTypes2.default.bool,\n /** Item for compound nodes */\n relativePosition: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of a node returned when you tap or click it. Read-only.\n */\n tapNodeData: _propTypes2.default.object,\n\n /**\n * The complete edge dictionary returned when you tap or click it. Read-only.\n */\n tapEdge: _propTypes2.default.exact({\n /** Edge-specific item */\n isLoop: _propTypes2.default.bool,\n /** Edge-specific item */\n isSimple: _propTypes2.default.bool,\n /** Edge-specific item */\n midpoint: _propTypes2.default.object,\n /** Edge-specific item */\n sourceData: _propTypes2.default.object,\n /** Edge-specific item */\n sourceEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n targetData: _propTypes2.default.object,\n /** Edge-specific item */\n targetEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of an edge returned when you tap or click it. Read-only.\n */\n tapEdgeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of a node returned when you hover over it. Read-only.\n */\n mouseoverNodeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of an edge returned when you hover over it. Read-only.\n */\n mouseoverEdgeData: _propTypes2.default.object,\n\n /**\n * The list of data dictionaries of all selected nodes (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedNodeData: _propTypes2.default.array,\n\n /**\n * The list of data dictionaries of all selected edges (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedEdgeData: _propTypes2.default.array,\n\n /**\n * Dictionary specifying options to generate an image of the current cytoscape graph.\n * Value is cleared after data is received and image is generated. This property will\n * be ignored on the initial creation of the cytoscape object and must be invoked through\n * a callback after it has been rendered.\n *\n * If the app does not need the image data server side and/or it will only be used to download\n * the image, it may be prudent to invoke `'download'` for `action` instead of\n * `'store'` to improve performance by preventing transfer of data to the server.\n */\n generateImage: _propTypes2.default.exact({\n /** File type to output */\n type: _propTypes2.default.oneOf(['svg', 'png', 'jpg', 'jpeg']).isRequired,\n /** Dictionary of options to cy.png() / cy.jpg() or cy.svg() for image generation.\n * See https://js.cytoscape.org/#core/export for details. For `'output'`, only 'base64'\n * and 'base64uri' are supported. Default: `{'output': 'base64uri'}`.*/\n options: _propTypes2.default.object,\n /**\n * `'store'`: Stores the image data (only jpg and png are supported)\n * in `imageData` and invokes server-side Dash callbacks. `'download'`: Downloads the image\n * as a file with all data handling done client-side. No `imageData` callbacks are fired.\n * `'both'`: Stores image data and downloads image as file. The default is `'store'`\n */\n action: _propTypes2.default.oneOf(['store', 'download', 'both']),\n /** Name for the file to be downloaded. Default: 'cyto'.*/\n filename: _propTypes2.default.string\n }),\n\n /**\n * String representation of the image requested with generateImage. Null if no\n * image was requested yet or the previous request failed. Read-only.\n */\n imageData: _propTypes2.default.string,\n\n /**\n * Toggles intelligent responsive resize of Cytoscape graph with viewport size change\n */\n responsive: _propTypes2.default.bool\n};\n\nCytoscape.defaultProps = {\n style: { width: '600px', height: '600px' },\n layout: { name: 'grid' },\n pan: { x: 0, y: 0 },\n zoom: 1,\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: true,\n userZoomingEnabled: true,\n panningEnabled: true,\n userPanningEnabled: true,\n boxSelectionEnabled: false,\n autolock: false,\n autoungrabify: false,\n autounselectify: false,\n autoRefreshLayout: true,\n generateImage: {},\n imageData: null,\n responsive: false,\n elements: []\n};\n\nexports.default = Cytoscape;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXNoX2N5dG9zY2FwZS8uL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanM/NjQyYyJdLCJuYW1lcyI6WyJDeXRvc2NhcGUiLCJwcm9wcyIsImhhbmRsZUN5IiwiYmluZCIsIl9oYW5kbGVDeUNhbGxlZCIsImhhbmRsZUltYWdlR2VuZXJhdGlvbiIsImN5UmVzcG9uc2l2ZUNsYXNzIiwiZXZlbnQiLCJlbGUiLCJ0YXJnZXQiLCJpc1BhcmVudCIsImlzQ2hpbGRsZXNzIiwiaXNDaGlsZCIsImlzT3JwaGFuIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbGF0aXZlUG9zaXRpb24iLCJwYXJlbnQiLCJzdHlsZSIsImVkZ2VzRGF0YSIsImNvbm5lY3RlZEVkZ2VzIiwibWFwIiwiZGF0YSIsImNoaWxkcmVuRGF0YSIsImNoaWxkcmVuIiwiYW5jZXN0b3JzRGF0YSIsImFuY2VzdG9ycyIsImRlc2NlbmRhbnRzRGF0YSIsImRlc2NlbmRhbnRzIiwic2libGluZ3NEYXRhIiwic2libGluZ3MiLCJ0aW1lU3RhbXAiLCJqc29uIiwiY2xhc3NlcyIsImdyYWJiYWJsZSIsImdyb3VwIiwibG9ja2VkIiwicG9zaXRpb24iLCJzZWxlY3RlZCIsInNlbGVjdGFibGUiLCJwYXJlbnREYXRhIiwibm9kZU9iamVjdCIsIm1pZHBvaW50IiwiaXNMb29wIiwiaXNTaW1wbGUiLCJzb3VyY2VEYXRhIiwic291cmNlIiwic291cmNlRW5kcG9pbnQiLCJ0YXJnZXREYXRhIiwidGFyZ2V0RW5kcG9pbnQiLCJlZGdlT2JqZWN0IiwiY3kiLCJfY3kiLCJ3aW5kb3ciLCJTRUxFQ1RfVEhSRVNIT0xEIiwic2VsZWN0ZWROb2RlcyIsImNvbGxlY3Rpb24iLCJzZWxlY3RlZEVkZ2VzIiwicmVmcmVzaExheW91dCIsIl8iLCJkZWJvdW5jZSIsImF1dG9SZWZyZXNoTGF5b3V0IiwibGF5b3V0IiwicnVuIiwic2VuZFNlbGVjdGVkTm9kZXNEYXRhIiwibm9kZURhdGEiLCJlbCIsInNldFByb3BzIiwic2VsZWN0ZWROb2RlRGF0YSIsInNlbmRTZWxlY3RlZEVkZ2VzRGF0YSIsImVkZ2VEYXRhIiwic2VsZWN0ZWRFZGdlRGF0YSIsIm9uIiwiZ2VuZXJhdGVOb2RlIiwidGFwTm9kZSIsInRhcE5vZGVEYXRhIiwiZ2VuZXJhdGVFZGdlIiwidGFwRWRnZSIsInRhcEVkZ2VEYXRhIiwibW91c2VvdmVyTm9kZURhdGEiLCJtb3VzZW92ZXJFZGdlRGF0YSIsIm1lcmdlIiwidW5tZXJnZSIsIkN5UmVzcG9uc2l2ZSIsInRvZ2dsZSIsInJlc3BvbnNpdmUiLCJpbWFnZVR5cGUiLCJpbWFnZU9wdGlvbnMiLCJhY3Rpb25zVG9QZXJmb3JtIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiZGVzaXJlZE91dHB1dCIsIm91dHB1dCIsImRvd25sb2FkSW1hZ2UiLCJzdG9yZUltYWdlIiwicG5nIiwianBnIiwic3ZnIiwiZk5hbWUiLCJkb3dubG9hZEJsb2IiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiY2FsbGJhY2tEYXRhIiwicmVzdWx0IiwicmVwbGFjZSIsImltYWdlRGF0YSIsInJlYWRBc0RhdGFVUkwiLCJkb3dubG9hZExpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJocmVmIiwiZG93bmxvYWQiLCJjbGljayIsInJldm9rZU9iamVjdFVSTCIsInJlbW92ZUNoaWxkIiwiaWQiLCJjbGFzc05hbWUiLCJlbGVtZW50cyIsInN0eWxlc2hlZXQiLCJwYW4iLCJ6b29tIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG91bmdyYWJpZnkiLCJhdXRvbG9jayIsImF1dG91bnNlbGVjdGlmeSIsImdlbmVyYXRlSW1hZ2UiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYWN0aW9uIiwiZmlsZW5hbWUiLCJDeXRvc2NhcGVDb21wb25lbnQiLCJub3JtYWxpemVFbGVtZW50cyIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm9iamVjdCIsImZ1bmMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwic2hhcGUiLCJsYWJlbCIsIngiLCJudW1iZXIiLCJ5IiwiYm9vbCIsImV4YWN0Iiwibm9kZXMiLCJhcnJheSIsImVkZ2VzIiwic2VsZWN0b3IiLCJpc1JlcXVpcmVkIiwibmFtZSIsIm9uZU9mIiwiZml0IiwicGFkZGluZyIsImFuaW1hdGUiLCJhbmltYXRpb25EdXJhdGlvbiIsImJvdW5kaW5nQm94IiwiZGVmYXVsdFByb3BzIiwid2lkdGgiLCJoZWlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBSUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7Ozs7Ozs7OzsrZUFUQTs7Ozs7O0FBV0E7Ozs7SUFJTUEsUzs7O0FBQ0YsdUJBQVlDLEtBQVosRUFBbUI7QUFBQTs7QUFBQSwwSEFDVEEsS0FEUzs7QUFHZixjQUFLQyxRQUFMLEdBQWdCLE1BQUtBLFFBQUwsQ0FBY0MsSUFBZCxPQUFoQjtBQUNBLGNBQUtDLGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxjQUFLQyxxQkFBTCxHQUE2QixNQUFLQSxxQkFBTCxDQUEyQkYsSUFBM0IsT0FBN0I7QUFDQSxjQUFLRyxpQkFBTCxHQUF5QixLQUF6QjtBQU5lO0FBT2xCOzs7O3FDQUVZQyxLLEVBQU87QUFDaEIsZ0JBQU1DLE1BQU1ELE1BQU1FLE1BQWxCOztBQUVBLGdCQUFNQyxXQUFXRixJQUFJRSxRQUFKLEVBQWpCO0FBQUEsZ0JBQ0lDLGNBQWNILElBQUlHLFdBQUosRUFEbEI7QUFBQSxnQkFFSUMsVUFBVUosSUFBSUksT0FBSixFQUZkO0FBQUEsZ0JBR0lDLFdBQVdMLElBQUlLLFFBQUosRUFI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UixFQUFlLEtBQWYsRUFBc0IsTUFBdEIsQ0FBaEIsRUFBK0NGLFVBRjFCO0FBRzNCOzs7QUFHQTdFLGlCQUFTNEQsb0JBQVVFLE1BTlE7QUFPM0I7Ozs7OztBQU1BUixnQkFBUU0sb0JBQVVtQixLQUFWLENBQWdCLENBQUMsT0FBRCxFQUFVLFVBQVYsRUFBc0IsTUFBdEIsQ0FBaEIsQ0FibUI7QUFjM0I7QUFDQXhCLGtCQUFVSyxvQkFBVUM7QUFmTyxLQUFoQixDQTNZRzs7QUE2WmxCOzs7O0FBSUExQyxlQUFXeUMsb0JBQVVDLE1BamFIOztBQW1hbEI7OztBQUdBbEUsZ0JBQVlpRSxvQkFBVVc7QUF0YUosQ0FBdEI7O0FBeWFBaEssVUFBVThLLFlBQVYsR0FBeUI7QUFDckI3SixXQUFPLEVBQUM4SixPQUFPLE9BQVIsRUFBaUJDLFFBQVEsT0FBekIsRUFEYztBQUVyQm5ILFlBQVEsRUFBQzBHLE1BQU0sTUFBUCxFQUZhO0FBR3JCeEMsU0FBSyxFQUFDOEIsR0FBRyxDQUFKLEVBQU9FLEdBQUcsQ0FBVixFQUhnQjtBQUlyQi9CLFVBQU0sQ0FKZTtBQUtyQkcsYUFBUyxLQUxZO0FBTXJCQyxhQUFTLElBTlk7QUFPckJDLG9CQUFnQixJQVBLO0FBUXJCQyx3QkFBb0IsSUFSQztBQVNyQkwsb0JBQWdCLElBVEs7QUFVckJDLHdCQUFvQixJQVZDO0FBV3JCSyx5QkFBcUIsS0FYQTtBQVlyQkUsY0FBVSxLQVpXO0FBYXJCRCxtQkFBZSxLQWJNO0FBY3JCRSxxQkFBaUIsS0FkSTtBQWVyQjlFLHVCQUFtQixJQWZFO0FBZ0JyQitFLG1CQUFlLEVBaEJNO0FBaUJyQi9CLGVBQVcsSUFqQlU7QUFrQnJCeEIsZ0JBQVksS0FsQlM7QUFtQnJCeUMsY0FBVTtBQW5CVyxDQUF6Qjs7a0JBc0JlN0gsUyIsImZpbGUiOiIuL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEphdmFTY3JpcHQgUmVxdWlyZW1lbnRzOiBjeXRvc2NhcGUsIGN5dG9zY2FwZS1zdmdcbiAqIFJlYWN0LmpzIHJlcXVpcmVtZW50czogcmVhY3QtY3l0b3NjYXBlanNcbiAqL1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEN5dG9zY2FwZUNvbXBvbmVudCBmcm9tICdyZWFjdC1jeXRvc2NhcGVqcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgQ3lSZXNwb25zaXZlIGZyb20gJy4uL2N5UmVzcG9uc2l2ZS5qcyc7XG5cbi8qKlxuQSBDb21wb25lbnQgTGlicmFyeSBmb3IgRGFzaCBhaW1lZCBhdCBmYWNpbGl0YXRpbmcgbmV0d29yayB2aXN1YWxpemF0aW9uIGluXG5QeXRob24sIHdyYXBwZWQgYXJvdW5kIFtDeXRvc2NhcGUuanNdKGh0dHA6Ly9qcy5jeXRvc2NhcGUub3JnLykuXG4gKi9cbmNsYXNzIEN5dG9zY2FwZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ3kgPSB0aGlzLmhhbmRsZUN5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUN5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uID0gdGhpcy5oYW5kbGVJbWFnZUdlbmVyYXRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdlbmVyYXRlTm9kZShldmVudCkge1xuICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgY29uc3QgaXNQYXJlbnQgPSBlbGUuaXNQYXJlbnQoKSxcbiAgICAgICAgICAgIGlzQ2hpbGRsZXNzID0gZWxlLmlzQ2hpbGRsZXNzKCksXG4gICAgICAgICAgICBpc0NoaWxkID0gZWxlLmlzQ2hpbGQoKSxcbiAgICAgICAgICAgIGlzT3JwaGFuID0gZWxlLmlzT3JwaGFuKCksXG4gICAgICAgICAgICByZW5kZXJlZFBvc2l0aW9uID0gZWxlLnJlbmRlcmVkUG9zaXRpb24oKSxcbiAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24gPSBlbGUucmVsYXRpdmVQb3NpdGlvbigpLFxuICAgICAgICAgICAgcGFyZW50ID0gZWxlLnBhcmVudCgpLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGUuc3R5bGUoKTtcblxuICAgICAgICAvLyBUcmltIGRvd24gdGhlIGVsZW1lbnQgb2JqZWN0cyB0byBvbmx5IHRoZSBkYXRhIGNvbnRhaW5lZFxuICAgICAgICBjb25zdCBlZGdlc0RhdGEgPSBlbGUuY29ubmVjdGVkRWRnZXMoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhID0gZWxlLmNoaWxkcmVuKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGFuY2VzdG9yc0RhdGEgPSBlbGUuYW5jZXN0b3JzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzRGF0YSA9IGVsZS5kZXNjZW5kYW50cygpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaWJsaW5nc0RhdGEgPSBlbGUuc2libGluZ3MoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHt0aW1lU3RhbXB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZ3JhYmJhYmxlLFxuICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgICBsb2NrZWQsXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZVxuICAgICAgICB9ID0gZWxlLmpzb24oKTtcblxuICAgICAgICBsZXQgcGFyZW50RGF0YTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnREYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGVPYmplY3QgPSB7XG4gICAgICAgICAgICAvLyBOb2RlcyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBlZGdlc0RhdGEsXG4gICAgICAgICAgICByZW5kZXJlZFBvc2l0aW9uLFxuICAgICAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICAgICAgLy8gRnJvbSBlbGUuanNvbigpXG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAvLyBDb21wb3VuZCBOb2RlcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGFuY2VzdG9yc0RhdGEsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGEsXG4gICAgICAgICAgICBkZXNjZW5kYW50c0RhdGEsXG4gICAgICAgICAgICBwYXJlbnREYXRhLFxuICAgICAgICAgICAgc2libGluZ3NEYXRhLFxuICAgICAgICAgICAgaXNQYXJlbnQsXG4gICAgICAgICAgICBpc0NoaWxkbGVzcyxcbiAgICAgICAgICAgIGlzQ2hpbGQsXG4gICAgICAgICAgICBpc09ycGhhbixcbiAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24sXG4gICAgICAgICAgICAvLyBTdHlsaW5nXG4gICAgICAgICAgICBzdHlsZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbm9kZU9iamVjdDtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUVkZ2UoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IG1pZHBvaW50ID0gZWxlLm1pZHBvaW50KCksXG4gICAgICAgICAgICBpc0xvb3AgPSBlbGUuaXNMb29wKCksXG4gICAgICAgICAgICBpc1NpbXBsZSA9IGVsZS5pc1NpbXBsZSgpLFxuICAgICAgICAgICAgc291cmNlRGF0YSA9IGVsZS5zb3VyY2UoKS5kYXRhKCksXG4gICAgICAgICAgICBzb3VyY2VFbmRwb2ludCA9IGVsZS5zb3VyY2VFbmRwb2ludCgpLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGUuc3R5bGUoKSxcbiAgICAgICAgICAgIHRhcmdldERhdGEgPSBlbGUudGFyZ2V0KCkuZGF0YSgpLFxuICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKTtcblxuICAgICAgICBjb25zdCB7dGltZVN0YW1wfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgIH0gPSBlbGUuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IGVkZ2VPYmplY3QgPSB7XG4gICAgICAgICAgICAvLyBFZGdlcyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpc0xvb3AsXG4gICAgICAgICAgICBpc1NpbXBsZSxcbiAgICAgICAgICAgIG1pZHBvaW50LFxuICAgICAgICAgICAgc291cmNlRGF0YSxcbiAgICAgICAgICAgIHNvdXJjZUVuZHBvaW50LFxuICAgICAgICAgICAgdGFyZ2V0RGF0YSxcbiAgICAgICAgICAgIHRhcmdldEVuZHBvaW50LFxuICAgICAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICAgICAgLy8gRnJvbSBlbGUuanNvbigpXG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgLy8gU3R5bGluZ1xuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZWRnZU9iamVjdDtcbiAgICB9XG5cbiAgICBoYW5kbGVDeShjeSkge1xuICAgICAgICAvLyBJZiB0aGUgY3kgcG9pbnRlciBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIGFuZCBoYW5kbGVDeSBoYXMgYWxyZWFkeVxuICAgICAgICAvLyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoYW4gd2UgZG9uJ3QgcnVuIHRoaXMgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjeSA9PT0gdGhpcy5fY3kgJiYgdGhpcy5faGFuZGxlQ3lDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jeSA9IGN5O1xuICAgICAgICB3aW5kb3cuY3kgPSBjeTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ3lDYWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ09OU1RBTlRTIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGNvbnN0IFNFTEVDVF9USFJFU0hPTEQgPSAxMDA7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IGN5LmNvbGxlY3Rpb24oKTtcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEZVTkNUSU9OUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBjb25zdCByZWZyZXNoTGF5b3V0ID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlZnJlc2ggTGF5b3V0IGlmIG5lZWRlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCB7YXV0b1JlZnJlc2hMYXlvdXQsIGxheW91dH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgICAgICBpZiAoYXV0b1JlZnJlc2hMYXlvdXQpIHtcbiAgICAgICAgICAgICAgICBjeS5sYXlvdXQobGF5b3V0KS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgU0VMRUNUX1RIUkVTSE9MRCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZFNlbGVjdGVkTm9kZXNEYXRhID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlcGV0aXRpdmVseSBjYWxsZWQgZXZlcnkgdGltZSBhIG5vZGUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICBvciB1bnNlbGVjdGVkLCBidXQga2VlcHMgYmVpbmcgZGVib3VuY2VkIGlmIGl0IGlzIGNhbGxlZCBhZ2FpblxuICAgICAgICAgICAgIHdpdGhpbiAxMDAgbXMgKGdpdmVuIGJ5IFNFTEVDVF9USFJFU0hPTEQpLiBFZmZlY3RpdmVseSwgaXQgb25seVxuICAgICAgICAgICAgIHJ1bnMgd2hlbiBhbGwgdGhlIG5vZGVzIGhhdmUgYmVlbiBjb3JyZWN0bHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBhbmRcbiAgICAgICAgICAgICBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGVkTm9kZXMgY29sbGVjdGlvbiwgYW5kIHRoZW4gdXBkYXRlc1xuICAgICAgICAgICAgIHRoZSBzZWxlY3RlZE5vZGVEYXRhIHByb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IG5vZGVEYXRhID0gc2VsZWN0ZWROb2Rlcy5tYXAoZWwgPT4gZWwuZGF0YSgpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZURhdGE6IG5vZGVEYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRTZWxlY3RlZEVkZ2VzRGF0YSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRnZURhdGEgPSBzZWxlY3RlZEVkZ2VzLm1hcChlbCA9PiBlbC5kYXRhKCkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuc2V0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFZGdlRGF0YTogZWRnZURhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgU0VMRUNUX1RIUkVTSE9MRCk7XG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVWRU5UUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgY3kub24oJ3RhcCcsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZU9iamVjdCA9IHRoaXMuZ2VuZXJhdGVOb2RlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHRhcE5vZGU6IG5vZGVPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIHRhcE5vZGVEYXRhOiBub2RlT2JqZWN0LmRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3RhcCcsICdlZGdlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRnZU9iamVjdCA9IHRoaXMuZ2VuZXJhdGVFZGdlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHRhcEVkZ2U6IGVkZ2VPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIHRhcEVkZ2VEYXRhOiBlZGdlT2JqZWN0LmRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlb3Zlck5vZGVEYXRhOiBldmVudC50YXJnZXQuZGF0YSgpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdtb3VzZW92ZXInLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBtb3VzZW92ZXJFZGdlRGF0YTogZXZlbnQudGFyZ2V0LmRhdGEoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignc2VsZWN0JywgJ25vZGUnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZE5vZGVzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbigndW5zZWxlY3QgcmVtb3ZlJywgJ25vZGUnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMudW5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkTm9kZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdzZWxlY3QnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgICAgc2VsZWN0ZWRFZGdlcy5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkRWRnZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCd1bnNlbGVjdCByZW1vdmUnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgICAgc2VsZWN0ZWRFZGdlcy51bm1lcmdlKGVsZSk7XG4gICAgICAgICAgICBzZW5kU2VsZWN0ZWRFZGdlc0RhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ2FkZCByZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoTGF5b3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MgPSBuZXcgQ3lSZXNwb25zaXZlKGN5KTtcbiAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcy50b2dnbGUodGhpcy5wcm9wcy5yZXNwb25zaXZlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUdlbmVyYXRpb24oaW1hZ2VUeXBlLCBpbWFnZU9wdGlvbnMsIGFjdGlvbnNUb1BlcmZvcm0sIGZpbGVOYW1lKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChpbWFnZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBpbWFnZU9wdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGVzaXJlZE91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICAgICAgICBvcHRpb25zLm91dHB1dCA9ICdibG9iJztcblxuICAgICAgICBsZXQgZG93bmxvYWRJbWFnZTtcbiAgICAgICAgbGV0IHN0b3JlSW1hZ2U7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uc1RvUGVyZm9ybSkge1xuICAgICAgICAgICAgY2FzZSAnc3RvcmUnOlxuICAgICAgICAgICAgICAgIGRvd25sb2FkSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0b3JlSW1hZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgaWYgKGltYWdlVHlwZSA9PT0gJ3BuZycpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2N5LnBuZyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1hZ2VUeXBlID09PSAnanBnJyB8fCBpbWFnZVR5cGUgPT09ICdqcGVnJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gdGhpcy5fY3kuanBnKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgd29ya3Mgd2hlbiBzdmcgaXMgaW1wb3J0ZWQgKHNlZSBsaWIvZXh0cmFfaW5kZXguanMpXG4gICAgICAgIGlmIChpbWFnZVR5cGUgPT09ICdzdmcnKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSB0aGlzLl9jeS5zdmcob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBvdXRwdXQgaXMgZW1wdHkgYmVjYXVzZSBvZiBiYWQgb3B0aW9ucyBvciBhIGN5dG9zY2FwZSBlcnJvcixcbiAgICAgICAgICogc2tpcCBhbnkgZG93bmxvYWQgb3Igc3RvcmFnZSBzdGVwcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChvdXRwdXQgJiYgZG93bmxvYWRJbWFnZSkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIERvd25sb2FkaW5nIGlzIGluaXRpYXRlZCBjbGllbnQtc2lkZSBiZWNhdXNlIHRoZSBpbWFnZSBpcyBnZW5lcmF0ZWQgYXRcbiAgICAgICAgICAgICAqIHRoZSBjbGllbnQuIFRoaXMgYXZvaWRzIHRyYW5zZmVycmluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlXG4gICAgICAgICAgICAgKiB0byB0aGUgc2VydmVyIGFuZCBiYWNrIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjay5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IGZOYW1lID0gZmlsZU5hbWU7XG4gICAgICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgZk5hbWUgPSAnY3l0byc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbWFnZVR5cGUgIT09ICdzdmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEJsb2Iob3V0cHV0LCBmTmFtZSArICcuJyArIGltYWdlVHlwZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbb3V0cHV0XSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRCbG9iKGJsb2IsIGZOYW1lICsgJy4nICsgaW1hZ2VUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXQgJiYgc3RvcmVJbWFnZSkge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCBvdXRwdXQgdHlwZSBpZiB1bnNwZWNpZmllZFxuICAgICAgICAgICAgaWYgKCFkZXNpcmVkT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgZGVzaXJlZE91dHB1dCA9ICdiYXNlNjR1cmknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0dXJpJyB8fCBkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0JylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIENvbnZlcnQgYmxvYiB0byBiYXNlNjR1cmkgb3IgYmFzZTY0IHN0cmluZyB0byBzdG9yZSB0aGUgaW1hZ2UgZGF0YS5cbiAgICAgICAgICAgICAqIFRoYW5rIHlvdSwgYmFzZTY0Z3VydSBodHRwczovL2Jhc2U2NC5ndXJ1L2RldmVsb3BlcnMvamF2YXNjcmlwdC9leGFtcGxlcy9lbmNvZGUtYmxvYlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBGaWxlUmVhZGVyIGlzIGFzeW5jaHJvbm91cywgc28gdGhlIHJlYWQgZnVuY3Rpb24gaXMgbm9uLWJsb2NraW5nLlxuICAgICAgICAgICAgICAgICAqIElmIHRoaXMgY29kZSBibG9jayBpcyBwbGFjZWQgYWZ0ZXIgdGhlIHJlYWQgY29tbWFuZCwgaXRcbiAgICAgICAgICAgICAgICAgKiBtYXkgcmVzdWx0IGluIGVtcHR5IG91dHB1dCBiZWNhdXNlIHRoZSBibG9iIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja0RhdGEgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgPSBjYWxsYmFja0RhdGEucmVwbGFjZSgvXmRhdGE6Lis7YmFzZTY0LC8sICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7aW1hZ2VEYXRhOiBjYWxsYmFja0RhdGF9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChvdXRwdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIERvd25sb2FkIGJsb2IgYXMgZmlsZSBieSBkeW5hbWljYWxseSBjcmVhdGluZyBsaW5rLlxuICAgICAgICAgKiBDaHJvbWUgZG9lcyBub3Qgb3BlbiBkYXRhIFVSTHMgd2hlbiBKUyBvcGVucyBhIG5ldyB0YWIgZGlyZWN0ZWRcbiAgICAgICAgICogYXQgdGhlIGRhdGEgVVJMLCBzbyB0aGlzIGlzIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgKiB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBleHRyYSBwYWNrYWdlcy4gSXQgbWF5IG5vdCBiZWhhdmUgaW5cbiAgICAgICAgICogZXhhY3RseSB0aGUgc2FtZSB3YXkgYWNyb3NzIGJyb3dzZXJzIChtaWdodCBkaXNwbGF5IGltYWdlIGluIG5ldyB0YWJcbiAgICAgICAgICogaW50ZWFkIG9mIGRvd25sb2FkaW5nIGFzIGEgZmlsZSkuXG4gICAgICAgICAqIFRoYW5rIHlvdSwga29sZGV2IGh0dHBzOi8vanNmaWRkbGUubmV0L2tvbGRldi9jVzdXNS9cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgZG93bmxvYWRMaW5rLnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmUnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gdXJsO1xuICAgICAgICBkb3dubG9hZExpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb3dubG9hZExpbmspO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgLy8gSFRNTCBhdHRyaWJ1dGUgcHJvcHNcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAvLyBDb21tb24gcHJvcHNcbiAgICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgICAgc3R5bGVzaGVldCxcbiAgICAgICAgICAgIGxheW91dCxcbiAgICAgICAgICAgIC8vIFZpZXdwb3J0IE1hbmlwdWxhdGlvblxuICAgICAgICAgICAgcGFuLFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIC8vIFZpZXdwb3J0IE11dGFiaWxpdHkgYW5kIGdlc3R1cmUgVG9nZ2xpbmdcbiAgICAgICAgICAgIHBhbm5pbmdFbmFibGVkLFxuICAgICAgICAgICAgdXNlclBhbm5pbmdFbmFibGVkLFxuICAgICAgICAgICAgbWluWm9vbSxcbiAgICAgICAgICAgIG1heFpvb20sXG4gICAgICAgICAgICB6b29taW5nRW5hYmxlZCxcbiAgICAgICAgICAgIHVzZXJab29taW5nRW5hYmxlZCxcbiAgICAgICAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQsXG4gICAgICAgICAgICBhdXRvdW5ncmFiaWZ5LFxuICAgICAgICAgICAgYXV0b2xvY2ssXG4gICAgICAgICAgICBhdXRvdW5zZWxlY3RpZnksXG4gICAgICAgICAgICAvLyBJbWFnZSBoYW5kbGluZ1xuICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZSxcbiAgICAgICAgICAgIC8vIFJlc3BvbnNpdmUgZ3JhcGhzXG4gICAgICAgICAgICByZXNwb25zaXZlXG4gICAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhnZW5lcmF0ZUltYWdlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJZiBubyBjeXRvc2NhcGUgb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQgeWV0LCBhbiBpbWFnZSBjYW5ub3QgYmUgZ2VuZXJhdGVkLFxuICAgICAgICAgICAgLy8gc28gZ2VuZXJhdGVJbWFnZSB3aWxsIGJlIGlnbm9yZWQgYW5kIGNsZWFyZWQuXG4gICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtnZW5lcmF0ZUltYWdlOiB7fX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbWFnZUdlbmVyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUltYWdlLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5maWxlbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jeVJlc3BvbnNpdmVDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcy50b2dnbGUocmVzcG9uc2l2ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEN5dG9zY2FwZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICBjeT17dGhpcy5oYW5kbGVDeX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgZWxlbWVudHM9e0N5dG9zY2FwZUNvbXBvbmVudC5ub3JtYWxpemVFbGVtZW50cyhlbGVtZW50cyl9XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldD17c3R5bGVzaGVldH1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9e2xheW91dH1cbiAgICAgICAgICAgICAgICBwYW49e3Bhbn1cbiAgICAgICAgICAgICAgICB6b29tPXt6b29tfVxuICAgICAgICAgICAgICAgIHBhbm5pbmdFbmFibGVkPXtwYW5uaW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICB1c2VyUGFubmluZ0VuYWJsZWQ9e3VzZXJQYW5uaW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBtaW5ab29tPXttaW5ab29tfVxuICAgICAgICAgICAgICAgIG1heFpvb209e21heFpvb219XG4gICAgICAgICAgICAgICAgem9vbWluZ0VuYWJsZWQ9e3pvb21pbmdFbmFibGVkfVxuICAgICAgICAgICAgICAgIHVzZXJab29taW5nRW5hYmxlZD17dXNlclpvb21pbmdFbmFibGVkfVxuICAgICAgICAgICAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ9e2JveFNlbGVjdGlvbkVuYWJsZWR9XG4gICAgICAgICAgICAgICAgYXV0b3VuZ3JhYmlmeT17YXV0b3VuZ3JhYmlmeX1cbiAgICAgICAgICAgICAgICBhdXRvbG9jaz17YXV0b2xvY2t9XG4gICAgICAgICAgICAgICAgYXV0b3Vuc2VsZWN0aWZ5PXthdXRvdW5zZWxlY3RpZnl9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuQ3l0b3NjYXBlLnByb3BUeXBlcyA9IHtcbiAgICAvLyBIVE1MIGF0dHJpYnV0ZSBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogVGhlIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBjb21wb25lbnQgaW4gRGFzaCBjYWxsYmFja3MuXG4gICAgICovXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBlbGVtZW50ICh0aGUgdmFsdWUgb2YgYW4gZWxlbWVudCdzIGh0bWxcbiAgICAgKiBjbGFzcyBhdHRyaWJ1dGUpLlxuICAgICAqL1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAqIEFkZCBpbmxpbmUgc3R5bGVzIHRvIHRoZSByb290IGVsZW1lbnQuXG4gICAgICovXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvLyBEYXNoIHNwZWNpZmljIHByb3BzXG5cbiAgICAvKipcbiAgICAgKiBEYXNoLWFzc2lnbmVkIGNhbGxiYWNrIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBhbnkgb2YgdGhlXG4gICAgICogcHJvcGVydGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgc2V0UHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLy8gQ29tbW9uIHByb3BzXG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyB0aGUgZWxlbWVudHMgb2YgdGhlIG5ldHdvcmtzLiBFYWNoIGRpY3Rpb25hcnkgZGVzY3JpYmVzIGFuIGVsZW1lbnQsIGFuZFxuICAgICAqIHNwZWNpZmllcyBpdHMgcHVycG9zZS4gVGhlIFtvZmZpY2lhbCBDeXRvc2NhcGUuanMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9qcy5jeXRvc2NhcGUub3JnLyNub3RhdGlvbi9lbGVtZW50cy1qc29uKVxuICAgICAqIG9mZmVycyBhbiBleHRlbnNpdmUgb3ZlcnZpZXcgYW5kIGV4YW1wbGVzIG9mIGVsZW1lbnQgZGVjbGFyYXRpb24uXG4gICAgICogQWx0ZXJuYXRpdmVseSwgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZvcm1hdCB7ICdub2Rlcyc6IFtdLCAnZWRnZXMnOiBbXSB9IGlzIGFsbG93ZWQgYXQgaW5pdGlhbGl6YXRpb24sXG4gICAgICogYnV0IGFycmF5cyByZW1haW4gdGhlIHJlY29tbWVuZGVkIGZvcm1hdC5cbiAgICAgKi9cbiAgICBlbGVtZW50czogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBFaXRoZXIgJ25vZGVzJyBvciAnZWRnZXMnLiBJZiBub3QgZ2l2ZW4sIGl0J3MgYXV0b21hdGljYWxseSBpbmZlcnJlZC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBncm91cDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAvKiogRWxlbWVudCBzcGVjaWZpYyBkYXRhLiovXG4gICAgICAgICAgICAgICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAgICAgLyoqICBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQsIHVzZWZ1bCBmb3Igc2VsZWN0b3JzIGFuZCBlZGdlcy4gUmFuZG9tbHkgYXNzaWduZWQgaWYgbm90IGdpdmVuLiovXG4gICAgICAgICAgICAgICAgICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogT3B0aW9uYWwgbmFtZSBmb3IgdGhlIGVsZW1lbnQsIHVzZWZ1bCB3aGVuIGBkYXRhKGxhYmVsKWAgaXMgZ2l2ZW4gdG8gYSBzdHlsZSdzIGBjb250ZW50YFxuICAgICAgICAgICAgICAgICAgICAgKiBvciBgbGFiZWxgLiBJdCBpcyBvbmx5IGEgY29udmVudGlvbi4gKi9cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIC8qKiBPbmx5IGZvciBub2Rlcy4gT3B0aW9uYWwgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZS4gTmVlZGVkIHRvIGNyZWF0ZSBjb21wb3VuZCBub2Rlcy4gKi9cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3IgZWRnZXMuIFRoZSBpZCBvZiB0aGUgc291cmNlIG5vZGUsIHdoaWNoIGlzIHdoZXJlIHRoZSBlZGdlIHN0YXJ0cy4gKi9cbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3IgZWRnZXMuIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IG5vZGUsIHdoZXJlIHRoZSBlZGdlIGVuZHMuICovXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZ1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8qKiBPbmx5IGZvciBub2Rlcy4gVGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgICAgICAgICAvKiogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbm9kZS4gKi9cbiAgICAgICAgICAgICAgICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgLyoqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUuICovXG4gICAgICAgICAgICAgICAgICAgIHk6IFByb3BUeXBlcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiogSWYgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgdXBvbiBpbml0aWFsaXNhdGlvbi4gKi9cbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZC4gKi9cbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIElmIHRoZSBwb3NpdGlvbiBpcyBpbW11dGFibGUuICovXG4gICAgICAgICAgICAgICAgbG9ja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIElmIHRoZSBub2RlIGNhbiBiZSBncmFiYmVkIGFuZCBtb3ZlZCBieSB0aGUgdXNlci4gKi9cbiAgICAgICAgICAgICAgICBncmFiYmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2YgY2xhc3MgbmFtZXMgb2YgdGhlIGVsZW1lbnQuIFRob3NlIGNsYXNzZXMgY2FuIGJlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICogYnkgYSBzdHlsZSBzZWxlY3Rvci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAgICAgbm9kZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgICAgIGVkZ2VzOiBQcm9wVHlwZXMuYXJyYXlcbiAgICAgICAgfSlcbiAgICBdKSxcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHRoZSBzdHlsZXMgb2YgdGhlIGVsZW1lbnRzLlxuICAgICAqIEVhY2ggZGljdGlvbmFyeSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGtleXM6IGBzZWxlY3RvcmAgYW5kIGBzdHlsZWAuXG4gICAgICpcbiAgICAgKiBCb3RoIHRoZSBbc2VsZWN0b3JdKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jc2VsZWN0b3JzKSBhbmRcbiAgICAgKiB0aGUgW3N0eWxlXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI3N0eWxlL25vZGUtYm9keSkgYXJlXG4gICAgICogZXhoYXVzdGl2ZWx5IGRvY3VtZW50ZWQgaW4gdGhlIEN5dG9zY2FwZS5qcyBkb2NzLiBBbHRob3VnaCBtZXRob2RzIHN1Y2hcbiAgICAgKiBhcyBgY3kuZWxlbWVudHMoLi4uKWAgYW5kIGBjeS5maWx0ZXIoLi4uKWAgYXJlIG5vdCBhdmFpbGFibGUsIHRoZSBzZWxlY3RvclxuICAgICAqIHN0cmluZyBzeW50YXggc3RheXMgdGhlIHNhbWUuXG4gICAgICovXG4gICAgc3R5bGVzaGVldDogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICAgIFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoaWNoIGVsZW1lbnRzIHlvdSBhcmUgc3R5bGluZy4gR2VuZXJhbGx5LCB5b3Ugc2VsZWN0IGEgZ3JvdXAgb2YgZWxlbWVudHMgKG5vZGUsIGVkZ2VzLCBib3RoKSxcbiAgICAgICAgICAgICAqIGEgY2xhc3MgKHRoYXQgeW91IGRlY2xhcmUgaW4gdGhlIGVsZW1lbnQgZGljdGlvbmFyeSksIG9yIGFuIGVsZW1lbnQgYnkgSUQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNlbGVjdG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoYXQgYXNwZWN0cyBvZiB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gbW9kaWZ5LiBUaGlzIGNvdWxkIGJlIHRoZSBzaXplIG9yXG4gICAgICAgICAgICAgKiBjb2xvciBvZiBhIG5vZGUsIHRoZSBzaGFwZSBvZiBhbiBlZGdlIGFycm93LCBvciBtYW55IG1vcmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbiAgICAgICAgfSlcbiAgICApLFxuXG4gICAgLyoqXG4gICAgICogQSBkaWN0aW9uYXJ5IHNwZWNpZnlpbmcgaG93IHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnRzIGluIHlvdXJcbiAgICAgKiBncmFwaC4gVGhlIGAnbmFtZSdgIGtleSBpcyByZXF1aXJlZCwgYW5kIGluZGljYXRlcyB3aGljaCBsYXlvdXQgKGFsZ29yaXRobSkgdG9cbiAgICAgKiB1c2UuIFRoZSBrZXlzIGFjY2VwdGVkIGJ5IGBsYXlvdXRgIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBhbGdvcml0aG0sIGJ1dCB0aGVzZVxuICAgICAqIGtleXMgYXJlIGFjY2VwdGVkIGJ5IGFsbCBsYXlvdXRzOiBgZml0YCwgIGBwYWRkaW5nYCwgYGFuaW1hdGVgLCBgYW5pbWF0aW9uRHVyYXRpb25gLFxuICAgICAqIGBib3VuZGluZ0JveGAuXG4gICAgICpcbiAgICAgKiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgbGF5b3V0cyBhbmQgdGhlaXIgYWNjZXB0ZWQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAqICBbQ3l0b3NjYXBlLmpzIGRvY3NdKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jbGF5b3V0cykgLiBGb3IgdGhlIGV4dGVybmFsIGxheW91dHMsXG4gICAgICogdGhlIG9wdGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUgXCJBUElcIiBzZWN0aW9uIG9mIHRoZSAgUkVBRE1FLlxuICAgICAqICBOb3RlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluIERhc2ggc2luY2UgdGhlIHZhbHVlIGlzIGEgSmF2YVNjcmlwdFxuICAgICAqICBmdW5jdGlvbiBvciBhIGNhbGxiYWNrLiBQbGVhc2UgdmlzaXQgdGhpc1xuICAgICAqIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9kYXNoLWN5dG9zY2FwZS9pc3N1ZXMvMjUpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIGxheW91dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBsYXlvdXRzIGF2YWlsYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAgICAgICAgICogICBgcmFuZG9tYDogUmFuZG9tbHkgYXNzaWducyBwb3NpdGlvbnMuXG4gICAgICAgICAqICAgYHByZXNldGA6IEFzc2lnbnMgcG9zaXRpb24gYmFzZWQgb24gdGhlIGBwb3NpdGlvbmAga2V5IGluIGVsZW1lbnQgZGljdGlvbmFyaWVzLlxuICAgICAgICAgKiAgIGBjaXJjbGVgOiBTaW5nbGUtbGV2ZWwgY2lyY2xlLCB3aXRoIG9wdGlvbmFsIHJhZGl1cy5cbiAgICAgICAgICogICBgY29uY2VudHJpY2A6IE11bHRpLWxldmVsIGNpcmNsZSwgd2l0aCBvcHRpb25hbCByYWRpdXMuXG4gICAgICAgICAqICAgYGdyaWRgOiBTcXVhcmUgZ3JpZCwgb3B0aW9uYWxseSB3aXRoIG51bWJlcnMgb2YgYHJvd3NgIGFuZCBgY29sc2AuXG4gICAgICAgICAqICAgYGJyZWFkdGhmaXJzdGA6IFRyZWUgc3RydWN0dXJlIGJ1aWx0IHVzaW5nIEJGUywgd2l0aCBvcHRpb25hbCBgcm9vdHNgLlxuICAgICAgICAgKiAgIGBjb3NlYDogRm9yY2UtZGlyZWN0ZWQgcGh5c2ljcyBzaW11bGF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTb21lIGV4dGVybmFsIGxheW91dHMgYXJlIGFsc28gaW5jbHVkZWQuIFRvIHVzZSB0aGVtLCBydW5cbiAgICAgICAgICogICBgZGFzaF9jeXRvc2NhcGUubG9hZF9leHRyYV9sYXlvdXRzKClgIGJlZm9yZSBjcmVhdGluZyB5b3VyIERhc2ggYXBwLiBCZSBjYXJlZnVsIGFib3V0XG4gICAgICAgICAqICAgdXNpbmcgdGhlIGV4dHJhIGxheW91dHMgd2hlbiBub3QgbmVjZXNzYXJ5LCBzaW5jZSB0aGV5IHJlcXVpcmUgc3VwcGxlbWVudGFyeSBiYW5kd2lkdGhcbiAgICAgICAgICogICBmb3IgbG9hZGluZywgd2hpY2ggaW1wYWN0cyB0aGUgc3RhcnR1cCB0aW1lIG9mIHRoZSBhcHAuXG4gICAgICAgICAqICAgVGhlIGV4dGVybmFsIGxheW91dHMgYXJlOlxuICAgICAgICAgKiAgIFtjb3NlLWJpbGtlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWNvc2UtYmlsa2VudCksXG4gICAgICAgICAqICAgW2NvbGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWNvbGEpLFxuICAgICAgICAgKiAgIFtldWxlcl0oaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtZGFncmUpLFxuICAgICAgICAgKiAgIFtzcHJlYWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLXNwcmVhZCksXG4gICAgICAgICAqICAgW2RhZ3JlXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1kYWdyZSksXG4gICAgICAgICAqICAgW2tsYXldKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWtsYXkpLFxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgICAgICAgICdyYW5kb20nLFxuICAgICAgICAgICAgJ3ByZXNldCcsXG4gICAgICAgICAgICAnY2lyY2xlJyxcbiAgICAgICAgICAgICdjb25jZW50cmljJyxcbiAgICAgICAgICAgICdncmlkJyxcbiAgICAgICAgICAgICdicmVhZHRoZmlyc3QnLFxuICAgICAgICAgICAgJ2Nvc2UnLFxuICAgICAgICAgICAgJ2Nsb3NlLWJpbGtlbnQnLFxuICAgICAgICAgICAgJ2NvbGEnLFxuICAgICAgICAgICAgJ2V1bGVyJyxcbiAgICAgICAgICAgICdzcHJlYWQnLFxuICAgICAgICAgICAgJ2RhZ3JlJyxcbiAgICAgICAgICAgICdrbGF5J1xuICAgICAgICBdKS5pc1JlcXVpcmVkLFxuICAgICAgICAvKiogIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBub2RlcyBpbiBvcmRlciB0byBmaXQgdGhlIGNhbnZhcy4gKi9cbiAgICAgICAgZml0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSBzaWRlcyBvZiB0aGUgY2FudmFzLCBpZiBmaXQgaXMgZW5hYmxlZC4gKi9cbiAgICAgICAgcGFkZGluZzogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIFdoZXRoZXIgdG8gYW5pbWF0ZSBjaGFuZ2UgaW4gcG9zaXRpb24gd2hlbiB0aGUgbGF5b3V0IGNoYW5nZXMuICovXG4gICAgICAgIGFuaW1hdGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogRHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kcywgaWYgZW5hYmxlZC4gKi9cbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgdG8gY29uc3RyYWluIHRoZSBsYXlvdXQgaW4gYSBzcGVjaWZpYyBhcmVhLiBLZXlzIGFjY2VwdGVkIGFyZSBlaXRoZXJcbiAgICAgICAgICogYHgxLCB5MSwgeDIsIHkyYCBvciBgeDEsIHkxLCB3LCBoYCwgYWxsIG9mIHdoaWNoIHJlY2VpdmUgYSBwaXhlbCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGJvdW5kaW5nQm94OiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvLyBWaWV3cG9ydCBNYW5pcHVsYXRpb25cblxuICAgIC8qKlxuICAgICAqIERpY3Rpb25hcnkgaW5kaWNhdGluZyB0aGUgaW5pdGlhbCBwYW5uaW5nIHBvc2l0aW9uIG9mIHRoZSBncmFwaC4gVGhlXG4gICAgICogZm9sbG93aW5nIGtleXMgYXJlIGFjY2VwdGVkOlxuICAgICAqL1xuICAgIHBhbjogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUgKi9cbiAgICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUgICovXG4gICAgICAgIHk6IFByb3BUeXBlcy5udW1iZXJcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbml0aWFsIHpvb20gbGV2ZWwgb2YgdGhlIGdyYXBoLiBZb3UgY2FuIHNldCBgbWluWm9vbWAgYW5kXG4gICAgICogYG1heFpvb21gIHRvIHNldCByZXN0cmljdGlvbnMgb24gdGhlIHpvb20gbGV2ZWwuXG4gICAgICovXG4gICAgem9vbTogUHJvcFR5cGVzLm51bWJlcixcblxuICAgIC8vIFZpZXdwb3J0IE11dGFiaWxpdHkgYW5kIGdlc3R1cmUgVG9nZ2xpbmdcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHBhbm5pbmcgdGhlIGdyYXBoIGlzIGVuYWJsZWQgKGkuZS4sIHRoZSBwb3NpdGlvbiBvZiB0aGUgZ3JhcGggaXNcbiAgICAgKiBtdXRhYmxlIG92ZXJhbGwpLlxuICAgICAqL1xuICAgIHBhbm5pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciBldmVudHMgKGUuZy4gZHJhZ2dpbmcgdGhlIGdyYXBoIGJhY2tncm91bmQpIGFyZSBhbGxvd2VkIHRvXG4gICAgICogcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICB1c2VyUGFubmluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogQSBtaW5pbXVtIGJvdW5kIG9uIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gVGhlIHZpZXdwb3J0IGNhbiBub3QgYmVcbiAgICAgKiBzY2FsZWQgc21hbGxlciB0aGFuIHRoaXMgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBtaW5ab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gICAgLyoqXG4gICAgICogQSBtYXhpbXVtIGJvdW5kIG9uIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gVGhlIHZpZXdwb3J0IGNhbiBub3QgYmVcbiAgICAgKiBzY2FsZWQgbGFyZ2VyIHRoYW4gdGhpcyB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIG1heFpvb206IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHpvb21pbmcgdGhlIGdyYXBoIGlzIGVuYWJsZWQgKGkuZS4sIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaFxuICAgICAqIGlzIG11dGFibGUgb3ZlcmFsbCkuXG4gICAgICovXG4gICAgem9vbWluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIGV2ZW50cyAoZS5nLiBkcmFnZ2luZyB0aGUgZ3JhcGggYmFja2dyb3VuZCkgYXJlIGFsbG93ZWRcbiAgICAgKiB0byBwYW4gdGhlIGdyYXBoLlxuICAgICAqL1xuICAgIHVzZXJab29taW5nRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGJveCBzZWxlY3Rpb24gKGkuZS4gZHJhZyBhIGJveCBvdmVybGF5IGFyb3VuZCwgYW5kIHJlbGVhc2UgaXRcbiAgICAgKiB0byBzZWxlY3QpIGlzIGVuYWJsZWQuIElmIGVuYWJsZWQsIHRoZSB1c2VyIG11c3QgdGFwaG9sZCB0byBwYW4gdGhlIGdyYXBoLlxuICAgICAqL1xuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBub2RlcyBzaG91bGQgYmUgdW5ncmFiaWZpZWQgKG5vdCBncmFiYmFibGUgYnkgdXNlcikgYnlcbiAgICAgKiBkZWZhdWx0IChpZiB0cnVlLCBvdmVycmlkZXMgaW5kaXZpZHVhbCBub2RlIHN0YXRlKS5cbiAgICAgKi9cbiAgICBhdXRvdW5ncmFiaWZ5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIGxvY2tlZCAobm90IGRyYWdnYWJsZSBhdCBhbGwpIGJ5IGRlZmF1bHRcbiAgICAgKiAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgbm9kZSBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b2xvY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBub2RlcyBzaG91bGQgYmUgdW5zZWxlY3RpZmllZCAoaW1tdXRhYmxlIHNlbGVjdGlvbiBzdGF0ZSkgYnlcbiAgICAgKiBkZWZhdWx0IChpZiB0cnVlLCBvdmVycmlkZXMgaW5kaXZpZHVhbCBlbGVtZW50IHN0YXRlKS5cbiAgICAgKi9cbiAgICBhdXRvdW5zZWxlY3RpZnk6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbGF5b3V0IHNob3VsZCBiZSByZWZyZXNoZWQgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBhdXRvUmVmcmVzaExheW91dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvLyBVc2VyIEV2ZW50cyBQcm9wc1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbXBsZXRlIG5vZGUgZGljdGlvbmFyeSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBOb2RlOiBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAvKiogbm9kZSBzcGVjaWZpYyBpdGVtICovXG4gICAgICAgIGVkZ2VzRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICByZW5kZXJlZFBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogbm9kZSBzcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRpbWVTdGFtcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGFuY2VzdG9yc0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBjaGlsZHJlbkRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBkZXNjZW5kYW50c0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBwYXJlbnREYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgc2libGluZ3NEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNQYXJlbnQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNDaGlsZGxlc3M6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNDaGlsZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBpc09ycGhhbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGEgbm9kZSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBOb2RlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0ZSBlZGdlIGRpY3Rpb25hcnkgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwRWRnZTogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBpc0xvb3A6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIGlzU2ltcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBtaWRwb2ludDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBzb3VyY2VEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHNvdXJjZUVuZHBvaW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRhcmdldERhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgdGFyZ2V0RW5kcG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgdGltZVN0YW1wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBjbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBncmFiYmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBncm91cDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgbG9ja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYW4gZWRnZSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBFZGdlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYSBub2RlIHJldHVybmVkIHdoZW4geW91IGhvdmVyIG92ZXIgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXJOb2RlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYW4gZWRnZSByZXR1cm5lZCB3aGVuIHlvdSBob3ZlciBvdmVyIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgbW91c2VvdmVyRWRnZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBkYXRhIGRpY3Rpb25hcmllcyBvZiBhbGwgc2VsZWN0ZWQgbm9kZXMgKGUuZy4gdXNpbmdcbiAgICAgKiBTaGlmdCtDbGljayB0byBzZWxlY3QgbXVsdGlwbGUgbm9kZXMsIG9yIFNoaWZ0K0RyYWcgdG8gdXNlIGJveCBzZWxlY3Rpb24pLiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgc2VsZWN0ZWROb2RlRGF0YTogUHJvcFR5cGVzLmFycmF5LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZGF0YSBkaWN0aW9uYXJpZXMgb2YgYWxsIHNlbGVjdGVkIGVkZ2VzIChlLmcuIHVzaW5nXG4gICAgICogU2hpZnQrQ2xpY2sgdG8gc2VsZWN0IG11bHRpcGxlIG5vZGVzLCBvciBTaGlmdCtEcmFnIHRvIHVzZSBib3ggc2VsZWN0aW9uKS4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHNlbGVjdGVkRWRnZURhdGE6IFByb3BUeXBlcy5hcnJheSxcblxuICAgIC8qKlxuICAgICAqIERpY3Rpb25hcnkgc3BlY2lmeWluZyBvcHRpb25zIHRvIGdlbmVyYXRlIGFuIGltYWdlIG9mIHRoZSBjdXJyZW50IGN5dG9zY2FwZSBncmFwaC5cbiAgICAgKiBWYWx1ZSBpcyBjbGVhcmVkIGFmdGVyIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIGltYWdlIGlzIGdlbmVyYXRlZC4gVGhpcyBwcm9wZXJ0eSB3aWxsXG4gICAgICogYmUgaWdub3JlZCBvbiB0aGUgaW5pdGlhbCBjcmVhdGlvbiBvZiB0aGUgY3l0b3NjYXBlIG9iamVjdCBhbmQgbXVzdCBiZSBpbnZva2VkIHRocm91Z2hcbiAgICAgKiBhIGNhbGxiYWNrIGFmdGVyIGl0IGhhcyBiZWVuIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGFwcCBkb2VzIG5vdCBuZWVkIHRoZSBpbWFnZSBkYXRhIHNlcnZlciBzaWRlIGFuZC9vciBpdCB3aWxsIG9ubHkgYmUgdXNlZCB0byBkb3dubG9hZFxuICAgICAqIHRoZSBpbWFnZSwgaXQgbWF5IGJlIHBydWRlbnQgdG8gaW52b2tlIGAnZG93bmxvYWQnYCBmb3IgYGFjdGlvbmAgaW5zdGVhZCBvZlxuICAgICAqIGAnc3RvcmUnYCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHByZXZlbnRpbmcgdHJhbnNmZXIgb2YgZGF0YSB0byB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIGdlbmVyYXRlSW1hZ2U6IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBGaWxlIHR5cGUgdG8gb3V0cHV0ICAqL1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoWydzdmcnLCAncG5nJywgJ2pwZycsICdqcGVnJ10pLmlzUmVxdWlyZWQsXG4gICAgICAgIC8qKiBEaWN0aW9uYXJ5IG9mIG9wdGlvbnMgdG8gY3kucG5nKCkgLyBjeS5qcGcoKSBvciBjeS5zdmcoKSBmb3IgaW1hZ2UgZ2VuZXJhdGlvbi5cbiAgICAgICAgICogU2VlIGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jY29yZS9leHBvcnQgZm9yIGRldGFpbHMuIEZvciBgJ291dHB1dCdgLCBvbmx5ICdiYXNlNjQnXG4gICAgICAgICAqIGFuZCAnYmFzZTY0dXJpJyBhcmUgc3VwcG9ydGVkLiBEZWZhdWx0OiBgeydvdXRwdXQnOiAnYmFzZTY0dXJpJ31gLiovXG4gICAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgJ3N0b3JlJ2A6IFN0b3JlcyB0aGUgaW1hZ2UgZGF0YSAob25seSBqcGcgYW5kIHBuZyBhcmUgc3VwcG9ydGVkKVxuICAgICAgICAgKiBpbiBgaW1hZ2VEYXRhYCBhbmQgaW52b2tlcyBzZXJ2ZXItc2lkZSBEYXNoIGNhbGxiYWNrcy4gYCdkb3dubG9hZCdgOiBEb3dubG9hZHMgdGhlIGltYWdlXG4gICAgICAgICAqIGFzIGEgZmlsZSB3aXRoIGFsbCBkYXRhIGhhbmRsaW5nIGRvbmUgY2xpZW50LXNpZGUuIE5vIGBpbWFnZURhdGFgIGNhbGxiYWNrcyBhcmUgZmlyZWQuXG4gICAgICAgICAqIGAnYm90aCdgOiBTdG9yZXMgaW1hZ2UgZGF0YSBhbmQgZG93bmxvYWRzIGltYWdlIGFzIGZpbGUuIFRoZSBkZWZhdWx0IGlzIGAnc3RvcmUnYFxuICAgICAgICAgKi9cbiAgICAgICAgYWN0aW9uOiBQcm9wVHlwZXMub25lT2YoWydzdG9yZScsICdkb3dubG9hZCcsICdib3RoJ10pLFxuICAgICAgICAvKiogTmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZC4gRGVmYXVsdDogJ2N5dG8nLiovXG4gICAgICAgIGZpbGVuYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGltYWdlIHJlcXVlc3RlZCB3aXRoIGdlbmVyYXRlSW1hZ2UuIE51bGwgaWYgbm9cbiAgICAgKiBpbWFnZSB3YXMgcmVxdWVzdGVkIHlldCBvciB0aGUgcHJldmlvdXMgcmVxdWVzdCBmYWlsZWQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBpbWFnZURhdGE6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIGludGVsbGlnZW50IHJlc3BvbnNpdmUgcmVzaXplIG9mIEN5dG9zY2FwZSBncmFwaCB3aXRoIHZpZXdwb3J0IHNpemUgY2hhbmdlXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbkN5dG9zY2FwZS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc3R5bGU6IHt3aWR0aDogJzYwMHB4JywgaGVpZ2h0OiAnNjAwcHgnfSxcbiAgICBsYXlvdXQ6IHtuYW1lOiAnZ3JpZCd9LFxuICAgIHBhbjoge3g6IDAsIHk6IDB9LFxuICAgIHpvb206IDEsXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IHRydWUsXG4gICAgcGFubmluZ0VuYWJsZWQ6IHRydWUsXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiB0cnVlLFxuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGF1dG9sb2NrOiBmYWxzZSxcbiAgICBhdXRvdW5ncmFiaWZ5OiBmYWxzZSxcbiAgICBhdXRvdW5zZWxlY3RpZnk6IGZhbHNlLFxuICAgIGF1dG9SZWZyZXNoTGF5b3V0OiB0cnVlLFxuICAgIGdlbmVyYXRlSW1hZ2U6IHt9LFxuICAgIGltYWdlRGF0YTogbnVsbCxcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICBlbGVtZW50czogW11cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEN5dG9zY2FwZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/Cytoscape.react.js\n"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactCytoscapejs = __webpack_require__(/*! react-cytoscapejs */ \"./node_modules/react-cytoscapejs/dist/react-cytoscape.js\");\n\nvar _reactCytoscapejs2 = _interopRequireDefault(_reactCytoscapejs);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _cyResponsive = __webpack_require__(/*! ../cyResponsive.js */ \"./src/lib/cyResponsive.js\");\n\nvar _cyResponsive2 = _interopRequireDefault(_cyResponsive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * JavaScript Requirements: cytoscape, cytoscape-svg\n * React.js requirements: react-cytoscapejs\n */\n\n\n/**\nA Component Library for Dash aimed at facilitating network visualization in\nPython, wrapped around [Cytoscape.js](http://js.cytoscape.org/).\n */\nvar Cytoscape = function (_Component) {\n _inherits(Cytoscape, _Component);\n\n function Cytoscape(props) {\n _classCallCheck(this, Cytoscape);\n\n var _this = _possibleConstructorReturn(this, (Cytoscape.__proto__ || Object.getPrototypeOf(Cytoscape)).call(this, props));\n\n _this.handleCy = _this.handleCy.bind(_this);\n _this._handleCyCalled = false;\n _this.handleImageGeneration = _this.handleImageGeneration.bind(_this);\n _this.cyResponsiveClass = false;\n return _this;\n }\n\n _createClass(Cytoscape, [{\n key: 'generateNode',\n value: function generateNode(event) {\n var ele = event.target;\n\n var isParent = ele.isParent(),\n isChildless = ele.isChildless(),\n isChild = ele.isChild(),\n isOrphan = ele.isOrphan(),\n renderedPosition = ele.renderedPosition(),\n relativePosition = ele.relativePosition(),\n parent = ele.parent(),\n style = ele.style();\n\n // Trim down the element objects to only the data contained\n var edgesData = ele.connectedEdges().map(function (ele) {\n return ele.data();\n }),\n childrenData = ele.children().map(function (ele) {\n return ele.data();\n }),\n ancestorsData = ele.ancestors().map(function (ele) {\n return ele.data();\n }),\n descendantsData = ele.descendants().map(function (ele) {\n return ele.data();\n }),\n siblingsData = ele.siblings().map(function (ele) {\n return ele.data();\n });\n\n var timeStamp = event.timeStamp;\n\n var _ele$json = ele.json(),\n classes = _ele$json.classes,\n data = _ele$json.data,\n grabbable = _ele$json.grabbable,\n group = _ele$json.group,\n locked = _ele$json.locked,\n position = _ele$json.position,\n selected = _ele$json.selected,\n selectable = _ele$json.selectable;\n\n var parentData = void 0;\n if (parent) {\n parentData = parent.data();\n } else {\n parentData = null;\n }\n\n var nodeObject = {\n // Nodes attributes\n edgesData: edgesData,\n renderedPosition: renderedPosition,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n position: position,\n selectable: selectable,\n selected: selected,\n // Compound Nodes additional attributes\n ancestorsData: ancestorsData,\n childrenData: childrenData,\n descendantsData: descendantsData,\n parentData: parentData,\n siblingsData: siblingsData,\n isParent: isParent,\n isChildless: isChildless,\n isChild: isChild,\n isOrphan: isOrphan,\n relativePosition: relativePosition,\n // Styling\n style: style\n };\n return nodeObject;\n }\n }, {\n key: 'generateEdge',\n value: function generateEdge(event) {\n var ele = event.target;\n\n var midpoint = ele.midpoint(),\n isLoop = ele.isLoop(),\n isSimple = ele.isSimple(),\n sourceData = ele.source().data(),\n sourceEndpoint = ele.sourceEndpoint(),\n style = ele.style(),\n targetData = ele.target().data(),\n targetEndpoint = ele.targetEndpoint();\n\n var timeStamp = event.timeStamp;\n\n var _ele$json2 = ele.json(),\n classes = _ele$json2.classes,\n data = _ele$json2.data,\n grabbable = _ele$json2.grabbable,\n group = _ele$json2.group,\n locked = _ele$json2.locked,\n selectable = _ele$json2.selectable,\n selected = _ele$json2.selected;\n\n var edgeObject = {\n // Edges attributes\n isLoop: isLoop,\n isSimple: isSimple,\n midpoint: midpoint,\n sourceData: sourceData,\n sourceEndpoint: sourceEndpoint,\n targetData: targetData,\n targetEndpoint: targetEndpoint,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n selectable: selectable,\n selected: selected,\n // Styling\n style: style\n };\n\n return edgeObject;\n }\n }, {\n key: 'handleCy',\n value: function handleCy(cy) {\n var _this2 = this;\n\n // If the cy pointer has not been modified, and handleCy has already\n // been called before, than we don't run this function.\n if (cy === this._cy && this._handleCyCalled) {\n return;\n }\n this._cy = cy;\n window.cy = cy;\n this._handleCyCalled = true;\n\n // ///////////////////////////////////// CONSTANTS /////////////////////////////////////////\n var SELECT_THRESHOLD = 100;\n\n var selectedNodes = cy.collection();\n var selectedEdges = cy.collection();\n\n // ///////////////////////////////////// FUNCTIONS /////////////////////////////////////////\n var refreshLayout = _lodash2.default.debounce(function () {\n /**\n * Refresh Layout if needed\n */\n var _props = _this2.props,\n autoRefreshLayout = _props.autoRefreshLayout,\n layout = _props.layout;\n\n\n if (autoRefreshLayout) {\n cy.layout(layout).run();\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedNodesData = _lodash2.default.debounce(function () {\n /**\n This function is repetitively called every time a node is selected\n or unselected, but keeps being debounced if it is called again\n within 100 ms (given by SELECT_THRESHOLD). Effectively, it only\n runs when all the nodes have been correctly selected/unselected and\n added/removed from the selectedNodes collection, and then updates\n the selectedNodeData prop.\n */\n var nodeData = selectedNodes.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedNodeData: nodeData\n });\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedEdgesData = _lodash2.default.debounce(function () {\n var edgeData = selectedEdges.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedEdgeData: edgeData\n });\n }\n }, SELECT_THRESHOLD);\n\n // /////////////////////////////////////// EVENTS //////////////////////////////////////////\n cy.on('tap', 'node', function (event) {\n var nodeObject = _this2.generateNode(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapNode: nodeObject,\n tapNodeData: nodeObject.data\n });\n }\n });\n\n cy.on('tap', 'edge', function (event) {\n var edgeObject = _this2.generateEdge(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapEdge: edgeObject,\n tapEdgeData: edgeObject.data\n });\n }\n });\n\n cy.on('mouseover', 'node', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverNodeData: event.target.data()\n });\n }\n });\n\n cy.on('mouseover', 'edge', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverEdgeData: event.target.data()\n });\n }\n });\n\n cy.on('select', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.merge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('unselect remove', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.unmerge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('select', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.merge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('unselect remove', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.unmerge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('add remove', function () {\n refreshLayout();\n });\n\n this.cyResponsiveClass = new _cyResponsive2.default(cy);\n this.cyResponsiveClass.toggle(this.props.responsive);\n }\n }, {\n key: 'handleImageGeneration',\n value: function handleImageGeneration(imageType, imageOptions, actionsToPerform, fileName) {\n var _this3 = this;\n\n var options = {};\n if (imageOptions) {\n options = imageOptions;\n }\n\n var desiredOutput = options.output;\n options.output = 'blob';\n\n var downloadImage = void 0;\n var storeImage = void 0;\n switch (actionsToPerform) {\n case 'store':\n downloadImage = false;\n storeImage = true;\n break;\n case 'download':\n downloadImage = true;\n storeImage = false;\n break;\n case 'both':\n downloadImage = true;\n storeImage = true;\n break;\n default:\n downloadImage = false;\n storeImage = true;\n break;\n }\n\n var output = void 0;\n if (imageType === 'png') {\n output = this._cy.png(options);\n }\n if (imageType === 'jpg' || imageType === 'jpeg') {\n output = this._cy.jpg(options);\n }\n // only works when svg is imported (see lib/extra_index.js)\n if (imageType === 'svg') {\n output = this._cy.svg(options);\n }\n\n /*\n * If output is empty because of bad options or a cytoscape error,\n * skip any download or storage steps.\n */\n if (output && downloadImage) {\n /*\n * Downloading is initiated client-side because the image is generated at\n * the client. This avoids transferring a potentially large image\n * to the server and back again through a callback.\n */\n var fName = fileName;\n if (!fileName) {\n fName = 'cyto';\n }\n\n if (imageType !== 'svg') {\n this.downloadBlob(output, fName + '.' + imageType);\n } else {\n var blob = new Blob([output], {\n type: 'image/svg+xml;charset=utf-8'\n });\n this.downloadBlob(blob, fName + '.' + imageType);\n }\n }\n\n if (output && storeImage) {\n // Default output type if unspecified\n if (!desiredOutput) {\n desiredOutput = 'base64uri';\n }\n\n if (!(desiredOutput === 'base64uri' || desiredOutput === 'base64')) {\n return;\n }\n\n /*\n * Convert blob to base64uri or base64 string to store the image data.\n * Thank you, base64guru https://base64.guru/developers/javascript/examples/encode-blob\n */\n var reader = new FileReader();\n reader.onload = function () {\n /* FileReader is asynchronous, so the read function is non-blocking.\n * If this code block is placed after the read command, it\n * may result in empty output because the blob has not been loaded yet.\n */\n var callbackData = reader.result;\n if (desiredOutput === 'base64') {\n callbackData = callbackData.replace(/^data:.+;base64,/, '');\n }\n _this3.props.setProps({ imageData: callbackData });\n };\n reader.readAsDataURL(output);\n }\n }\n }, {\n key: 'downloadBlob',\n value: function downloadBlob(blob, fileName) {\n /*\n * Download blob as file by dynamically creating link.\n * Chrome does not open data URLs when JS opens a new tab directed\n * at the data URL, so this is an alternate implementation\n * that doesn't require extra packages. It may not behave in\n * exactly the same way across browsers (might display image in new tab\n * intead of downloading as a file).\n * Thank you, koldev https://jsfiddle.net/koldev/cW7W5/\n */\n var downloadLink = document.createElement('a');\n downloadLink.style = 'display: none';\n document.body.appendChild(downloadLink);\n\n var url = window.URL.createObjectURL(blob);\n downloadLink.href = url;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(url);\n\n document.body.removeChild(downloadLink);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n style = _props2.style,\n className = _props2.className,\n elements = _props2.elements,\n stylesheet = _props2.stylesheet,\n layout = _props2.layout,\n pan = _props2.pan,\n zoom = _props2.zoom,\n panningEnabled = _props2.panningEnabled,\n userPanningEnabled = _props2.userPanningEnabled,\n minZoom = _props2.minZoom,\n maxZoom = _props2.maxZoom,\n zoomingEnabled = _props2.zoomingEnabled,\n userZoomingEnabled = _props2.userZoomingEnabled,\n boxSelectionEnabled = _props2.boxSelectionEnabled,\n autoungrabify = _props2.autoungrabify,\n autolock = _props2.autolock,\n autounselectify = _props2.autounselectify,\n generateImage = _props2.generateImage,\n responsive = _props2.responsive;\n\n\n if (Object.keys(generateImage).length > 0) {\n // If no cytoscape object has been created yet, an image cannot be generated,\n // so generateImage will be ignored and cleared.\n this.props.setProps({ generateImage: {} });\n if (this._cy) {\n this.handleImageGeneration(generateImage.type, generateImage.options, generateImage.action, generateImage.filename);\n }\n }\n\n if (this.cyResponsiveClass) {\n this.cyResponsiveClass.toggle(responsive);\n }\n\n return _react2.default.createElement(_reactCytoscapejs2.default, {\n id: id,\n cy: this.handleCy,\n className: className,\n style: style,\n elements: _reactCytoscapejs2.default.normalizeElements(elements),\n stylesheet: stylesheet,\n layout: layout,\n pan: pan,\n zoom: zoom,\n panningEnabled: panningEnabled,\n userPanningEnabled: userPanningEnabled,\n minZoom: minZoom,\n maxZoom: maxZoom,\n zoomingEnabled: zoomingEnabled,\n userZoomingEnabled: userZoomingEnabled,\n boxSelectionEnabled: boxSelectionEnabled,\n autoungrabify: autoungrabify,\n autolock: autolock,\n autounselectify: autounselectify\n });\n }\n }]);\n\n return Cytoscape;\n}(_react.Component);\n\nCytoscape.propTypes = {\n // HTML attribute props\n\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: _propTypes2.default.string,\n\n /**\n * Sets the class name of the element (the value of an element's html\n * class attribute).\n */\n className: _propTypes2.default.string,\n\n /**\n * Add inline styles to the root element.\n */\n style: _propTypes2.default.object,\n\n // Dash specific props\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: _propTypes2.default.func,\n\n // Common props\n\n /**\n * A list of dictionaries representing the elements of the networks. Each dictionary describes an element, and\n * specifies its purpose. The [official Cytoscape.js documentation](https://js.cytoscape.org/#notation/elements-json)\n * offers an extensive overview and examples of element declaration.\n * Alternatively, a dictionary with the format { 'nodes': [], 'edges': [] } is allowed at initialization,\n * but arrays remain the recommended format.\n */\n elements: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.shape({\n /**\n * Either 'nodes' or 'edges'. If not given, it's automatically inferred.\n */\n group: _propTypes2.default.string,\n /** Element specific data.*/\n data: _propTypes2.default.shape({\n /** Reference to the element, useful for selectors and edges. Randomly assigned if not given.*/\n id: _propTypes2.default.string,\n /**\n * Optional name for the element, useful when `data(label)` is given to a style's `content`\n * or `label`. It is only a convention. */\n label: _propTypes2.default.string,\n /** Only for nodes. Optional reference to another node. Needed to create compound nodes. */\n parent: _propTypes2.default.string,\n /** Only for edges. The id of the source node, which is where the edge starts. */\n source: _propTypes2.default.string,\n /** Only for edges. The id of the target node, where the edge ends. */\n target: _propTypes2.default.string\n }),\n /** Only for nodes. The position of the node. */\n position: _propTypes2.default.shape({\n /** The x-coordinate of the node. */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node. */\n y: _propTypes2.default.number\n }),\n /** If the element is selected upon initialisation. */\n selected: _propTypes2.default.bool,\n /** If the element can be selected. */\n selectable: _propTypes2.default.bool,\n /** Only for nodes. If the position is immutable. */\n locked: _propTypes2.default.bool,\n /** Only for nodes. If the node can be grabbed and moved by the user. */\n grabbable: _propTypes2.default.bool,\n /**\n * Space separated string of class names of the element. Those classes can be selected\n * by a style selector.\n */\n classes: _propTypes2.default.string\n })), _propTypes2.default.exact({\n nodes: _propTypes2.default.array,\n edges: _propTypes2.default.array\n })]),\n\n /**\n * A list of dictionaries representing the styles of the elements.\n * Each dictionary requires the following keys: `selector` and `style`.\n *\n * Both the [selector](https://js.cytoscape.org/#selectors) and\n * the [style](https://js.cytoscape.org/#style/node-body) are\n * exhaustively documented in the Cytoscape.js docs. Although methods such\n * as `cy.elements(...)` and `cy.filter(...)` are not available, the selector\n * string syntax stays the same.\n */\n stylesheet: _propTypes2.default.arrayOf(_propTypes2.default.exact({\n /**\n * Which elements you are styling. Generally, you select a group of elements (node, edges, both),\n * a class (that you declare in the element dictionary), or an element by ID.\n */\n selector: _propTypes2.default.string.isRequired,\n /**\n * What aspects of the elements you want to modify. This could be the size or\n * color of a node, the shape of an edge arrow, or many more.\n */\n style: _propTypes2.default.object.isRequired\n })),\n\n /**\n * A dictionary specifying how to set the position of the elements in your\n * graph. The `'name'` key is required, and indicates which layout (algorithm) to\n * use. The keys accepted by `layout` vary depending on the algorithm, but these\n * keys are accepted by all layouts: `fit`, `padding`, `animate`, `animationDuration`,\n * `boundingBox`.\n *\n * The complete list of layouts and their accepted options are available on the\n * [Cytoscape.js docs](https://js.cytoscape.org/#layouts) . For the external layouts,\n * the options are listed in the \"API\" section of the README.\n * Note that certain keys are not supported in Dash since the value is a JavaScript\n * function or a callback. Please visit this\n * [issue](https://github.com/plotly/dash-cytoscape/issues/25) for more information.\n */\n layout: _propTypes2.default.shape({\n /**\n * The layouts available by default are:\n * `random`: Randomly assigns positions.\n * `preset`: Assigns position based on the `position` key in element dictionaries.\n * `circle`: Single-level circle, with optional radius.\n * `concentric`: Multi-level circle, with optional radius.\n * `grid`: Square grid, optionally with numbers of `rows` and `cols`.\n * `breadthfirst`: Tree structure built using BFS, with optional `roots`.\n * `cose`: Force-directed physics simulation.\n *\n * Some external layouts are also included. To use them, run\n * `dash_cytoscape.load_extra_layouts()` before creating your Dash app. Be careful about\n * using the extra layouts when not necessary, since they require supplementary bandwidth\n * for loading, which impacts the startup time of the app.\n * The external layouts are:\n * [cose-bilkent](https://github.com/cytoscape/cytoscape.js-cose-bilkent),\n * [cola](https://github.com/cytoscape/cytoscape.js-cola),\n * [euler](https://github.com/cytoscape/cytoscape.js-dagre),\n * [spread](https://github.com/cytoscape/cytoscape.js-spread),\n * [dagre](https://github.com/cytoscape/cytoscape.js-dagre),\n * [klay](https://github.com/cytoscape/cytoscape.js-klay),\n */\n name: _propTypes2.default.oneOf(['random', 'preset', 'circle', 'concentric', 'grid', 'breadthfirst', 'cose', 'close-bilkent', 'cola', 'euler', 'spread', 'dagre', 'klay']).isRequired,\n /** Whether to render the nodes in order to fit the canvas. */\n fit: _propTypes2.default.bool,\n /** Padding around the sides of the canvas, if fit is enabled. */\n padding: _propTypes2.default.number,\n /** Whether to animate change in position when the layout changes. */\n animate: _propTypes2.default.bool,\n /** Duration of animation in milliseconds, if enabled. */\n animationDuration: _propTypes2.default.number,\n /**\n * How to constrain the layout in a specific area. Keys accepted are either\n * `x1, y1, x2, y2` or `x1, y1, w, h`, all of which receive a pixel value.\n */\n boundingBox: _propTypes2.default.object\n }),\n\n // Viewport Manipulation\n\n /**\n * Dictionary indicating the initial panning position of the graph. The\n * following keys are accepted:\n */\n pan: _propTypes2.default.exact({\n /** The x-coordinate of the node */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node */\n y: _propTypes2.default.number\n }),\n\n /**\n * The initial zoom level of the graph. You can set `minZoom` and\n * `maxZoom` to set restrictions on the zoom level.\n */\n zoom: _propTypes2.default.number,\n\n // Viewport Mutability and gesture Toggling\n /**\n * Whether panning the graph is enabled (i.e., the position of the graph is\n * mutable overall).\n */\n panningEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed to\n * pan the graph.\n */\n userPanningEnabled: _propTypes2.default.bool,\n\n /**\n * A minimum bound on the zoom level of the graph. The viewport can not be\n * scaled smaller than this zoom level.\n */\n minZoom: _propTypes2.default.number,\n\n /**\n * A maximum bound on the zoom level of the graph. The viewport can not be\n * scaled larger than this zoom level.\n */\n maxZoom: _propTypes2.default.number,\n\n /**\n * Whether zooming the graph is enabled (i.e., the zoom level of the graph\n * is mutable overall).\n */\n zoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed\n * to pan the graph.\n */\n userZoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether box selection (i.e. drag a box overlay around, and release it\n * to select) is enabled. If enabled, the user must taphold to pan the graph.\n */\n boxSelectionEnabled: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be ungrabified (not grabbable by user) by\n * default (if true, overrides individual node state).\n */\n autoungrabify: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be locked (not draggable at all) by default\n * (if true, overrides individual node state).\n */\n autolock: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be unselectified (immutable selection state) by\n * default (if true, overrides individual element state).\n */\n autounselectify: _propTypes2.default.bool,\n\n /**\n * Whether the layout should be refreshed when elements are added or removed.\n */\n autoRefreshLayout: _propTypes2.default.bool,\n\n // User Events Props\n\n /**\n * The complete node dictionary returned when you tap or click it. Read-only.\n */\n tapNode: _propTypes2.default.exact({\n /** node specific item */\n edgesData: _propTypes2.default.object,\n /** node specific item */\n renderedPosition: _propTypes2.default.object,\n /** node specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n position: _propTypes2.default.object,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object,\n /** Item for compound nodes */\n ancestorsData: _propTypes2.default.object,\n /** Item for compound nodes */\n childrenData: _propTypes2.default.object,\n /** Item for compound nodes */\n descendantsData: _propTypes2.default.object,\n /** Item for compound nodes */\n parentData: _propTypes2.default.object,\n /** Item for compound nodes */\n siblingsData: _propTypes2.default.object,\n /** Item for compound nodes */\n isParent: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChildless: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChild: _propTypes2.default.bool,\n /** Item for compound nodes */\n isOrphan: _propTypes2.default.bool,\n /** Item for compound nodes */\n relativePosition: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of a node returned when you tap or click it. Read-only.\n */\n tapNodeData: _propTypes2.default.object,\n\n /**\n * The complete edge dictionary returned when you tap or click it. Read-only.\n */\n tapEdge: _propTypes2.default.exact({\n /** Edge-specific item */\n isLoop: _propTypes2.default.bool,\n /** Edge-specific item */\n isSimple: _propTypes2.default.bool,\n /** Edge-specific item */\n midpoint: _propTypes2.default.object,\n /** Edge-specific item */\n sourceData: _propTypes2.default.object,\n /** Edge-specific item */\n sourceEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n targetData: _propTypes2.default.object,\n /** Edge-specific item */\n targetEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of an edge returned when you tap or click it. Read-only.\n */\n tapEdgeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of a node returned when you hover over it. Read-only.\n */\n mouseoverNodeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of an edge returned when you hover over it. Read-only.\n */\n mouseoverEdgeData: _propTypes2.default.object,\n\n /**\n * The list of data dictionaries of all selected nodes (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedNodeData: _propTypes2.default.array,\n\n /**\n * The list of data dictionaries of all selected edges (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedEdgeData: _propTypes2.default.array,\n\n /**\n * Dictionary specifying options to generate an image of the current cytoscape graph.\n * Value is cleared after data is received and image is generated. This property will\n * be ignored on the initial creation of the cytoscape object and must be invoked through\n * a callback after it has been rendered.\n *\n * If the app does not need the image data server side and/or it will only be used to download\n * the image, it may be prudent to invoke `'download'` for `action` instead of\n * `'store'` to improve performance by preventing transfer of data to the server.\n */\n generateImage: _propTypes2.default.exact({\n /** File type to output */\n type: _propTypes2.default.oneOf(['svg', 'png', 'jpg', 'jpeg']).isRequired,\n /** Dictionary of options to cy.png() / cy.jpg() or cy.svg() for image generation.\n * See https://js.cytoscape.org/#core/export for details. For `'output'`, only 'base64'\n * and 'base64uri' are supported. Default: `{'output': 'base64uri'}`.*/\n options: _propTypes2.default.object,\n /**\n * `'store'`: Stores the image data (only jpg and png are supported)\n * in `imageData` and invokes server-side Dash callbacks. `'download'`: Downloads the image\n * as a file with all data handling done client-side. No `imageData` callbacks are fired.\n * `'both'`: Stores image data and downloads image as file. The default is `'store'`\n */\n action: _propTypes2.default.oneOf(['store', 'download', 'both']),\n /** Name for the file to be downloaded. Default: 'cyto'.*/\n filename: _propTypes2.default.string\n }),\n\n /**\n * String representation of the image requested with generateImage. Null if no\n * image was requested yet or the previous request failed. Read-only.\n */\n imageData: _propTypes2.default.string,\n\n /**\n * Toggles intelligent responsive resize of Cytoscape graph with viewport size change\n */\n responsive: _propTypes2.default.bool,\n\n /**\n * Used to allow user interactions in this component to be persisted when\n * the component - or the page - is refreshed. If `persisted` is truthy and\n * hasn't changed from its previous value, any `persisted_props` that the\n * user has changed while using the app will keep those changes, as long as\n * the new prop value also matches what was given originally.\n * Used in conjunction with `persistence_type` and `persisted_props`.\n */\n persistence: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string, _propTypes2.default.number]),\n\n /**\n * Properties whose user interactions will persist after refreshing the\n * component or the page.\n */\n persisted_props: _propTypes2.default.arrayOf(_propTypes2.default.oneOf(['elements', 'stylesheet', 'layout'])),\n\n /**\n * Where persisted user changes will be stored:\n * memory: only kept in memory, reset on page refresh.\n * local: window.localStorage, data is kept after the browser quit.\n * session: window.sessionStorage, data is cleared once the browser quit.\n */\n persistence_type: _propTypes2.default.oneOf(['local', 'session', 'memory'])\n};\n\nCytoscape.defaultProps = {\n style: { width: '600px', height: '600px' },\n layout: { name: 'grid' },\n pan: { x: 0, y: 0 },\n zoom: 1,\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: true,\n userZoomingEnabled: true,\n panningEnabled: true,\n userPanningEnabled: true,\n boxSelectionEnabled: false,\n autolock: false,\n autoungrabify: false,\n autounselectify: false,\n autoRefreshLayout: true,\n generateImage: {},\n imageData: null,\n responsive: false,\n elements: [],\n persisted_props: [],\n persistence_type: 'local'\n};\n\nvar defaultPersistenceTransform = {\n extract: function extract(propValue) {\n return propValue;\n },\n apply: function apply(storedValue) {\n return storedValue;\n }\n};\n\nCytoscape.persistenceTransforms = {\n elements: defaultPersistenceTransform,\n stylesheet: defaultPersistenceTransform,\n layout: defaultPersistenceTransform\n\n};\n\nexports.default = Cytoscape;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXNoX2N5dG9zY2FwZS8uL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanM/NjQyYyJdLCJuYW1lcyI6WyJDeXRvc2NhcGUiLCJwcm9wcyIsImhhbmRsZUN5IiwiYmluZCIsIl9oYW5kbGVDeUNhbGxlZCIsImhhbmRsZUltYWdlR2VuZXJhdGlvbiIsImN5UmVzcG9uc2l2ZUNsYXNzIiwiZXZlbnQiLCJlbGUiLCJ0YXJnZXQiLCJpc1BhcmVudCIsImlzQ2hpbGRsZXNzIiwiaXNDaGlsZCIsImlzT3JwaGFuIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbGF0aXZlUG9zaXRpb24iLCJwYXJlbnQiLCJzdHlsZSIsImVkZ2VzRGF0YSIsImNvbm5lY3RlZEVkZ2VzIiwibWFwIiwiZGF0YSIsImNoaWxkcmVuRGF0YSIsImNoaWxkcmVuIiwiYW5jZXN0b3JzRGF0YSIsImFuY2VzdG9ycyIsImRlc2NlbmRhbnRzRGF0YSIsImRlc2NlbmRhbnRzIiwic2libGluZ3NEYXRhIiwic2libGluZ3MiLCJ0aW1lU3RhbXAiLCJqc29uIiwiY2xhc3NlcyIsImdyYWJiYWJsZSIsImdyb3VwIiwibG9ja2VkIiwicG9zaXRpb24iLCJzZWxlY3RlZCIsInNlbGVjdGFibGUiLCJwYXJlbnREYXRhIiwibm9kZU9iamVjdCIsIm1pZHBvaW50IiwiaXNMb29wIiwiaXNTaW1wbGUiLCJzb3VyY2VEYXRhIiwic291cmNlIiwic291cmNlRW5kcG9pbnQiLCJ0YXJnZXREYXRhIiwidGFyZ2V0RW5kcG9pbnQiLCJlZGdlT2JqZWN0IiwiY3kiLCJfY3kiLCJ3aW5kb3ciLCJTRUxFQ1RfVEhSRVNIT0xEIiwic2VsZWN0ZWROb2RlcyIsImNvbGxlY3Rpb24iLCJzZWxlY3RlZEVkZ2VzIiwicmVmcmVzaExheW91dCIsIl8iLCJkZWJvdW5jZSIsImF1dG9SZWZyZXNoTGF5b3V0IiwibGF5b3V0IiwicnVuIiwic2VuZFNlbGVjdGVkTm9kZXNEYXRhIiwibm9kZURhdGEiLCJlbCIsInNldFByb3BzIiwic2VsZWN0ZWROb2RlRGF0YSIsInNlbmRTZWxlY3RlZEVkZ2VzRGF0YSIsImVkZ2VEYXRhIiwic2VsZWN0ZWRFZGdlRGF0YSIsIm9uIiwiZ2VuZXJhdGVOb2RlIiwidGFwTm9kZSIsInRhcE5vZGVEYXRhIiwiZ2VuZXJhdGVFZGdlIiwidGFwRWRnZSIsInRhcEVkZ2VEYXRhIiwibW91c2VvdmVyTm9kZURhdGEiLCJtb3VzZW92ZXJFZGdlRGF0YSIsIm1lcmdlIiwidW5tZXJnZSIsIkN5UmVzcG9uc2l2ZSIsInRvZ2dsZSIsInJlc3BvbnNpdmUiLCJpbWFnZVR5cGUiLCJpbWFnZU9wdGlvbnMiLCJhY3Rpb25zVG9QZXJmb3JtIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiZGVzaXJlZE91dHB1dCIsIm91dHB1dCIsImRvd25sb2FkSW1hZ2UiLCJzdG9yZUltYWdlIiwicG5nIiwianBnIiwic3ZnIiwiZk5hbWUiLCJkb3dubG9hZEJsb2IiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiY2FsbGJhY2tEYXRhIiwicmVzdWx0IiwicmVwbGFjZSIsImltYWdlRGF0YSIsInJlYWRBc0RhdGFVUkwiLCJkb3dubG9hZExpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJocmVmIiwiZG93bmxvYWQiLCJjbGljayIsInJldm9rZU9iamVjdFVSTCIsInJlbW92ZUNoaWxkIiwiaWQiLCJjbGFzc05hbWUiLCJlbGVtZW50cyIsInN0eWxlc2hlZXQiLCJwYW4iLCJ6b29tIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG91bmdyYWJpZnkiLCJhdXRvbG9jayIsImF1dG91bnNlbGVjdGlmeSIsImdlbmVyYXRlSW1hZ2UiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYWN0aW9uIiwiZmlsZW5hbWUiLCJDeXRvc2NhcGVDb21wb25lbnQiLCJub3JtYWxpemVFbGVtZW50cyIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm9iamVjdCIsImZ1bmMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwic2hhcGUiLCJsYWJlbCIsIngiLCJudW1iZXIiLCJ5IiwiYm9vbCIsImV4YWN0Iiwibm9kZXMiLCJhcnJheSIsImVkZ2VzIiwic2VsZWN0b3IiLCJpc1JlcXVpcmVkIiwibmFtZSIsIm9uZU9mIiwiZml0IiwicGFkZGluZyIsImFuaW1hdGUiLCJhbmltYXRpb25EdXJhdGlvbiIsImJvdW5kaW5nQm94IiwicGVyc2lzdGVuY2UiLCJwZXJzaXN0ZWRfcHJvcHMiLCJwZXJzaXN0ZW5jZV90eXBlIiwiZGVmYXVsdFByb3BzIiwid2lkdGgiLCJoZWlnaHQiLCJkZWZhdWx0UGVyc2lzdGVuY2VUcmFuc2Zvcm0iLCJleHRyYWN0IiwicHJvcFZhbHVlIiwiYXBwbHkiLCJzdG9yZWRWYWx1ZSIsInBlcnNpc3RlbmNlVHJhbnNmb3JtcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7Ozs7Ozs7OytlQVRBOzs7Ozs7QUFXQTs7OztJQUlNQSxTOzs7QUFDRix1QkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLDBIQUNUQSxLQURTOztBQUdmLGNBQUtDLFFBQUwsR0FBZ0IsTUFBS0EsUUFBTCxDQUFjQyxJQUFkLE9BQWhCO0FBQ0EsY0FBS0MsZUFBTCxHQUF1QixLQUF2QjtBQUNBLGNBQUtDLHFCQUFMLEdBQTZCLE1BQUtBLHFCQUFMLENBQTJCRixJQUEzQixPQUE3QjtBQUNBLGNBQUtHLGlCQUFMLEdBQXlCLEtBQXpCO0FBTmU7QUFPbEI7Ozs7cUNBRVlDLEssRUFBTztBQUNoQixnQkFBTUMsTUFBTUQs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QUcsQ0FBSixFQUFPRSxHQUFHLENBQVYsRUFIZ0I7QUFJckIvQixVQUFNLENBSmU7QUFLckJHLGFBQVMsS0FMWTtBQU1yQkMsYUFBUyxJQU5ZO0FBT3JCQyxvQkFBZ0IsSUFQSztBQVFyQkMsd0JBQW9CLElBUkM7QUFTckJMLG9CQUFnQixJQVRLO0FBVXJCQyx3QkFBb0IsSUFWQztBQVdyQksseUJBQXFCLEtBWEE7QUFZckJFLGNBQVUsS0FaVztBQWFyQkQsbUJBQWUsS0FiTTtBQWNyQkUscUJBQWlCLEtBZEk7QUFlckI5RSx1QkFBbUIsSUFmRTtBQWdCckIrRSxtQkFBZSxFQWhCTTtBQWlCckIvQixlQUFXLElBakJVO0FBa0JyQnhCLGdCQUFZLEtBbEJTO0FBbUJyQnlDLGNBQVUsRUFuQlc7QUFvQnJCa0QscUJBQWlCLEVBcEJJO0FBcUJyQkMsc0JBQWtCO0FBckJHLENBQXpCOztBQXdCQSxJQUFNSSw4QkFBOEI7QUFDaENDLGFBQVM7QUFBQSxlQUFhQyxTQUFiO0FBQUEsS0FEdUI7QUFFaENDLFdBQU87QUFBQSxlQUFlQyxXQUFmO0FBQUE7QUFGeUIsQ0FBcEM7O0FBS0F4TCxVQUFVeUwscUJBQVYsR0FBa0M7QUFDOUI1RCxjQUFVdUQsMkJBRG9CO0FBRTlCdEQsZ0JBQVlzRCwyQkFGa0I7QUFHOUJ2SCxZQUFRdUg7O0FBSHNCLENBQWxDOztrQkFPZXBMLFMiLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvQ3l0b3NjYXBlLnJlYWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKYXZhU2NyaXB0IFJlcXVpcmVtZW50czogY3l0b3NjYXBlLCBjeXRvc2NhcGUtc3ZnXG4gKiBSZWFjdC5qcyByZXF1aXJlbWVudHM6IHJlYWN0LWN5dG9zY2FwZWpzXG4gKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDeXRvc2NhcGVDb21wb25lbnQgZnJvbSAncmVhY3QtY3l0b3NjYXBlanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IEN5UmVzcG9uc2l2ZSBmcm9tICcuLi9jeVJlc3BvbnNpdmUuanMnO1xuXG4vKipcbkEgQ29tcG9uZW50IExpYnJhcnkgZm9yIERhc2ggYWltZWQgYXQgZmFjaWxpdGF0aW5nIG5ldHdvcmsgdmlzdWFsaXphdGlvbiBpblxuUHl0aG9uLCB3cmFwcGVkIGFyb3VuZCBbQ3l0b3NjYXBlLmpzXShodHRwOi8vanMuY3l0b3NjYXBlLm9yZy8pLlxuICovXG5jbGFzcyBDeXRvc2NhcGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUN5ID0gdGhpcy5oYW5kbGVDeS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVDeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZUltYWdlR2VuZXJhdGlvbiA9IHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZU5vZGUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IGlzUGFyZW50ID0gZWxlLmlzUGFyZW50KCksXG4gICAgICAgICAgICBpc0NoaWxkbGVzcyA9IGVsZS5pc0NoaWxkbGVzcygpLFxuICAgICAgICAgICAgaXNDaGlsZCA9IGVsZS5pc0NoaWxkKCksXG4gICAgICAgICAgICBpc09ycGhhbiA9IGVsZS5pc09ycGhhbigpLFxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbiA9IGVsZS5yZW5kZXJlZFBvc2l0aW9uKCksXG4gICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uID0gZWxlLnJlbGF0aXZlUG9zaXRpb24oKSxcbiAgICAgICAgICAgIHBhcmVudCA9IGVsZS5wYXJlbnQoKSxcbiAgICAgICAgICAgIHN0eWxlID0gZWxlLnN0eWxlKCk7XG5cbiAgICAgICAgLy8gVHJpbSBkb3duIHRoZSBlbGVtZW50IG9iamVjdHMgdG8gb25seSB0aGUgZGF0YSBjb250YWluZWRcbiAgICAgICAgY29uc3QgZWRnZXNEYXRhID0gZWxlLmNvbm5lY3RlZEVkZ2VzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YSA9IGVsZS5jaGlsZHJlbigpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhbmNlc3RvcnNEYXRhID0gZWxlLmFuY2VzdG9ycygpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZXNjZW5kYW50c0RhdGEgPSBlbGUuZGVzY2VuZGFudHMoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2libGluZ3NEYXRhID0gZWxlLnNpYmxpbmdzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7dGltZVN0YW1wfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGVcbiAgICAgICAgfSA9IGVsZS5qc29uKCk7XG5cbiAgICAgICAgbGV0IHBhcmVudERhdGE7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudERhdGEgPSBwYXJlbnQuZGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50RGF0YSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlT2JqZWN0ID0ge1xuICAgICAgICAgICAgLy8gTm9kZXMgYXR0cmlidXRlc1xuICAgICAgICAgICAgZWRnZXNEYXRhLFxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbixcbiAgICAgICAgICAgIHRpbWVTdGFtcCxcbiAgICAgICAgICAgIC8vIEZyb20gZWxlLmpzb24oKVxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgLy8gQ29tcG91bmQgTm9kZXMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBhbmNlc3RvcnNEYXRhLFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhLFxuICAgICAgICAgICAgZGVzY2VuZGFudHNEYXRhLFxuICAgICAgICAgICAgcGFyZW50RGF0YSxcbiAgICAgICAgICAgIHNpYmxpbmdzRGF0YSxcbiAgICAgICAgICAgIGlzUGFyZW50LFxuICAgICAgICAgICAgaXNDaGlsZGxlc3MsXG4gICAgICAgICAgICBpc0NoaWxkLFxuICAgICAgICAgICAgaXNPcnBoYW4sXG4gICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uLFxuICAgICAgICAgICAgLy8gU3R5bGluZ1xuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5vZGVPYmplY3Q7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVFZGdlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICBjb25zdCBtaWRwb2ludCA9IGVsZS5taWRwb2ludCgpLFxuICAgICAgICAgICAgaXNMb29wID0gZWxlLmlzTG9vcCgpLFxuICAgICAgICAgICAgaXNTaW1wbGUgPSBlbGUuaXNTaW1wbGUoKSxcbiAgICAgICAgICAgIHNvdXJjZURhdGEgPSBlbGUuc291cmNlKCkuZGF0YSgpLFxuICAgICAgICAgICAgc291cmNlRW5kcG9pbnQgPSBlbGUuc291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgICAgIHN0eWxlID0gZWxlLnN0eWxlKCksXG4gICAgICAgICAgICB0YXJnZXREYXRhID0gZWxlLnRhcmdldCgpLmRhdGEoKSxcbiAgICAgICAgICAgIHRhcmdldEVuZHBvaW50ID0gZWxlLnRhcmdldEVuZHBvaW50KCk7XG5cbiAgICAgICAgY29uc3Qge3RpbWVTdGFtcH0gPSBldmVudDtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICB9ID0gZWxlLmpzb24oKTtcblxuICAgICAgICBjb25zdCBlZGdlT2JqZWN0ID0ge1xuICAgICAgICAgICAgLy8gRWRnZXMgYXR0cmlidXRlc1xuICAgICAgICAgICAgaXNMb29wLFxuICAgICAgICAgICAgaXNTaW1wbGUsXG4gICAgICAgICAgICBtaWRwb2ludCxcbiAgICAgICAgICAgIHNvdXJjZURhdGEsXG4gICAgICAgICAgICBzb3VyY2VFbmRwb2ludCxcbiAgICAgICAgICAgIHRhcmdldERhdGEsXG4gICAgICAgICAgICB0YXJnZXRFbmRwb2ludCxcbiAgICAgICAgICAgIHRpbWVTdGFtcCxcbiAgICAgICAgICAgIC8vIEZyb20gZWxlLmpzb24oKVxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIC8vIFN0eWxpbmdcbiAgICAgICAgICAgIHN0eWxlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGVkZ2VPYmplY3Q7XG4gICAgfVxuXG4gICAgaGFuZGxlQ3koY3kpIHtcbiAgICAgICAgLy8gSWYgdGhlIGN5IHBvaW50ZXIgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBhbmQgaGFuZGxlQ3kgaGFzIGFscmVhZHlcbiAgICAgICAgLy8gYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGFuIHdlIGRvbid0IHJ1biB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY3kgPT09IHRoaXMuX2N5ICYmIHRoaXMuX2hhbmRsZUN5Q2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3kgPSBjeTtcbiAgICAgICAgd2luZG93LmN5ID0gY3k7XG4gICAgICAgIHRoaXMuX2hhbmRsZUN5Q2FsbGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIENPTlNUQU5UUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBjb25zdCBTRUxFQ1RfVEhSRVNIT0xEID0gMTAwO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGVU5DVElPTlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgY29uc3QgcmVmcmVzaExheW91dCA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZWZyZXNoIExheW91dCBpZiBuZWVkZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3Qge2F1dG9SZWZyZXNoTGF5b3V0LCBsYXlvdXR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICAgICAgaWYgKGF1dG9SZWZyZXNoTGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgY3kubGF5b3V0KGxheW91dCkucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRTZWxlY3RlZE5vZGVzRGF0YSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZXBldGl0aXZlbHkgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBub2RlIGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAgb3IgdW5zZWxlY3RlZCwgYnV0IGtlZXBzIGJlaW5nIGRlYm91bmNlZCBpZiBpdCBpcyBjYWxsZWQgYWdhaW5cbiAgICAgICAgICAgICB3aXRoaW4gMTAwIG1zIChnaXZlbiBieSBTRUxFQ1RfVEhSRVNIT0xEKS4gRWZmZWN0aXZlbHksIGl0IG9ubHlcbiAgICAgICAgICAgICBydW5zIHdoZW4gYWxsIHRoZSBub2RlcyBoYXZlIGJlZW4gY29ycmVjdGx5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgYW5kXG4gICAgICAgICAgICAgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RlZE5vZGVzIGNvbGxlY3Rpb24sIGFuZCB0aGVuIHVwZGF0ZXNcbiAgICAgICAgICAgICB0aGUgc2VsZWN0ZWROb2RlRGF0YSBwcm9wLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBub2RlRGF0YSA9IHNlbGVjdGVkTm9kZXMubWFwKGVsID0+IGVsLmRhdGEoKSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE5vZGVEYXRhOiBub2RlRGF0YVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBTRUxFQ1RfVEhSRVNIT0xEKTtcblxuICAgICAgICBjb25zdCBzZW5kU2VsZWN0ZWRFZGdlc0RhdGEgPSBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gc2VsZWN0ZWRFZGdlcy5tYXAoZWwgPT4gZWwuZGF0YSgpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWRnZURhdGE6IGVkZ2VEYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFVkVOVFMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGN5Lm9uKCd0YXAnLCAnbm9kZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYmplY3QgPSB0aGlzLmdlbmVyYXRlTm9kZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICB0YXBOb2RlOiBub2RlT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXBOb2RlRGF0YTogbm9kZU9iamVjdC5kYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCd0YXAnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VPYmplY3QgPSB0aGlzLmdlbmVyYXRlRWRnZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICB0YXBFZGdlOiBlZGdlT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXBFZGdlRGF0YTogZWRnZU9iamVjdC5kYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdtb3VzZW92ZXInLCAnbm9kZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBtb3VzZW92ZXJOb2RlRGF0YTogZXZlbnQudGFyZ2V0LmRhdGEoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignbW91c2VvdmVyJywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuc2V0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VvdmVyRWRnZURhdGE6IGV2ZW50LnRhcmdldC5kYXRhKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3NlbGVjdCcsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLm1lcmdlKGVsZSk7XG4gICAgICAgICAgICBzZW5kU2VsZWN0ZWROb2Rlc0RhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3Vuc2VsZWN0IHJlbW92ZScsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLnVubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZE5vZGVzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignc2VsZWN0JywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkRWRnZXMubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZEVkZ2VzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbigndW5zZWxlY3QgcmVtb3ZlJywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkRWRnZXMudW5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkRWRnZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdhZGQgcmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaExheW91dCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmN5UmVzcG9uc2l2ZUNsYXNzID0gbmV3IEN5UmVzcG9uc2l2ZShjeSk7XG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MudG9nZ2xlKHRoaXMucHJvcHMucmVzcG9uc2l2ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW1hZ2VHZW5lcmF0aW9uKGltYWdlVHlwZSwgaW1hZ2VPcHRpb25zLCBhY3Rpb25zVG9QZXJmb3JtLCBmaWxlTmFtZSkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAoaW1hZ2VPcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gaW1hZ2VPcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRlc2lyZWRPdXRwdXQgPSBvcHRpb25zLm91dHB1dDtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXQgPSAnYmxvYic7XG5cbiAgICAgICAgbGV0IGRvd25sb2FkSW1hZ2U7XG4gICAgICAgIGxldCBzdG9yZUltYWdlO1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbnNUb1BlcmZvcm0pIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0b3JlJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkb3dubG9hZCc6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGRvd25sb2FkSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGlmIChpbWFnZVR5cGUgPT09ICdwbmcnKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSB0aGlzLl9jeS5wbmcob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltYWdlVHlwZSA9PT0gJ2pwZycgfHwgaW1hZ2VUeXBlID09PSAnanBlZycpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2N5LmpwZyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvbmx5IHdvcmtzIHdoZW4gc3ZnIGlzIGltcG9ydGVkIChzZWUgbGliL2V4dHJhX2luZGV4LmpzKVxuICAgICAgICBpZiAoaW1hZ2VUeXBlID09PSAnc3ZnJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gdGhpcy5fY3kuc3ZnKG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogSWYgb3V0cHV0IGlzIGVtcHR5IGJlY2F1c2Ugb2YgYmFkIG9wdGlvbnMgb3IgYSBjeXRvc2NhcGUgZXJyb3IsXG4gICAgICAgICAqIHNraXAgYW55IGRvd25sb2FkIG9yIHN0b3JhZ2Ugc3RlcHMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAob3V0cHV0ICYmIGRvd25sb2FkSW1hZ2UpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBEb3dubG9hZGluZyBpcyBpbml0aWF0ZWQgY2xpZW50LXNpZGUgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgZ2VuZXJhdGVkIGF0XG4gICAgICAgICAgICAgKiB0aGUgY2xpZW50LiBUaGlzIGF2b2lkcyB0cmFuc2ZlcnJpbmcgYSBwb3RlbnRpYWxseSBsYXJnZSBpbWFnZVxuICAgICAgICAgICAgICogdG8gdGhlIHNlcnZlciBhbmQgYmFjayBhZ2FpbiB0aHJvdWdoIGEgY2FsbGJhY2suXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCBmTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGZOYW1lID0gJ2N5dG8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW1hZ2VUeXBlICE9PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRCbG9iKG91dHB1dCwgZk5hbWUgKyAnLicgKyBpbWFnZVR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW291dHB1dF0sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmTmFtZSArICcuJyArIGltYWdlVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3V0cHV0ICYmIHN0b3JlSW1hZ2UpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgb3V0cHV0IHR5cGUgaWYgdW5zcGVjaWZpZWRcbiAgICAgICAgICAgIGlmICghZGVzaXJlZE91dHB1dCkge1xuICAgICAgICAgICAgICAgIGRlc2lyZWRPdXRwdXQgPSAnYmFzZTY0dXJpJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NHVyaScgfHwgZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NCcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBDb252ZXJ0IGJsb2IgdG8gYmFzZTY0dXJpIG9yIGJhc2U2NCBzdHJpbmcgdG8gc3RvcmUgdGhlIGltYWdlIGRhdGEuXG4gICAgICAgICAgICAgKiBUaGFuayB5b3UsIGJhc2U2NGd1cnUgaHR0cHM6Ly9iYXNlNjQuZ3VydS9kZXZlbG9wZXJzL2phdmFzY3JpcHQvZXhhbXBsZXMvZW5jb2RlLWJsb2JcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogRmlsZVJlYWRlciBpcyBhc3luY2hyb25vdXMsIHNvIHRoZSByZWFkIGZ1bmN0aW9uIGlzIG5vbi1ibG9ja2luZy5cbiAgICAgICAgICAgICAgICAgKiBJZiB0aGlzIGNvZGUgYmxvY2sgaXMgcGxhY2VkIGFmdGVyIHRoZSByZWFkIGNvbW1hbmQsIGl0XG4gICAgICAgICAgICAgICAgICogbWF5IHJlc3VsdCBpbiBlbXB0eSBvdXRwdXQgYmVjYXVzZSB0aGUgYmxvYiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2tEYXRhID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhID0gY2FsbGJhY2tEYXRhLnJlcGxhY2UoL15kYXRhOi4rO2Jhc2U2NCwvLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe2ltYWdlRGF0YTogY2FsbGJhY2tEYXRhfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwob3V0cHV0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBEb3dubG9hZCBibG9iIGFzIGZpbGUgYnkgZHluYW1pY2FsbHkgY3JlYXRpbmcgbGluay5cbiAgICAgICAgICogQ2hyb21lIGRvZXMgbm90IG9wZW4gZGF0YSBVUkxzIHdoZW4gSlMgb3BlbnMgYSBuZXcgdGFiIGRpcmVjdGVkXG4gICAgICAgICAqIGF0IHRoZSBkYXRhIFVSTCwgc28gdGhpcyBpcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICogdGhhdCBkb2Vzbid0IHJlcXVpcmUgZXh0cmEgcGFja2FnZXMuIEl0IG1heSBub3QgYmVoYXZlIGluXG4gICAgICAgICAqIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFjcm9zcyBicm93c2VycyAobWlnaHQgZGlzcGxheSBpbWFnZSBpbiBuZXcgdGFiXG4gICAgICAgICAqIGludGVhZCBvZiBkb3dubG9hZGluZyBhcyBhIGZpbGUpLlxuICAgICAgICAgKiBUaGFuayB5b3UsIGtvbGRldiBodHRwczovL2pzZmlkZGxlLm5ldC9rb2xkZXYvY1c3VzUvXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvd25sb2FkTGluay5zdHlsZSA9ICdkaXNwbGF5OiBub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZExpbmspO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgZG93bmxvYWRMaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG93bmxvYWRMaW5rKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIC8vIEhUTUwgYXR0cmlidXRlIHByb3BzXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgLy8gQ29tbW9uIHByb3BzXG4gICAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICAgIHN0eWxlc2hlZXQsXG4gICAgICAgICAgICBsYXlvdXQsXG4gICAgICAgICAgICAvLyBWaWV3cG9ydCBNYW5pcHVsYXRpb25cbiAgICAgICAgICAgIHBhbixcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICAvLyBWaWV3cG9ydCBNdXRhYmlsaXR5IGFuZCBnZXN0dXJlIFRvZ2dsaW5nXG4gICAgICAgICAgICBwYW5uaW5nRW5hYmxlZCxcbiAgICAgICAgICAgIHVzZXJQYW5uaW5nRW5hYmxlZCxcbiAgICAgICAgICAgIG1pblpvb20sXG4gICAgICAgICAgICBtYXhab29tLFxuICAgICAgICAgICAgem9vbWluZ0VuYWJsZWQsXG4gICAgICAgICAgICB1c2VyWm9vbWluZ0VuYWJsZWQsXG4gICAgICAgICAgICBib3hTZWxlY3Rpb25FbmFibGVkLFxuICAgICAgICAgICAgYXV0b3VuZ3JhYmlmeSxcbiAgICAgICAgICAgIGF1dG9sb2NrLFxuICAgICAgICAgICAgYXV0b3Vuc2VsZWN0aWZ5LFxuICAgICAgICAgICAgLy8gSW1hZ2UgaGFuZGxpbmdcbiAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UsXG4gICAgICAgICAgICAvLyBSZXNwb25zaXZlIGdyYXBoc1xuICAgICAgICAgICAgcmVzcG9uc2l2ZVxuICAgICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZ2VuZXJhdGVJbWFnZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgbm8gY3l0b3NjYXBlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkIHlldCwgYW4gaW1hZ2UgY2Fubm90IGJlIGdlbmVyYXRlZCxcbiAgICAgICAgICAgIC8vIHNvIGdlbmVyYXRlSW1hZ2Ugd2lsbCBiZSBpZ25vcmVkIGFuZCBjbGVhcmVkLlxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7Z2VuZXJhdGVJbWFnZToge319KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUltYWdlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2Uub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UuZmlsZW5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MudG9nZ2xlKHJlc3BvbnNpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDeXRvc2NhcGVDb21wb25lbnRcbiAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgY3k9e3RoaXMuaGFuZGxlQ3l9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtDeXRvc2NhcGVDb21wb25lbnQubm9ybWFsaXplRWxlbWVudHMoZWxlbWVudHMpfVxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQ9e3N0eWxlc2hlZXR9XG4gICAgICAgICAgICAgICAgbGF5b3V0PXtsYXlvdXR9XG4gICAgICAgICAgICAgICAgcGFuPXtwYW59XG4gICAgICAgICAgICAgICAgem9vbT17em9vbX1cbiAgICAgICAgICAgICAgICBwYW5uaW5nRW5hYmxlZD17cGFubmluZ0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgdXNlclBhbm5pbmdFbmFibGVkPXt1c2VyUGFubmluZ0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgbWluWm9vbT17bWluWm9vbX1cbiAgICAgICAgICAgICAgICBtYXhab29tPXttYXhab29tfVxuICAgICAgICAgICAgICAgIHpvb21pbmdFbmFibGVkPXt6b29taW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICB1c2VyWm9vbWluZ0VuYWJsZWQ9e3VzZXJab29taW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBib3hTZWxlY3Rpb25FbmFibGVkPXtib3hTZWxlY3Rpb25FbmFibGVkfVxuICAgICAgICAgICAgICAgIGF1dG91bmdyYWJpZnk9e2F1dG91bmdyYWJpZnl9XG4gICAgICAgICAgICAgICAgYXV0b2xvY2s9e2F1dG9sb2NrfVxuICAgICAgICAgICAgICAgIGF1dG91bnNlbGVjdGlmeT17YXV0b3Vuc2VsZWN0aWZ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkN5dG9zY2FwZS5wcm9wVHlwZXMgPSB7XG4gICAgLy8gSFRNTCBhdHRyaWJ1dGUgcHJvcHNcblxuICAgIC8qKlxuICAgICAqIFRoZSBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgY29tcG9uZW50IGluIERhc2ggY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZWxlbWVudCAodGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQncyBodG1sXG4gICAgICogY2xhc3MgYXR0cmlidXRlKS5cbiAgICAgKi9cbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBBZGQgaW5saW5lIHN0eWxlcyB0byB0aGUgcm9vdCBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gICAgLy8gRGFzaCBzcGVjaWZpYyBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogRGFzaC1hc3NpZ25lZCBjYWxsYmFjayB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYW55IG9mIHRoZVxuICAgICAqIHByb3BlcnRpZXMgY2hhbmdlLlxuICAgICAqL1xuICAgIHNldFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8vIENvbW1vbiBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBuZXR3b3Jrcy4gRWFjaCBkaWN0aW9uYXJ5IGRlc2NyaWJlcyBhbiBlbGVtZW50LCBhbmRcbiAgICAgKiBzcGVjaWZpZXMgaXRzIHB1cnBvc2UuIFRoZSBbb2ZmaWNpYWwgQ3l0b3NjYXBlLmpzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jbm90YXRpb24vZWxlbWVudHMtanNvbilcbiAgICAgKiBvZmZlcnMgYW4gZXh0ZW5zaXZlIG92ZXJ2aWV3IGFuZCBleGFtcGxlcyBvZiBlbGVtZW50IGRlY2xhcmF0aW9uLlxuICAgICAqIEFsdGVybmF0aXZlbHksIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBmb3JtYXQgeyAnbm9kZXMnOiBbXSwgJ2VkZ2VzJzogW10gfSBpcyBhbGxvd2VkIGF0IGluaXRpYWxpemF0aW9uLFxuICAgICAqIGJ1dCBhcnJheXMgcmVtYWluIHRoZSByZWNvbW1lbmRlZCBmb3JtYXQuXG4gICAgICovXG4gICAgZWxlbWVudHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgICAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRWl0aGVyICdub2Rlcycgb3IgJ2VkZ2VzJy4gSWYgbm90IGdpdmVuLCBpdCdzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICAgICAgLyoqIEVsZW1lbnQgc3BlY2lmaWMgZGF0YS4qL1xuICAgICAgICAgICAgICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAgICAgICAgIC8qKiAgUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50LCB1c2VmdWwgZm9yIHNlbGVjdG9ycyBhbmQgZWRnZXMuIFJhbmRvbWx5IGFzc2lnbmVkIGlmIG5vdCBnaXZlbi4qL1xuICAgICAgICAgICAgICAgICAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBlbGVtZW50LCB1c2VmdWwgd2hlbiBgZGF0YShsYWJlbClgIGlzIGdpdmVuIHRvIGEgc3R5bGUncyBgY29udGVudGBcbiAgICAgICAgICAgICAgICAgICAgICogb3IgYGxhYmVsYC4gSXQgaXMgb25seSBhIGNvbnZlbnRpb24uICovXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIE9wdGlvbmFsIHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUuIE5lZWRlZCB0byBjcmVhdGUgY29tcG91bmQgbm9kZXMuICovXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIGVkZ2VzLiBUaGUgaWQgb2YgdGhlIHNvdXJjZSBub2RlLCB3aGljaCBpcyB3aGVyZSB0aGUgZWRnZSBzdGFydHMuICovXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIGVkZ2VzLiBUaGUgaWQgb2YgdGhlIHRhcmdldCBub2RlLCB3aGVyZSB0aGUgZWRnZSBlbmRzLiAqL1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIFRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZS4gKi9cbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUuICovXG4gICAgICAgICAgICAgICAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIC8qKiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICAgICAgICAgICAgICB5OiBQcm9wVHlwZXMubnVtYmVyXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIHVwb24gaW5pdGlhbGlzYXRpb24uICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIC8qKiBJZiB0aGUgZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQuICovXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIG5vZGVzLiBJZiB0aGUgcG9zaXRpb24gaXMgaW1tdXRhYmxlLiAqL1xuICAgICAgICAgICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIG5vZGVzLiBJZiB0aGUgbm9kZSBjYW4gYmUgZ3JhYmJlZCBhbmQgbW92ZWQgYnkgdGhlIHVzZXIuICovXG4gICAgICAgICAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBTcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNsYXNzIG5hbWVzIG9mIHRoZSBlbGVtZW50LiBUaG9zZSBjbGFzc2VzIGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAqIGJ5IGEgc3R5bGUgc2VsZWN0b3IuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgICAgIG5vZGVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgICAgICAgICBlZGdlczogUHJvcFR5cGVzLmFycmF5XG4gICAgICAgIH0pXG4gICAgXSksXG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyB0aGUgc3R5bGVzIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgKiBFYWNoIGRpY3Rpb25hcnkgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBrZXlzOiBgc2VsZWN0b3JgIGFuZCBgc3R5bGVgLlxuICAgICAqXG4gICAgICogQm90aCB0aGUgW3NlbGVjdG9yXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI3NlbGVjdG9ycykgYW5kXG4gICAgICogdGhlIFtzdHlsZV0oaHR0cHM6Ly9qcy5jeXRvc2NhcGUub3JnLyNzdHlsZS9ub2RlLWJvZHkpIGFyZVxuICAgICAqIGV4aGF1c3RpdmVseSBkb2N1bWVudGVkIGluIHRoZSBDeXRvc2NhcGUuanMgZG9jcy4gQWx0aG91Z2ggbWV0aG9kcyBzdWNoXG4gICAgICogYXMgYGN5LmVsZW1lbnRzKC4uLilgIGFuZCBgY3kuZmlsdGVyKC4uLilgIGFyZSBub3QgYXZhaWxhYmxlLCB0aGUgc2VsZWN0b3JcbiAgICAgKiBzdHJpbmcgc3ludGF4IHN0YXlzIHRoZSBzYW1lLlxuICAgICAqL1xuICAgIHN0eWxlc2hlZXQ6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGljaCBlbGVtZW50cyB5b3UgYXJlIHN0eWxpbmcuIEdlbmVyYWxseSwgeW91IHNlbGVjdCBhIGdyb3VwIG9mIGVsZW1lbnRzIChub2RlLCBlZGdlcywgYm90aCksXG4gICAgICAgICAgICAgKiBhIGNsYXNzICh0aGF0IHlvdSBkZWNsYXJlIGluIHRoZSBlbGVtZW50IGRpY3Rpb25hcnkpLCBvciBhbiBlbGVtZW50IGJ5IElELlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGF0IGFzcGVjdHMgb2YgdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIG1vZGlmeS4gVGhpcyBjb3VsZCBiZSB0aGUgc2l6ZSBvclxuICAgICAgICAgICAgICogY29sb3Igb2YgYSBub2RlLCB0aGUgc2hhcGUgb2YgYW4gZWRnZSBhcnJvdywgb3IgbWFueSBtb3JlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gICAgICAgIH0pXG4gICAgKSxcblxuICAgIC8qKlxuICAgICAqIEEgZGljdGlvbmFyeSBzcGVjaWZ5aW5nIGhvdyB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB5b3VyXG4gICAgICogZ3JhcGguIFRoZSBgJ25hbWUnYCBrZXkgaXMgcmVxdWlyZWQsIGFuZCBpbmRpY2F0ZXMgd2hpY2ggbGF5b3V0IChhbGdvcml0aG0pIHRvXG4gICAgICogdXNlLiBUaGUga2V5cyBhY2NlcHRlZCBieSBgbGF5b3V0YCB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgYWxnb3JpdGhtLCBidXQgdGhlc2VcbiAgICAgKiBrZXlzIGFyZSBhY2NlcHRlZCBieSBhbGwgbGF5b3V0czogYGZpdGAsICBgcGFkZGluZ2AsIGBhbmltYXRlYCwgYGFuaW1hdGlvbkR1cmF0aW9uYCxcbiAgICAgKiBgYm91bmRpbmdCb3hgLlxuICAgICAqXG4gICAgICogIFRoZSBjb21wbGV0ZSBsaXN0IG9mIGxheW91dHMgYW5kIHRoZWlyIGFjY2VwdGVkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgKiAgW0N5dG9zY2FwZS5qcyBkb2NzXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI2xheW91dHMpIC4gRm9yIHRoZSBleHRlcm5hbCBsYXlvdXRzLFxuICAgICAqIHRoZSBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlIFwiQVBJXCIgc2VjdGlvbiBvZiB0aGUgIFJFQURNRS5cbiAgICAgKiAgTm90ZSB0aGF0IGNlcnRhaW4ga2V5cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBEYXNoIHNpbmNlIHRoZSB2YWx1ZSBpcyBhIEphdmFTY3JpcHRcbiAgICAgKiAgZnVuY3Rpb24gb3IgYSBjYWxsYmFjay4gUGxlYXNlIHZpc2l0IHRoaXNcbiAgICAgKiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvZGFzaC1jeXRvc2NhcGUvaXNzdWVzLzI1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBsYXlvdXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbGF5b3V0cyBhdmFpbGFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICAgICAqICAgYHJhbmRvbWA6IFJhbmRvbWx5IGFzc2lnbnMgcG9zaXRpb25zLlxuICAgICAgICAgKiAgIGBwcmVzZXRgOiBBc3NpZ25zIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBgcG9zaXRpb25gIGtleSBpbiBlbGVtZW50IGRpY3Rpb25hcmllcy5cbiAgICAgICAgICogICBgY2lyY2xlYDogU2luZ2xlLWxldmVsIGNpcmNsZSwgd2l0aCBvcHRpb25hbCByYWRpdXMuXG4gICAgICAgICAqICAgYGNvbmNlbnRyaWNgOiBNdWx0aS1sZXZlbCBjaXJjbGUsIHdpdGggb3B0aW9uYWwgcmFkaXVzLlxuICAgICAgICAgKiAgIGBncmlkYDogU3F1YXJlIGdyaWQsIG9wdGlvbmFsbHkgd2l0aCBudW1iZXJzIG9mIGByb3dzYCBhbmQgYGNvbHNgLlxuICAgICAgICAgKiAgIGBicmVhZHRoZmlyc3RgOiBUcmVlIHN0cnVjdHVyZSBidWlsdCB1c2luZyBCRlMsIHdpdGggb3B0aW9uYWwgYHJvb3RzYC5cbiAgICAgICAgICogICBgY29zZWA6IEZvcmNlLWRpcmVjdGVkIHBoeXNpY3Mgc2ltdWxhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogU29tZSBleHRlcm5hbCBsYXlvdXRzIGFyZSBhbHNvIGluY2x1ZGVkLiBUbyB1c2UgdGhlbSwgcnVuXG4gICAgICAgICAqICAgYGRhc2hfY3l0b3NjYXBlLmxvYWRfZXh0cmFfbGF5b3V0cygpYCBiZWZvcmUgY3JlYXRpbmcgeW91ciBEYXNoIGFwcC4gQmUgY2FyZWZ1bCBhYm91dFxuICAgICAgICAgKiAgIHVzaW5nIHRoZSBleHRyYSBsYXlvdXRzIHdoZW4gbm90IG5lY2Vzc2FyeSwgc2luY2UgdGhleSByZXF1aXJlIHN1cHBsZW1lbnRhcnkgYmFuZHdpZHRoXG4gICAgICAgICAqICAgZm9yIGxvYWRpbmcsIHdoaWNoIGltcGFjdHMgdGhlIHN0YXJ0dXAgdGltZSBvZiB0aGUgYXBwLlxuICAgICAgICAgKiAgIFRoZSBleHRlcm5hbCBsYXlvdXRzIGFyZTpcbiAgICAgICAgICogICBbY29zZS1iaWxrZW50XShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1jb3NlLWJpbGtlbnQpLFxuICAgICAgICAgKiAgIFtjb2xhXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1jb2xhKSxcbiAgICAgICAgICogICBbZXVsZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWRhZ3JlKSxcbiAgICAgICAgICogICBbc3ByZWFkXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1zcHJlYWQpLFxuICAgICAgICAgKiAgIFtkYWdyZV0oaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtZGFncmUpLFxuICAgICAgICAgKiAgIFtrbGF5XShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1rbGF5KSxcbiAgICAgICAgICovXG4gICAgICAgIG5hbWU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICAgICAgICAncmFuZG9tJyxcbiAgICAgICAgICAgICdwcmVzZXQnLFxuICAgICAgICAgICAgJ2NpcmNsZScsXG4gICAgICAgICAgICAnY29uY2VudHJpYycsXG4gICAgICAgICAgICAnZ3JpZCcsXG4gICAgICAgICAgICAnYnJlYWR0aGZpcnN0JyxcbiAgICAgICAgICAgICdjb3NlJyxcbiAgICAgICAgICAgICdjbG9zZS1iaWxrZW50JyxcbiAgICAgICAgICAgICdjb2xhJyxcbiAgICAgICAgICAgICdldWxlcicsXG4gICAgICAgICAgICAnc3ByZWFkJyxcbiAgICAgICAgICAgICdkYWdyZScsXG4gICAgICAgICAgICAna2xheSdcbiAgICAgICAgXSkuaXNSZXF1aXJlZCxcbiAgICAgICAgLyoqICBXaGV0aGVyIHRvIHJlbmRlciB0aGUgbm9kZXMgaW4gb3JkZXIgdG8gZml0IHRoZSBjYW52YXMuICovXG4gICAgICAgIGZpdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgc2lkZXMgb2YgdGhlIGNhbnZhcywgaWYgZml0IGlzIGVuYWJsZWQuICovXG4gICAgICAgIHBhZGRpbmc6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBXaGV0aGVyIHRvIGFuaW1hdGUgY2hhbmdlIGluIHBvc2l0aW9uIHdoZW4gdGhlIGxheW91dCBjaGFuZ2VzLiAqL1xuICAgICAgICBhbmltYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIER1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMsIGlmIGVuYWJsZWQuICovXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAvKipcbiAgICAgICAgICogSG93IHRvIGNvbnN0cmFpbiB0aGUgbGF5b3V0IGluIGEgc3BlY2lmaWMgYXJlYS4gS2V5cyBhY2NlcHRlZCBhcmUgZWl0aGVyXG4gICAgICAgICAqIGB4MSwgeTEsIHgyLCB5MmAgb3IgYHgxLCB5MSwgdywgaGAsIGFsbCBvZiB3aGljaCByZWNlaXZlIGEgcGl4ZWwgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBib3VuZGluZ0JveDogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLFxuXG4gICAgLy8gVmlld3BvcnQgTWFuaXB1bGF0aW9uXG5cbiAgICAvKipcbiAgICAgKiBEaWN0aW9uYXJ5IGluZGljYXRpbmcgdGhlIGluaXRpYWwgcGFubmluZyBwb3NpdGlvbiBvZiB0aGUgZ3JhcGguIFRoZVxuICAgICAqIGZvbGxvd2luZyBrZXlzIGFyZSBhY2NlcHRlZDpcbiAgICAgKi9cbiAgICBwYW46IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBub2RlICovXG4gICAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlICAqL1xuICAgICAgICB5OiBQcm9wVHlwZXMubnVtYmVyXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gWW91IGNhbiBzZXQgYG1pblpvb21gIGFuZFxuICAgICAqIGBtYXhab29tYCB0byBzZXQgcmVzdHJpY3Rpb25zIG9uIHRoZSB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIHpvb206IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAvLyBWaWV3cG9ydCBNdXRhYmlsaXR5IGFuZCBnZXN0dXJlIFRvZ2dsaW5nXG4gICAgLyoqXG4gICAgICogV2hldGhlciBwYW5uaW5nIHRoZSBncmFwaCBpcyBlbmFibGVkIChpLmUuLCB0aGUgcG9zaXRpb24gb2YgdGhlIGdyYXBoIGlzXG4gICAgICogbXV0YWJsZSBvdmVyYWxsKS5cbiAgICAgKi9cbiAgICBwYW5uaW5nRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgZXZlbnRzIChlLmcuIGRyYWdnaW5nIHRoZSBncmFwaCBiYWNrZ3JvdW5kKSBhcmUgYWxsb3dlZCB0b1xuICAgICAqIHBhbiB0aGUgZ3JhcGguXG4gICAgICovXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIEEgbWluaW11bSBib3VuZCBvbiB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGguIFRoZSB2aWV3cG9ydCBjYW4gbm90IGJlXG4gICAgICogc2NhbGVkIHNtYWxsZXIgdGhhbiB0aGlzIHpvb20gbGV2ZWwuXG4gICAgICovXG4gICAgbWluWm9vbTogUHJvcFR5cGVzLm51bWJlcixcblxuICAgIC8qKlxuICAgICAqIEEgbWF4aW11bSBib3VuZCBvbiB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGguIFRoZSB2aWV3cG9ydCBjYW4gbm90IGJlXG4gICAgICogc2NhbGVkIGxhcmdlciB0aGFuIHRoaXMgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBtYXhab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB6b29taW5nIHRoZSBncmFwaCBpcyBlbmFibGVkIChpLmUuLCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGhcbiAgICAgKiBpcyBtdXRhYmxlIG92ZXJhbGwpLlxuICAgICAqL1xuICAgIHpvb21pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciBldmVudHMgKGUuZy4gZHJhZ2dpbmcgdGhlIGdyYXBoIGJhY2tncm91bmQpIGFyZSBhbGxvd2VkXG4gICAgICogdG8gcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBib3ggc2VsZWN0aW9uIChpLmUuIGRyYWcgYSBib3ggb3ZlcmxheSBhcm91bmQsIGFuZCByZWxlYXNlIGl0XG4gICAgICogdG8gc2VsZWN0KSBpcyBlbmFibGVkLiBJZiBlbmFibGVkLCB0aGUgdXNlciBtdXN0IHRhcGhvbGQgdG8gcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICBib3hTZWxlY3Rpb25FbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIHVuZ3JhYmlmaWVkIChub3QgZ3JhYmJhYmxlIGJ5IHVzZXIpIGJ5XG4gICAgICogZGVmYXVsdCAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgbm9kZSBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b3VuZ3JhYmlmeTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5vZGVzIHNob3VsZCBiZSBsb2NrZWQgKG5vdCBkcmFnZ2FibGUgYXQgYWxsKSBieSBkZWZhdWx0XG4gICAgICogKGlmIHRydWUsIG92ZXJyaWRlcyBpbmRpdmlkdWFsIG5vZGUgc3RhdGUpLlxuICAgICAqL1xuICAgIGF1dG9sb2NrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIHVuc2VsZWN0aWZpZWQgKGltbXV0YWJsZSBzZWxlY3Rpb24gc3RhdGUpIGJ5XG4gICAgICogZGVmYXVsdCAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgZWxlbWVudCBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b3Vuc2VsZWN0aWZ5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGxheW91dCBzaG91bGQgYmUgcmVmcmVzaGVkIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQuXG4gICAgICovXG4gICAgYXV0b1JlZnJlc2hMYXlvdXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLy8gVXNlciBFdmVudHMgUHJvcHNcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0ZSBub2RlIGRpY3Rpb25hcnkgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwTm9kZTogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBlZGdlc0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBub2RlIHNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgcmVuZGVyZWRQb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICB0aW1lU3RhbXA6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGdyYWJiYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGdyb3VwOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBsb2NrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBhbmNlc3RvcnNEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgY2hpbGRyZW5EYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgZGVzY2VuZGFudHNEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgcGFyZW50RGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIHNpYmxpbmdzRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzUGFyZW50OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzQ2hpbGRsZXNzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzQ2hpbGQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNPcnBoYW46IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZGljdGlvbmFyeSBvZiBhIG5vZGUgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwTm9kZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29tcGxldGUgZWRnZSBkaWN0aW9uYXJ5IHJldHVybmVkIHdoZW4geW91IHRhcCBvciBjbGljayBpdC4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHRhcEVkZ2U6IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgaXNMb29wOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBpc1NpbXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgbWlkcG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgc291cmNlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBzb3VyY2VFbmRwb2ludDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICB0YXJnZXREYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRhcmdldEVuZHBvaW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRpbWVTdGFtcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGFuIGVkZ2UgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwRWRnZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGEgbm9kZSByZXR1cm5lZCB3aGVuIHlvdSBob3ZlciBvdmVyIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgbW91c2VvdmVyTm9kZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGFuIGVkZ2UgcmV0dXJuZWQgd2hlbiB5b3UgaG92ZXIgb3ZlciBpdC4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlckVkZ2VEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZGF0YSBkaWN0aW9uYXJpZXMgb2YgYWxsIHNlbGVjdGVkIG5vZGVzIChlLmcuIHVzaW5nXG4gICAgICogU2hpZnQrQ2xpY2sgdG8gc2VsZWN0IG11bHRpcGxlIG5vZGVzLCBvciBTaGlmdCtEcmFnIHRvIHVzZSBib3ggc2VsZWN0aW9uKS4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHNlbGVjdGVkTm9kZURhdGE6IFByb3BUeXBlcy5hcnJheSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIGRhdGEgZGljdGlvbmFyaWVzIG9mIGFsbCBzZWxlY3RlZCBlZGdlcyAoZS5nLiB1c2luZ1xuICAgICAqIFNoaWZ0K0NsaWNrIHRvIHNlbGVjdCBtdWx0aXBsZSBub2Rlcywgb3IgU2hpZnQrRHJhZyB0byB1c2UgYm94IHNlbGVjdGlvbikuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBzZWxlY3RlZEVkZ2VEYXRhOiBQcm9wVHlwZXMuYXJyYXksXG5cbiAgICAvKipcbiAgICAgKiBEaWN0aW9uYXJ5IHNwZWNpZnlpbmcgb3B0aW9ucyB0byBnZW5lcmF0ZSBhbiBpbWFnZSBvZiB0aGUgY3VycmVudCBjeXRvc2NhcGUgZ3JhcGguXG4gICAgICogVmFsdWUgaXMgY2xlYXJlZCBhZnRlciBkYXRhIGlzIHJlY2VpdmVkIGFuZCBpbWFnZSBpcyBnZW5lcmF0ZWQuIFRoaXMgcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIGlnbm9yZWQgb24gdGhlIGluaXRpYWwgY3JlYXRpb24gb2YgdGhlIGN5dG9zY2FwZSBvYmplY3QgYW5kIG11c3QgYmUgaW52b2tlZCB0aHJvdWdoXG4gICAgICogYSBjYWxsYmFjayBhZnRlciBpdCBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBhcHAgZG9lcyBub3QgbmVlZCB0aGUgaW1hZ2UgZGF0YSBzZXJ2ZXIgc2lkZSBhbmQvb3IgaXQgd2lsbCBvbmx5IGJlIHVzZWQgdG8gZG93bmxvYWRcbiAgICAgKiB0aGUgaW1hZ2UsIGl0IG1heSBiZSBwcnVkZW50IHRvIGludm9rZSBgJ2Rvd25sb2FkJ2AgZm9yIGBhY3Rpb25gIGluc3RlYWQgb2ZcbiAgICAgKiBgJ3N0b3JlJ2AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSBwcmV2ZW50aW5nIHRyYW5zZmVyIG9mIGRhdGEgdG8gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZUltYWdlOiBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAvKiogRmlsZSB0eXBlIHRvIG91dHB1dCAgKi9cbiAgICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFsnc3ZnJywgJ3BuZycsICdqcGcnLCAnanBlZyddKS5pc1JlcXVpcmVkLFxuICAgICAgICAvKiogRGljdGlvbmFyeSBvZiBvcHRpb25zIHRvIGN5LnBuZygpIC8gY3kuanBnKCkgb3IgY3kuc3ZnKCkgZm9yIGltYWdlIGdlbmVyYXRpb24uXG4gICAgICAgICAqIFNlZSBodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI2NvcmUvZXhwb3J0IGZvciBkZXRhaWxzLiBGb3IgYCdvdXRwdXQnYCwgb25seSAnYmFzZTY0J1xuICAgICAgICAgKiBhbmQgJ2Jhc2U2NHVyaScgYXJlIHN1cHBvcnRlZC4gRGVmYXVsdDogYHsnb3V0cHV0JzogJ2Jhc2U2NHVyaSd9YC4qL1xuICAgICAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKipcbiAgICAgICAgICogYCdzdG9yZSdgOiBTdG9yZXMgdGhlIGltYWdlIGRhdGEgKG9ubHkganBnIGFuZCBwbmcgYXJlIHN1cHBvcnRlZClcbiAgICAgICAgICogaW4gYGltYWdlRGF0YWAgYW5kIGludm9rZXMgc2VydmVyLXNpZGUgRGFzaCBjYWxsYmFja3MuIGAnZG93bmxvYWQnYDogRG93bmxvYWRzIHRoZSBpbWFnZVxuICAgICAgICAgKiBhcyBhIGZpbGUgd2l0aCBhbGwgZGF0YSBoYW5kbGluZyBkb25lIGNsaWVudC1zaWRlLiBObyBgaW1hZ2VEYXRhYCBjYWxsYmFja3MgYXJlIGZpcmVkLlxuICAgICAgICAgKiBgJ2JvdGgnYDogU3RvcmVzIGltYWdlIGRhdGEgYW5kIGRvd25sb2FkcyBpbWFnZSBhcyBmaWxlLiBUaGUgZGVmYXVsdCBpcyBgJ3N0b3JlJ2BcbiAgICAgICAgICovXG4gICAgICAgIGFjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnc3RvcmUnLCAnZG93bmxvYWQnLCAnYm90aCddKSxcbiAgICAgICAgLyoqIE5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQuIERlZmF1bHQ6ICdjeXRvJy4qL1xuICAgICAgICBmaWxlbmFtZTogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbWFnZSByZXF1ZXN0ZWQgd2l0aCBnZW5lcmF0ZUltYWdlLiBOdWxsIGlmIG5vXG4gICAgICogaW1hZ2Ugd2FzIHJlcXVlc3RlZCB5ZXQgb3IgdGhlIHByZXZpb3VzIHJlcXVlc3QgZmFpbGVkLiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgaW1hZ2VEYXRhOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBpbnRlbGxpZ2VudCByZXNwb25zaXZlIHJlc2l6ZSBvZiBDeXRvc2NhcGUgZ3JhcGggd2l0aCB2aWV3cG9ydCBzaXplIGNoYW5nZVxuICAgICAqL1xuICAgIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBhbGxvdyB1c2VyIGludGVyYWN0aW9ucyBpbiB0aGlzIGNvbXBvbmVudCB0byBiZSBwZXJzaXN0ZWQgd2hlblxuICAgICAqIHRoZSBjb21wb25lbnQgLSBvciB0aGUgcGFnZSAtIGlzIHJlZnJlc2hlZC4gSWYgYHBlcnNpc3RlZGAgaXMgdHJ1dGh5IGFuZFxuICAgICAqIGhhc24ndCBjaGFuZ2VkIGZyb20gaXRzIHByZXZpb3VzIHZhbHVlLCBhbnkgYHBlcnNpc3RlZF9wcm9wc2AgdGhhdCB0aGVcbiAgICAgKiB1c2VyIGhhcyBjaGFuZ2VkIHdoaWxlIHVzaW5nIHRoZSBhcHAgd2lsbCBrZWVwIHRob3NlIGNoYW5nZXMsIGFzIGxvbmcgYXNcbiAgICAgKiB0aGUgbmV3IHByb3AgdmFsdWUgYWxzbyBtYXRjaGVzIHdoYXQgd2FzIGdpdmVuIG9yaWdpbmFsbHkuXG4gICAgICogVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBwZXJzaXN0ZW5jZV90eXBlYCBhbmQgYHBlcnNpc3RlZF9wcm9wc2AuXG4gICAgICovXG4gICAgcGVyc2lzdGVuY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgUHJvcFR5cGVzLm51bWJlcixcbiAgICBdKSxcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgd2hvc2UgdXNlciBpbnRlcmFjdGlvbnMgd2lsbCBwZXJzaXN0IGFmdGVyIHJlZnJlc2hpbmcgdGhlXG4gICAgICogY29tcG9uZW50IG9yIHRoZSBwYWdlLlxuICAgICAqL1xuICAgIHBlcnNpc3RlZF9wcm9wczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICAgIFByb3BUeXBlcy5vbmVPZihbJ2VsZW1lbnRzJywgJ3N0eWxlc2hlZXQnLCAnbGF5b3V0J10pXG4gICAgKSxcblxuICAgIC8qKlxuICAgICAqIFdoZXJlIHBlcnNpc3RlZCB1c2VyIGNoYW5nZXMgd2lsbCBiZSBzdG9yZWQ6XG4gICAgICogbWVtb3J5OiBvbmx5IGtlcHQgaW4gbWVtb3J5LCByZXNldCBvbiBwYWdlIHJlZnJlc2guXG4gICAgICogbG9jYWw6IHdpbmRvdy5sb2NhbFN0b3JhZ2UsIGRhdGEgaXMga2VwdCBhZnRlciB0aGUgYnJvd3NlciBxdWl0LlxuICAgICAqIHNlc3Npb246IHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgZGF0YSBpcyBjbGVhcmVkIG9uY2UgdGhlIGJyb3dzZXIgcXVpdC5cbiAgICAgKi9cbiAgICBwZXJzaXN0ZW5jZV90eXBlOiBQcm9wVHlwZXMub25lT2YoWydsb2NhbCcsICdzZXNzaW9uJywgJ21lbW9yeSddKSxcbn07XG5cbkN5dG9zY2FwZS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc3R5bGU6IHt3aWR0aDogJzYwMHB4JywgaGVpZ2h0OiAnNjAwcHgnfSxcbiAgICBsYXlvdXQ6IHtuYW1lOiAnZ3JpZCd9LFxuICAgIHBhbjoge3g6IDAsIHk6IDB9LFxuICAgIHpvb206IDEsXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IHRydWUsXG4gICAgcGFubmluZ0VuYWJsZWQ6IHRydWUsXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiB0cnVlLFxuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGF1dG9sb2NrOiBmYWxzZSxcbiAgICBhdXRvdW5ncmFiaWZ5OiBmYWxzZSxcbiAgICBhdXRvdW5zZWxlY3RpZnk6IGZhbHNlLFxuICAgIGF1dG9SZWZyZXNoTGF5b3V0OiB0cnVlLFxuICAgIGdlbmVyYXRlSW1hZ2U6IHt9LFxuICAgIGltYWdlRGF0YTogbnVsbCxcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICBlbGVtZW50czogW10sXG4gICAgcGVyc2lzdGVkX3Byb3BzOiBbXSxcbiAgICBwZXJzaXN0ZW5jZV90eXBlOiAnbG9jYWwnLFxufTtcblxuY29uc3QgZGVmYXVsdFBlcnNpc3RlbmNlVHJhbnNmb3JtID0ge1xuICAgIGV4dHJhY3Q6IHByb3BWYWx1ZSA9PiBwcm9wVmFsdWUsXG4gICAgYXBwbHk6IHN0b3JlZFZhbHVlID0+IHN0b3JlZFZhbHVlLFxufTtcblxuQ3l0b3NjYXBlLnBlcnNpc3RlbmNlVHJhbnNmb3JtcyA9IHtcbiAgICBlbGVtZW50czogZGVmYXVsdFBlcnNpc3RlbmNlVHJhbnNmb3JtLFxuICAgIHN0eWxlc2hlZXQ6IGRlZmF1bHRQZXJzaXN0ZW5jZVRyYW5zZm9ybSxcbiAgICBsYXlvdXQ6IGRlZmF1bHRQZXJzaXN0ZW5jZVRyYW5zZm9ybVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEN5dG9zY2FwZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/Cytoscape.react.js\n"); /***/ }), diff --git a/dash_cytoscape/dash_cytoscape.min.js b/dash_cytoscape/dash_cytoscape.min.js index 592195fe..7eb7513a 100644 --- a/dash_cytoscape/dash_cytoscape.min.js +++ b/dash_cytoscape/dash_cytoscape.min.js @@ -1,4 +1,4 @@ -window.dash_cytoscape=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=window.React},function(e,t,n){e.exports=n(5)()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Cytoscape=void 0;var r,i=n(4),a=(r=i)&&r.__esModule?r:{default:r};t.Cytoscape=a.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0&&(this.props.setProps({generateImage:{}}),this._cy&&this.handleImageGeneration(w.type,w.options,w.action,w.filename)),this.cyResponsiveClass&&this.cyResponsiveClass.toggle(_),a.default.createElement(s.default,{id:t,cy:this.handleCy,className:r,style:n,elements:s.default.normalizeElements(i),stylesheet:o,layout:u,pan:l,zoom:c,panningEnabled:d,userPanningEnabled:h,minZoom:f,maxZoom:p,zoomingEnabled:v,userZoomingEnabled:g,boxSelectionEnabled:y,autoungrabify:m,autolock:b,autounselectify:x})}}]),t}(i.Component);d.propTypes={id:o.default.string,className:o.default.string,style:o.default.object,setProps:o.default.func,elements:o.default.oneOfType([o.default.arrayOf(o.default.shape({group:o.default.string,data:o.default.shape({id:o.default.string,label:o.default.string,parent:o.default.string,source:o.default.string,target:o.default.string}),position:o.default.shape({x:o.default.number,y:o.default.number}),selected:o.default.bool,selectable:o.default.bool,locked:o.default.bool,grabbable:o.default.bool,classes:o.default.string})),o.default.exact({nodes:o.default.array,edges:o.default.array})]),stylesheet:o.default.arrayOf(o.default.exact({selector:o.default.string.isRequired,style:o.default.object.isRequired})),layout:o.default.shape({name:o.default.oneOf(["random","preset","circle","concentric","grid","breadthfirst","cose","close-bilkent","cola","euler","spread","dagre","klay"]).isRequired,fit:o.default.bool,padding:o.default.number,animate:o.default.bool,animationDuration:o.default.number,boundingBox:o.default.object}),pan:o.default.exact({x:o.default.number,y:o.default.number}),zoom:o.default.number,panningEnabled:o.default.bool,userPanningEnabled:o.default.bool,minZoom:o.default.number,maxZoom:o.default.number,zoomingEnabled:o.default.bool,userZoomingEnabled:o.default.bool,boxSelectionEnabled:o.default.bool,autoungrabify:o.default.bool,autolock:o.default.bool,autounselectify:o.default.bool,autoRefreshLayout:o.default.bool,tapNode:o.default.exact({edgesData:o.default.object,renderedPosition:o.default.object,timeStamp:o.default.number,classes:o.default.string,data:o.default.object,grabbable:o.default.bool,group:o.default.string,locked:o.default.bool,position:o.default.object,selectable:o.default.bool,selected:o.default.bool,style:o.default.object,ancestorsData:o.default.object,childrenData:o.default.object,descendantsData:o.default.object,parentData:o.default.object,siblingsData:o.default.object,isParent:o.default.bool,isChildless:o.default.bool,isChild:o.default.bool,isOrphan:o.default.bool,relativePosition:o.default.object}),tapNodeData:o.default.object,tapEdge:o.default.exact({isLoop:o.default.bool,isSimple:o.default.bool,midpoint:o.default.object,sourceData:o.default.object,sourceEndpoint:o.default.object,targetData:o.default.object,targetEndpoint:o.default.object,timeStamp:o.default.number,classes:o.default.string,data:o.default.object,grabbable:o.default.bool,group:o.default.string,locked:o.default.bool,selectable:o.default.bool,selected:o.default.bool,style:o.default.object}),tapEdgeData:o.default.object,mouseoverNodeData:o.default.object,mouseoverEdgeData:o.default.object,selectedNodeData:o.default.array,selectedEdgeData:o.default.array,generateImage:o.default.exact({type:o.default.oneOf(["svg","png","jpg","jpeg"]).isRequired,options:o.default.object,action:o.default.oneOf(["store","download","both"]),filename:o.default.string}),imageData:o.default.string,responsive:o.default.bool},d.defaultProps={style:{width:"600px",height:"600px"},layout:{name:"grid"},pan:{x:0,y:0},zoom:1,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:!0,userZoomingEnabled:!0,panningEnabled:!0,userPanningEnabled:!0,boxSelectionEnabled:!1,autolock:!1,autoungrabify:!1,autounselectify:!1,autoRefreshLayout:!0,generateImage:{},imageData:null,responsive:!1,elements:[]},t.default=d},function(e,t,n){"use strict";var r=n(6);function i(){}function a(){}a.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,a,o){if(o!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:i};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){var r,i,a,o;window,e.exports=(r=n(1),i=n(8),a=n(2),o=n(9),function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r({}),a=function(e,t){return null==e||null==t};t.hashDiff=function(e,t){return a(e,t)||e.hash()!==t.hash()},t.shallowObjDiff=function(e,t){if(a(e,t)&&(null!=e||null!=t))return!0;if(e===t)return!1;if((void 0===e?"undefined":r(e))!==i||(void 0===t?"undefined":r(t))!==i)return e!==t;var n=Object.keys(e),o=Object.keys(t),s=function(n){return e[n]!==t[n]};return n.length!==o.length||!(!n.some(s)&&!o.some(s))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.get=function(e,t){return null!=e?e[t]:null},t.toJson=function(e){return e},t.forEach=function(e,t){return e.forEach(t)}},function(e,t,n){"use strict";e.exports=n(3).default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0&&e.remove(u),s.length>0&&e.add(s),l.forEach((function(t){var n=t.ele1,a=t.ele2;return c(e,n,a,r,i,o)}))},c=function(e,t,n,r,i,a){var o=i(i(n,"data"),"id"),s=e.getElementById(o),u={};["data","position","selected","selectable","locked","grabbable","classes"].forEach((function(e){var o=i(n,e);a(o,i(t,e))&&(u[e]=r(o))}));var l=i(n,"scratch");a(l,i(t,"scratch"))&&s.scratch(r(l)),Object.keys(u).length>0&&s.json(u)}}]))},function(e,t){e.exports=window.ReactDOM},function(e,t,n){"use strict";(function(t){function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var i=r(n(13)),a=r(n(14));function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;nt?1:0},j=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var u=n[4];if(void 0!==u){if((u=parseFloat(u))<0||u>1)return;t.push(u)}}return t}(e)||function(e){var t,n,r,i,a,o,s,u;function l(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=u=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,h=2*i-d;o=Math.round(255*l(h,d,n+1/3)),s=Math.round(255*l(h,d,n)),u=Math.round(255*l(h,d,n-1/3))}t=[o,s,u,a]}return t}(e)},F={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},q=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:9261,r=n;!(t=e.next()).done;)r=r*K+t.value|0;return r},$=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9261;return t*K+e|0},Q=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5381;return(t<<5)+t+e|0},J=function(e){return 2097152*e[0]+e[1]},ee=function(e,t){return[$(e[0],t[0]),Q(e[1],t[1])]},te=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return G({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),n));r--);},we=function(e){e.splice(0,e.length)},_e=function(e,t,n){return n&&(t=A(n,t)),e[t]},Ee=function(e,t,n,r){n&&(t=A(n,t)),e[t]=r},ke="undefined"!=typeof Map?Map:function(){function e(){s(this,e),this._obj={}}return l(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Ce=function(){function e(t){if(s(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r0;){var k=m.pop(),C=g(k),S=k.id();if(h[S]=C,C!==1/0)for(var P=k.neighborhood().intersect(p),T=0;T0)for(n.unshift(t);d[i];){var a=d[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return s.spawn(n)}}}},ze={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t0;){if(l=g.pop(),c=l.id(),y.delete(c),_++,c===h){for(var E=[],k=i,C=h,S=b[C];E.unshift(k),null!=S&&E.unshift(S),null!=(k=m[C]);)S=b[C=k.id()];return{found:!0,distance:f[c],path:this.spawn(E),steps:_}}v[c]=!0;for(var P=l._private.edges,T=0;TP&&(f[S]=P,y[S]=C,m[S]=w),!i){var T=C*l+k;!i&&f[T]>P&&(f[T]=P,y[T]=k,m[T]=w)}}}for(var D=0;D1&&void 0!==arguments[1]?arguments[1]:a,r=y(e),i=[],o=r;;){if(null==o)return t.spawn();var u=g(o),l=u.edge,c=u.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=l&&i.unshift(l),o=c}return s.spawn(i)},hasNegativeWeightCycle:p,negativeWeightCycles:[]}}},je=Math.sqrt(2),Ve=function(e,t,n){0===n.length&&he("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],u=n,l=u.length-1;l>=0;l--){var c=u[l],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&u.splice(l,1)}for(var f=0;fr;){var i=Math.floor(Math.random()*t.length);t=Ve(i,e,t),n--}return t},qe={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/je);if(!(i<2)){for(var u=[],l=0;l0?1:e<0?-1:0},Ke=function(e,t){return Math.sqrt(Ge(e,t))},Ge=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},$e=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},nt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},rt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},it=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=d(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},at=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},ot=function(e,t){e.x1+=t.x,e.x2+=t.x,e.y1+=t.y,e.y2+=t.y},st=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},ut=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},lt=function(e,t){return ut(e,t.x1,t.y1)&&ut(e,t.x2,t.y2)},ct=function(e,t,n,r,i,a,o){var s,u=Tt(i,a),l=i/2,c=a/2,d=r-c-o;if((s=_t(e,t,n,r,n-l+u-o,d,n+l-u+o,d,!1)).length>0)return s;var h=n+l+o;if((s=_t(e,t,n,r,h,r-c+u-o,h,r+c-u+o,!1)).length>0)return s;var f=r+c+o;if((s=_t(e,t,n,r,n-l+u-o,f,n+l-u+o,f,!1)).length>0)return s;var p,v=n-l-o;if((s=_t(e,t,n,r,v,r-c+u-o,v,r+c-u+o,!1)).length>0)return s;var g=n-l+u,y=r-c+u;if((p=xt(e,t,n,r,g,y,u+o)).length>0&&p[0]<=g&&p[1]<=y)return[p[0],p[1]];var m=n+l-u,b=r-c+u;if((p=xt(e,t,n,r,m,b,u+o)).length>0&&p[0]>=m&&p[1]<=b)return[p[0],p[1]];var x=n+l-u,w=r+c-u;if((p=xt(e,t,n,r,x,w,u+o)).length>0&&p[0]>=x&&p[1]>=w)return[p[0],p[1]];var _=n-l+u,E=r+c-u;return(p=xt(e,t,n,r,_,E,u+o)).length>0&&p[0]<=_&&p[1]>=E?[p[0],p[1]]:[]},dt=function(e,t,n,r,i,a,o){var s=o,u=Math.min(n,i),l=Math.max(n,i),c=Math.min(r,a),d=Math.max(r,a);return u-s<=e&&e<=l+s&&c-s<=t&&t<=d+s},ht=function(e,t,n,r,i,a,o,s,u){var l=Math.min(n,o,i)-u,c=Math.max(n,o,i)+u,d=Math.min(r,s,a)-u,h=Math.max(r,s,a)+u;return!(ec||th)},ft=function(e,t,n,r,i,a,o,s){var u=[];!function(e,t,n,r,i){var a,o,s,u,l,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,d=t/3,a>0?(l=(l=s+Math.sqrt(a))<0?-Math.pow(-l,1/3):Math.pow(l,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+l+c,d+=(l+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+l)/2,i[3]=d,i[5]=-d):(i[5]=i[3]=0,0===a?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*h-d,i[4]=i[2]=-(h+d)):(u=(o=-o)*o*o,u=Math.acos(s/Math.sqrt(u)),h=2*Math.sqrt(o),i[0]=-d+h*Math.cos(u/3),i[2]=-d+h*Math.cos((u+2*Math.PI)/3),i[4]=-d+h*Math.cos((u+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,u);for(var l=[],c=0;c<6;c+=2)Math.abs(u[c+1])<1e-7&&u[c]>=0&&u[c]<=1&&l.push(u[c]);l.push(1),l.push(0);for(var d,h,f,p=-1,v=0;v=0?fu?(e-i)*(e-i)+(t-a)*(t-a):l-d},vt=function(e,t,n){for(var r,i,a,o,s=0,u=0;u=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},gt=function(e,t,n,r,i,a,o,s,u){var l,c=new Array(n.length);null!=s[0]?(l=Math.atan(s[1]/s[0]),s[0]<0?l+=Math.PI/2:l=-l-Math.PI/2):l=s;for(var d,h=Math.cos(-l),f=Math.sin(-l),p=0;p0){var v=mt(c,-u);d=yt(v)}else d=c;return vt(e,t,d)},yt=function(e){for(var t,n,r,i,a,o,s,u,l=new Array(e.length/2),c=0;c=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},wt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},_t=function(e,t,n,r,i,a,o,s,u){var l=e-i,c=n-e,d=o-i,h=t-a,f=r-t,p=s-a,v=d*h-p*l,g=c*h-f*l,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y;return-.001<=m&&m<=1.001&&-.001<=b&&b<=1.001||u?[e+m*c,t+m*f]:[]}return 0===v||0===g?wt(e,n,o)===o?[o,s]:wt(e,n,i)===i?[i,a]:wt(i,o,n)===n?[n,r]:[]:[]},Et=function(e,t,n,r,i,a,o,s){var u,l,c,d,h,f,p=[],v=new Array(n.length),g=!0;if(null==a&&(g=!1),g){for(var y=0;y0){var m=mt(v,-s);l=yt(m)}else l=v}else l=n;for(var b=0;bc&&(c=t)},h=function(e){return l[e]},f=0;f0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var _=r(w);b=b.id(),f[b]>f[y]+_&&(f[b]=f[y]+_,p.nodes.indexOf(b)<0?p.push(b):p.updateItem(b),c[b]=0,l[b]=[]),f[b]==f[y]+_&&(c[b]=c[b]+c[y],l[b].push(y))}else for(var E=0;E0;)for(var P=n.pop(),T=0;T0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,u,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:Kt,o=r,s=0;s=2?tn(e,t,n,0,Qt,Jt):tn(e,t,n,0,$t)},squaredEuclidean:function(e,t,n){return tn(e,t,n,0,Qt)},manhattan:function(e,t,n){return tn(e,t,n,0,$t)},max:function(e,t,n){return tn(e,t,n,-1/0,en)}};function rn(e,t,n,r,i,a){var o;return o=x(e)?e:nn[e]||nn.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}nn["squared-euclidean"]=nn.squaredEuclidean,nn.squaredeuclidean=nn.squaredEuclidean;var an=be({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),on=function(e){return an(e)},sn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return rn(e,r.length,a,(function(e){return r[e](t)}),o,s)},un=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,u=0;un)return!1}return!0},hn=function(e,t,n){for(var r=0;ri&&(i=t[u][l],a=l);o[a].push(e[u])}for(var c=0;c=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===i.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;gn[v.key][y.key]&&(a=n[v.key][y.key])):"max"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];r?e=e.slice(t,n):(n0&&e.splice(0,t));for(var o=0,s=e.length-1;s>=0;s--){var u=e[s];a?isFinite(u)||(e[s]=-1/0,o++):e.splice(s,1)}i&&e.sort((function(e,t){return e-t}));var l=e.length,c=Math.floor(l/2);return l%2!=0?e[c+1+o]:(e[c-1+o]+e[c+o])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;io&&(a=u,o=t[i*e+u])}a>0&&r.push(a)}for(var l=0;l=P?(T=P,P=B,D=M):B>T&&(T=B);for(var z=0;z0?1:0;k[_%l.minIterations*t+R]=j,L+=j}if(L>0&&(_>=l.minIterations-1||_==l.maxIterations-1)){for(var V=0,F=0;F0&&r.push(i);return r}(t,a,o),Y=function(e,t,n){for(var r=Tn(e,t,n),i=0;iu&&(s=l,u=c)}n[i]=a[s]}return r=Tn(e,t,n)}(t,r,W),X={},H=0;H1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},On=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e);return e.forEach((function(o){if(o.isNode()){var s=o.id();s in t||function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var u=e.spawn();;){var l=i.pop();if(u.merge(e.getElementById(l)),t[l].low=t[s].index,t[l].explored=!0,l===s)break}var c=u.edgesWith(u),d=u.merge(c);r.push(d),a=a.difference(d)}}(s)}})),{cut:a,components:r}},In={};[De,Me,ze,Ie,Ne,Re,qe,zt,It,Nt,Rt,Ut,mn,kn,Bn,{hierholzer:function(e){if(!_(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Mn(e),o=a.root,s=a.directed,u=this,l=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?u.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?l=!0:n=t:1==s?r?l=!0:r=t:(s>1||o>1)&&(l=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):u.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?l=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var h={found:!1,trail:void 0};if(l)return h;if(r&&n)if(s){if(i&&r!=i)return h;i=r}else{if(i&&r!=i&&n!=i)return h;i||(i=r)}else i||(i=u[0].id());var f=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=d[t][0],i!=(r=d[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},p=[],v=[];for(v=f(i);1!=v.length;)0==c[v[0]].length?(p.unshift(u.getElementById(v.shift())),p.unshift(u.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(u.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p),h}},{hopcroftTarjanBiconnected:zn,htbc:zn,htb:zn,hopcroftTarjanBiconnectedComponents:zn},{tarjanStronglyConnected:On,tsc:On,tscc:On,tarjanStronglyConnectedComponents:On}].forEach((function(e){j(In,e)})); +window.dash_cytoscape=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=window.React},function(e,t,n){e.exports=n(5)()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Cytoscape=void 0;var r,i=n(4),a=(r=i)&&r.__esModule?r:{default:r};t.Cytoscape=a.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0&&(this.props.setProps({generateImage:{}}),this._cy&&this.handleImageGeneration(w.type,w.options,w.action,w.filename)),this.cyResponsiveClass&&this.cyResponsiveClass.toggle(_),a.default.createElement(s.default,{id:t,cy:this.handleCy,className:r,style:n,elements:s.default.normalizeElements(i),stylesheet:o,layout:u,pan:l,zoom:c,panningEnabled:d,userPanningEnabled:h,minZoom:f,maxZoom:p,zoomingEnabled:v,userZoomingEnabled:g,boxSelectionEnabled:y,autoungrabify:m,autolock:b,autounselectify:x})}}]),t}(i.Component);d.propTypes={id:o.default.string,className:o.default.string,style:o.default.object,setProps:o.default.func,elements:o.default.oneOfType([o.default.arrayOf(o.default.shape({group:o.default.string,data:o.default.shape({id:o.default.string,label:o.default.string,parent:o.default.string,source:o.default.string,target:o.default.string}),position:o.default.shape({x:o.default.number,y:o.default.number}),selected:o.default.bool,selectable:o.default.bool,locked:o.default.bool,grabbable:o.default.bool,classes:o.default.string})),o.default.exact({nodes:o.default.array,edges:o.default.array})]),stylesheet:o.default.arrayOf(o.default.exact({selector:o.default.string.isRequired,style:o.default.object.isRequired})),layout:o.default.shape({name:o.default.oneOf(["random","preset","circle","concentric","grid","breadthfirst","cose","close-bilkent","cola","euler","spread","dagre","klay"]).isRequired,fit:o.default.bool,padding:o.default.number,animate:o.default.bool,animationDuration:o.default.number,boundingBox:o.default.object}),pan:o.default.exact({x:o.default.number,y:o.default.number}),zoom:o.default.number,panningEnabled:o.default.bool,userPanningEnabled:o.default.bool,minZoom:o.default.number,maxZoom:o.default.number,zoomingEnabled:o.default.bool,userZoomingEnabled:o.default.bool,boxSelectionEnabled:o.default.bool,autoungrabify:o.default.bool,autolock:o.default.bool,autounselectify:o.default.bool,autoRefreshLayout:o.default.bool,tapNode:o.default.exact({edgesData:o.default.object,renderedPosition:o.default.object,timeStamp:o.default.number,classes:o.default.string,data:o.default.object,grabbable:o.default.bool,group:o.default.string,locked:o.default.bool,position:o.default.object,selectable:o.default.bool,selected:o.default.bool,style:o.default.object,ancestorsData:o.default.object,childrenData:o.default.object,descendantsData:o.default.object,parentData:o.default.object,siblingsData:o.default.object,isParent:o.default.bool,isChildless:o.default.bool,isChild:o.default.bool,isOrphan:o.default.bool,relativePosition:o.default.object}),tapNodeData:o.default.object,tapEdge:o.default.exact({isLoop:o.default.bool,isSimple:o.default.bool,midpoint:o.default.object,sourceData:o.default.object,sourceEndpoint:o.default.object,targetData:o.default.object,targetEndpoint:o.default.object,timeStamp:o.default.number,classes:o.default.string,data:o.default.object,grabbable:o.default.bool,group:o.default.string,locked:o.default.bool,selectable:o.default.bool,selected:o.default.bool,style:o.default.object}),tapEdgeData:o.default.object,mouseoverNodeData:o.default.object,mouseoverEdgeData:o.default.object,selectedNodeData:o.default.array,selectedEdgeData:o.default.array,generateImage:o.default.exact({type:o.default.oneOf(["svg","png","jpg","jpeg"]).isRequired,options:o.default.object,action:o.default.oneOf(["store","download","both"]),filename:o.default.string}),imageData:o.default.string,responsive:o.default.bool,persistence:o.default.oneOfType([o.default.bool,o.default.string,o.default.number]),persisted_props:o.default.arrayOf(o.default.oneOf(["elements","stylesheet","layout"])),persistence_type:o.default.oneOf(["local","session","memory"])},d.defaultProps={style:{width:"600px",height:"600px"},layout:{name:"grid"},pan:{x:0,y:0},zoom:1,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:!0,userZoomingEnabled:!0,panningEnabled:!0,userPanningEnabled:!0,boxSelectionEnabled:!1,autolock:!1,autoungrabify:!1,autounselectify:!1,autoRefreshLayout:!0,generateImage:{},imageData:null,responsive:!1,elements:[],persisted_props:[],persistence_type:"local"};var h={extract:function(e){return e},apply:function(e){return e}};d.persistenceTransforms={elements:h,stylesheet:h,layout:h},t.default=d},function(e,t,n){"use strict";var r=n(6);function i(){}function a(){}a.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,a,o){if(o!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:i};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){var r,i,a,o;window,e.exports=(r=n(1),i=n(8),a=n(2),o=n(9),function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r({}),a=function(e,t){return null==e||null==t};t.hashDiff=function(e,t){return a(e,t)||e.hash()!==t.hash()},t.shallowObjDiff=function(e,t){if(a(e,t)&&(null!=e||null!=t))return!0;if(e===t)return!1;if((void 0===e?"undefined":r(e))!==i||(void 0===t?"undefined":r(t))!==i)return e!==t;var n=Object.keys(e),o=Object.keys(t),s=function(n){return e[n]!==t[n]};return n.length!==o.length||!(!n.some(s)&&!o.some(s))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.get=function(e,t){return null!=e?e[t]:null},t.toJson=function(e){return e},t.forEach=function(e,t){return e.forEach(t)}},function(e,t,n){"use strict";e.exports=n(3).default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0&&e.remove(u),s.length>0&&e.add(s),l.forEach((function(t){var n=t.ele1,a=t.ele2;return c(e,n,a,r,i,o)}))},c=function(e,t,n,r,i,a){var o=i(i(n,"data"),"id"),s=e.getElementById(o),u={};["data","position","selected","selectable","locked","grabbable","classes"].forEach((function(e){var o=i(n,e);a(o,i(t,e))&&(u[e]=r(o))}));var l=i(n,"scratch");a(l,i(t,"scratch"))&&s.scratch(r(l)),Object.keys(u).length>0&&s.json(u)}}]))},function(e,t){e.exports=window.ReactDOM},function(e,t,n){"use strict";(function(t){function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var i=r(n(13)),a=r(n(14));function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;nt?1:0},j=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var u=n[4];if(void 0!==u){if((u=parseFloat(u))<0||u>1)return;t.push(u)}}return t}(e)||function(e){var t,n,r,i,a,o,s,u;function l(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=u=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,h=2*i-d;o=Math.round(255*l(h,d,n+1/3)),s=Math.round(255*l(h,d,n)),u=Math.round(255*l(h,d,n-1/3))}t=[o,s,u,a]}return t}(e)},F={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},q=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:9261,r=n;!(t=e.next()).done;)r=r*K+t.value|0;return r},$=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9261;return t*K+e|0},Q=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5381;return(t<<5)+t+e|0},J=function(e){return 2097152*e[0]+e[1]},ee=function(e,t){return[$(e[0],t[0]),Q(e[1],t[1])]},te=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return G({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),n));r--);},we=function(e){e.splice(0,e.length)},_e=function(e,t,n){return n&&(t=A(n,t)),e[t]},Ee=function(e,t,n,r){n&&(t=A(n,t)),e[t]=r},ke="undefined"!=typeof Map?Map:function(){function e(){s(this,e),this._obj={}}return l(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Ce=function(){function e(t){if(s(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r0;){var k=m.pop(),C=g(k),S=k.id();if(h[S]=C,C!==1/0)for(var P=k.neighborhood().intersect(p),T=0;T0)for(n.unshift(t);d[i];){var a=d[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return s.spawn(n)}}}},ze={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t0;){if(l=g.pop(),c=l.id(),y.delete(c),_++,c===h){for(var E=[],k=i,C=h,S=b[C];E.unshift(k),null!=S&&E.unshift(S),null!=(k=m[C]);)S=b[C=k.id()];return{found:!0,distance:f[c],path:this.spawn(E),steps:_}}v[c]=!0;for(var P=l._private.edges,T=0;TP&&(f[S]=P,y[S]=C,m[S]=w),!i){var T=C*l+k;!i&&f[T]>P&&(f[T]=P,y[T]=k,m[T]=w)}}}for(var D=0;D1&&void 0!==arguments[1]?arguments[1]:a,r=y(e),i=[],o=r;;){if(null==o)return t.spawn();var u=g(o),l=u.edge,c=u.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=l&&i.unshift(l),o=c}return s.spawn(i)},hasNegativeWeightCycle:p,negativeWeightCycles:[]}}},je=Math.sqrt(2),Ve=function(e,t,n){0===n.length&&he("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],u=n,l=u.length-1;l>=0;l--){var c=u[l],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&u.splice(l,1)}for(var f=0;fr;){var i=Math.floor(Math.random()*t.length);t=Ve(i,e,t),n--}return t},qe={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/je);if(!(i<2)){for(var u=[],l=0;l0?1:e<0?-1:0},Ke=function(e,t){return Math.sqrt(Ge(e,t))},Ge=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},$e=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},nt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},rt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},it=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=d(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},at=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},ot=function(e,t){e.x1+=t.x,e.x2+=t.x,e.y1+=t.y,e.y2+=t.y},st=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},ut=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},lt=function(e,t){return ut(e,t.x1,t.y1)&&ut(e,t.x2,t.y2)},ct=function(e,t,n,r,i,a,o){var s,u=Tt(i,a),l=i/2,c=a/2,d=r-c-o;if((s=_t(e,t,n,r,n-l+u-o,d,n+l-u+o,d,!1)).length>0)return s;var h=n+l+o;if((s=_t(e,t,n,r,h,r-c+u-o,h,r+c-u+o,!1)).length>0)return s;var f=r+c+o;if((s=_t(e,t,n,r,n-l+u-o,f,n+l-u+o,f,!1)).length>0)return s;var p,v=n-l-o;if((s=_t(e,t,n,r,v,r-c+u-o,v,r+c-u+o,!1)).length>0)return s;var g=n-l+u,y=r-c+u;if((p=xt(e,t,n,r,g,y,u+o)).length>0&&p[0]<=g&&p[1]<=y)return[p[0],p[1]];var m=n+l-u,b=r-c+u;if((p=xt(e,t,n,r,m,b,u+o)).length>0&&p[0]>=m&&p[1]<=b)return[p[0],p[1]];var x=n+l-u,w=r+c-u;if((p=xt(e,t,n,r,x,w,u+o)).length>0&&p[0]>=x&&p[1]>=w)return[p[0],p[1]];var _=n-l+u,E=r+c-u;return(p=xt(e,t,n,r,_,E,u+o)).length>0&&p[0]<=_&&p[1]>=E?[p[0],p[1]]:[]},dt=function(e,t,n,r,i,a,o){var s=o,u=Math.min(n,i),l=Math.max(n,i),c=Math.min(r,a),d=Math.max(r,a);return u-s<=e&&e<=l+s&&c-s<=t&&t<=d+s},ht=function(e,t,n,r,i,a,o,s,u){var l=Math.min(n,o,i)-u,c=Math.max(n,o,i)+u,d=Math.min(r,s,a)-u,h=Math.max(r,s,a)+u;return!(ec||th)},ft=function(e,t,n,r,i,a,o,s){var u=[];!function(e,t,n,r,i){var a,o,s,u,l,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,d=t/3,a>0?(l=(l=s+Math.sqrt(a))<0?-Math.pow(-l,1/3):Math.pow(l,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+l+c,d+=(l+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+l)/2,i[3]=d,i[5]=-d):(i[5]=i[3]=0,0===a?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*h-d,i[4]=i[2]=-(h+d)):(u=(o=-o)*o*o,u=Math.acos(s/Math.sqrt(u)),h=2*Math.sqrt(o),i[0]=-d+h*Math.cos(u/3),i[2]=-d+h*Math.cos((u+2*Math.PI)/3),i[4]=-d+h*Math.cos((u+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,u);for(var l=[],c=0;c<6;c+=2)Math.abs(u[c+1])<1e-7&&u[c]>=0&&u[c]<=1&&l.push(u[c]);l.push(1),l.push(0);for(var d,h,f,p=-1,v=0;v=0?fu?(e-i)*(e-i)+(t-a)*(t-a):l-d},vt=function(e,t,n){for(var r,i,a,o,s=0,u=0;u=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},gt=function(e,t,n,r,i,a,o,s,u){var l,c=new Array(n.length);null!=s[0]?(l=Math.atan(s[1]/s[0]),s[0]<0?l+=Math.PI/2:l=-l-Math.PI/2):l=s;for(var d,h=Math.cos(-l),f=Math.sin(-l),p=0;p0){var v=mt(c,-u);d=yt(v)}else d=c;return vt(e,t,d)},yt=function(e){for(var t,n,r,i,a,o,s,u,l=new Array(e.length/2),c=0;c=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},wt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},_t=function(e,t,n,r,i,a,o,s,u){var l=e-i,c=n-e,d=o-i,h=t-a,f=r-t,p=s-a,v=d*h-p*l,g=c*h-f*l,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y;return-.001<=m&&m<=1.001&&-.001<=b&&b<=1.001||u?[e+m*c,t+m*f]:[]}return 0===v||0===g?wt(e,n,o)===o?[o,s]:wt(e,n,i)===i?[i,a]:wt(i,o,n)===n?[n,r]:[]:[]},Et=function(e,t,n,r,i,a,o,s){var u,l,c,d,h,f,p=[],v=new Array(n.length),g=!0;if(null==a&&(g=!1),g){for(var y=0;y0){var m=mt(v,-s);l=yt(m)}else l=v}else l=n;for(var b=0;bc&&(c=t)},h=function(e){return l[e]},f=0;f0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var _=r(w);b=b.id(),f[b]>f[y]+_&&(f[b]=f[y]+_,p.nodes.indexOf(b)<0?p.push(b):p.updateItem(b),c[b]=0,l[b]=[]),f[b]==f[y]+_&&(c[b]=c[b]+c[y],l[b].push(y))}else for(var E=0;E0;)for(var P=n.pop(),T=0;T0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,u,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:Kt,o=r,s=0;s=2?tn(e,t,n,0,Qt,Jt):tn(e,t,n,0,$t)},squaredEuclidean:function(e,t,n){return tn(e,t,n,0,Qt)},manhattan:function(e,t,n){return tn(e,t,n,0,$t)},max:function(e,t,n){return tn(e,t,n,-1/0,en)}};function rn(e,t,n,r,i,a){var o;return o=x(e)?e:nn[e]||nn.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}nn["squared-euclidean"]=nn.squaredEuclidean,nn.squaredeuclidean=nn.squaredEuclidean;var an=be({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),on=function(e){return an(e)},sn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return rn(e,r.length,a,(function(e){return r[e](t)}),o,s)},un=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,u=0;un)return!1}return!0},hn=function(e,t,n){for(var r=0;ri&&(i=t[u][l],a=l);o[a].push(e[u])}for(var c=0;c=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===i.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;gn[v.key][y.key]&&(a=n[v.key][y.key])):"max"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];r?e=e.slice(t,n):(n0&&e.splice(0,t));for(var o=0,s=e.length-1;s>=0;s--){var u=e[s];a?isFinite(u)||(e[s]=-1/0,o++):e.splice(s,1)}i&&e.sort((function(e,t){return e-t}));var l=e.length,c=Math.floor(l/2);return l%2!=0?e[c+1+o]:(e[c-1+o]+e[c+o])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;io&&(a=u,o=t[i*e+u])}a>0&&r.push(a)}for(var l=0;l=P?(T=P,P=B,D=M):B>T&&(T=B);for(var z=0;z0?1:0;k[_%l.minIterations*t+R]=j,L+=j}if(L>0&&(_>=l.minIterations-1||_==l.maxIterations-1)){for(var V=0,F=0;F0&&r.push(i);return r}(t,a,o),Y=function(e,t,n){for(var r=Tn(e,t,n),i=0;iu&&(s=l,u=c)}n[i]=a[s]}return r=Tn(e,t,n)}(t,r,W),X={},H=0;H1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},On=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e);return e.forEach((function(o){if(o.isNode()){var s=o.id();s in t||function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var u=e.spawn();;){var l=i.pop();if(u.merge(e.getElementById(l)),t[l].low=t[s].index,t[l].explored=!0,l===s)break}var c=u.edgesWith(u),d=u.merge(c);r.push(d),a=a.difference(d)}}(s)}})),{cut:a,components:r}},In={};[De,Me,ze,Ie,Ne,Re,qe,zt,It,Nt,Rt,Ut,mn,kn,Bn,{hierholzer:function(e){if(!_(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Mn(e),o=a.root,s=a.directed,u=this,l=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?u.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?l=!0:n=t:1==s?r?l=!0:r=t:(s>1||o>1)&&(l=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):u.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?l=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var h={found:!1,trail:void 0};if(l)return h;if(r&&n)if(s){if(i&&r!=i)return h;i=r}else{if(i&&r!=i&&n!=i)return h;i||(i=r)}else i||(i=u[0].id());var f=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=d[t][0],i!=(r=d[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},p=[],v=[];for(v=f(i);1!=v.length;)0==c[v[0]].length?(p.unshift(u.getElementById(v.shift())),p.unshift(u.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(u.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p),h}},{hopcroftTarjanBiconnected:zn,htbc:zn,htb:zn,hopcroftTarjanBiconnectedComponents:zn},{tarjanStronglyConnected:On,tsc:On,tscc:On,tarjanStronglyConnectedComponents:On}].forEach((function(e){j(In,e)})); /*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) diff --git a/dash_cytoscape/dash_cytoscape_extra.dev.js b/dash_cytoscape/dash_cytoscape_extra.dev.js index 52ee3b19..181cd609 100644 --- a/dash_cytoscape/dash_cytoscape_extra.dev.js +++ b/dash_cytoscape/dash_cytoscape_extra.dev.js @@ -3833,7 +3833,7 @@ eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactCytoscapejs = __webpack_require__(/*! react-cytoscapejs */ \"./node_modules/react-cytoscapejs/dist/react-cytoscape.js\");\n\nvar _reactCytoscapejs2 = _interopRequireDefault(_reactCytoscapejs);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _cyResponsive = __webpack_require__(/*! ../cyResponsive.js */ \"./src/lib/cyResponsive.js\");\n\nvar _cyResponsive2 = _interopRequireDefault(_cyResponsive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * JavaScript Requirements: cytoscape, cytoscape-svg\n * React.js requirements: react-cytoscapejs\n */\n\n\n/**\nA Component Library for Dash aimed at facilitating network visualization in\nPython, wrapped around [Cytoscape.js](http://js.cytoscape.org/).\n */\nvar Cytoscape = function (_Component) {\n _inherits(Cytoscape, _Component);\n\n function Cytoscape(props) {\n _classCallCheck(this, Cytoscape);\n\n var _this = _possibleConstructorReturn(this, (Cytoscape.__proto__ || Object.getPrototypeOf(Cytoscape)).call(this, props));\n\n _this.handleCy = _this.handleCy.bind(_this);\n _this._handleCyCalled = false;\n _this.handleImageGeneration = _this.handleImageGeneration.bind(_this);\n _this.cyResponsiveClass = false;\n return _this;\n }\n\n _createClass(Cytoscape, [{\n key: 'generateNode',\n value: function generateNode(event) {\n var ele = event.target;\n\n var isParent = ele.isParent(),\n isChildless = ele.isChildless(),\n isChild = ele.isChild(),\n isOrphan = ele.isOrphan(),\n renderedPosition = ele.renderedPosition(),\n relativePosition = ele.relativePosition(),\n parent = ele.parent(),\n style = ele.style();\n\n // Trim down the element objects to only the data contained\n var edgesData = ele.connectedEdges().map(function (ele) {\n return ele.data();\n }),\n childrenData = ele.children().map(function (ele) {\n return ele.data();\n }),\n ancestorsData = ele.ancestors().map(function (ele) {\n return ele.data();\n }),\n descendantsData = ele.descendants().map(function (ele) {\n return ele.data();\n }),\n siblingsData = ele.siblings().map(function (ele) {\n return ele.data();\n });\n\n var timeStamp = event.timeStamp;\n\n var _ele$json = ele.json(),\n classes = _ele$json.classes,\n data = _ele$json.data,\n grabbable = _ele$json.grabbable,\n group = _ele$json.group,\n locked = _ele$json.locked,\n position = _ele$json.position,\n selected = _ele$json.selected,\n selectable = _ele$json.selectable;\n\n var parentData = void 0;\n if (parent) {\n parentData = parent.data();\n } else {\n parentData = null;\n }\n\n var nodeObject = {\n // Nodes attributes\n edgesData: edgesData,\n renderedPosition: renderedPosition,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n position: position,\n selectable: selectable,\n selected: selected,\n // Compound Nodes additional attributes\n ancestorsData: ancestorsData,\n childrenData: childrenData,\n descendantsData: descendantsData,\n parentData: parentData,\n siblingsData: siblingsData,\n isParent: isParent,\n isChildless: isChildless,\n isChild: isChild,\n isOrphan: isOrphan,\n relativePosition: relativePosition,\n // Styling\n style: style\n };\n return nodeObject;\n }\n }, {\n key: 'generateEdge',\n value: function generateEdge(event) {\n var ele = event.target;\n\n var midpoint = ele.midpoint(),\n isLoop = ele.isLoop(),\n isSimple = ele.isSimple(),\n sourceData = ele.source().data(),\n sourceEndpoint = ele.sourceEndpoint(),\n style = ele.style(),\n targetData = ele.target().data(),\n targetEndpoint = ele.targetEndpoint();\n\n var timeStamp = event.timeStamp;\n\n var _ele$json2 = ele.json(),\n classes = _ele$json2.classes,\n data = _ele$json2.data,\n grabbable = _ele$json2.grabbable,\n group = _ele$json2.group,\n locked = _ele$json2.locked,\n selectable = _ele$json2.selectable,\n selected = _ele$json2.selected;\n\n var edgeObject = {\n // Edges attributes\n isLoop: isLoop,\n isSimple: isSimple,\n midpoint: midpoint,\n sourceData: sourceData,\n sourceEndpoint: sourceEndpoint,\n targetData: targetData,\n targetEndpoint: targetEndpoint,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n selectable: selectable,\n selected: selected,\n // Styling\n style: style\n };\n\n return edgeObject;\n }\n }, {\n key: 'handleCy',\n value: function handleCy(cy) {\n var _this2 = this;\n\n // If the cy pointer has not been modified, and handleCy has already\n // been called before, than we don't run this function.\n if (cy === this._cy && this._handleCyCalled) {\n return;\n }\n this._cy = cy;\n window.cy = cy;\n this._handleCyCalled = true;\n\n // ///////////////////////////////////// CONSTANTS /////////////////////////////////////////\n var SELECT_THRESHOLD = 100;\n\n var selectedNodes = cy.collection();\n var selectedEdges = cy.collection();\n\n // ///////////////////////////////////// FUNCTIONS /////////////////////////////////////////\n var refreshLayout = _lodash2.default.debounce(function () {\n /**\n * Refresh Layout if needed\n */\n var _props = _this2.props,\n autoRefreshLayout = _props.autoRefreshLayout,\n layout = _props.layout;\n\n\n if (autoRefreshLayout) {\n cy.layout(layout).run();\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedNodesData = _lodash2.default.debounce(function () {\n /**\n This function is repetitively called every time a node is selected\n or unselected, but keeps being debounced if it is called again\n within 100 ms (given by SELECT_THRESHOLD). Effectively, it only\n runs when all the nodes have been correctly selected/unselected and\n added/removed from the selectedNodes collection, and then updates\n the selectedNodeData prop.\n */\n var nodeData = selectedNodes.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedNodeData: nodeData\n });\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedEdgesData = _lodash2.default.debounce(function () {\n var edgeData = selectedEdges.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedEdgeData: edgeData\n });\n }\n }, SELECT_THRESHOLD);\n\n // /////////////////////////////////////// EVENTS //////////////////////////////////////////\n cy.on('tap', 'node', function (event) {\n var nodeObject = _this2.generateNode(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapNode: nodeObject,\n tapNodeData: nodeObject.data\n });\n }\n });\n\n cy.on('tap', 'edge', function (event) {\n var edgeObject = _this2.generateEdge(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapEdge: edgeObject,\n tapEdgeData: edgeObject.data\n });\n }\n });\n\n cy.on('mouseover', 'node', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverNodeData: event.target.data()\n });\n }\n });\n\n cy.on('mouseover', 'edge', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverEdgeData: event.target.data()\n });\n }\n });\n\n cy.on('select', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.merge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('unselect remove', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.unmerge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('select', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.merge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('unselect remove', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.unmerge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('add remove', function () {\n refreshLayout();\n });\n\n this.cyResponsiveClass = new _cyResponsive2.default(cy);\n this.cyResponsiveClass.toggle(this.props.responsive);\n }\n }, {\n key: 'handleImageGeneration',\n value: function handleImageGeneration(imageType, imageOptions, actionsToPerform, fileName) {\n var _this3 = this;\n\n var options = {};\n if (imageOptions) {\n options = imageOptions;\n }\n\n var desiredOutput = options.output;\n options.output = 'blob';\n\n var downloadImage = void 0;\n var storeImage = void 0;\n switch (actionsToPerform) {\n case 'store':\n downloadImage = false;\n storeImage = true;\n break;\n case 'download':\n downloadImage = true;\n storeImage = false;\n break;\n case 'both':\n downloadImage = true;\n storeImage = true;\n break;\n default:\n downloadImage = false;\n storeImage = true;\n break;\n }\n\n var output = void 0;\n if (imageType === 'png') {\n output = this._cy.png(options);\n }\n if (imageType === 'jpg' || imageType === 'jpeg') {\n output = this._cy.jpg(options);\n }\n // only works when svg is imported (see lib/extra_index.js)\n if (imageType === 'svg') {\n output = this._cy.svg(options);\n }\n\n /*\n * If output is empty because of bad options or a cytoscape error,\n * skip any download or storage steps.\n */\n if (output && downloadImage) {\n /*\n * Downloading is initiated client-side because the image is generated at\n * the client. This avoids transferring a potentially large image\n * to the server and back again through a callback.\n */\n var fName = fileName;\n if (!fileName) {\n fName = 'cyto';\n }\n\n if (imageType !== 'svg') {\n this.downloadBlob(output, fName + '.' + imageType);\n } else {\n var blob = new Blob([output], {\n type: 'image/svg+xml;charset=utf-8'\n });\n this.downloadBlob(blob, fName + '.' + imageType);\n }\n }\n\n if (output && storeImage) {\n // Default output type if unspecified\n if (!desiredOutput) {\n desiredOutput = 'base64uri';\n }\n\n if (!(desiredOutput === 'base64uri' || desiredOutput === 'base64')) {\n return;\n }\n\n /*\n * Convert blob to base64uri or base64 string to store the image data.\n * Thank you, base64guru https://base64.guru/developers/javascript/examples/encode-blob\n */\n var reader = new FileReader();\n reader.onload = function () {\n /* FileReader is asynchronous, so the read function is non-blocking.\n * If this code block is placed after the read command, it\n * may result in empty output because the blob has not been loaded yet.\n */\n var callbackData = reader.result;\n if (desiredOutput === 'base64') {\n callbackData = callbackData.replace(/^data:.+;base64,/, '');\n }\n _this3.props.setProps({ imageData: callbackData });\n };\n reader.readAsDataURL(output);\n }\n }\n }, {\n key: 'downloadBlob',\n value: function downloadBlob(blob, fileName) {\n /*\n * Download blob as file by dynamically creating link.\n * Chrome does not open data URLs when JS opens a new tab directed\n * at the data URL, so this is an alternate implementation\n * that doesn't require extra packages. It may not behave in\n * exactly the same way across browsers (might display image in new tab\n * intead of downloading as a file).\n * Thank you, koldev https://jsfiddle.net/koldev/cW7W5/\n */\n var downloadLink = document.createElement('a');\n downloadLink.style = 'display: none';\n document.body.appendChild(downloadLink);\n\n var url = window.URL.createObjectURL(blob);\n downloadLink.href = url;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(url);\n\n document.body.removeChild(downloadLink);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n style = _props2.style,\n className = _props2.className,\n elements = _props2.elements,\n stylesheet = _props2.stylesheet,\n layout = _props2.layout,\n pan = _props2.pan,\n zoom = _props2.zoom,\n panningEnabled = _props2.panningEnabled,\n userPanningEnabled = _props2.userPanningEnabled,\n minZoom = _props2.minZoom,\n maxZoom = _props2.maxZoom,\n zoomingEnabled = _props2.zoomingEnabled,\n userZoomingEnabled = _props2.userZoomingEnabled,\n boxSelectionEnabled = _props2.boxSelectionEnabled,\n autoungrabify = _props2.autoungrabify,\n autolock = _props2.autolock,\n autounselectify = _props2.autounselectify,\n generateImage = _props2.generateImage,\n responsive = _props2.responsive;\n\n\n if (Object.keys(generateImage).length > 0) {\n // If no cytoscape object has been created yet, an image cannot be generated,\n // so generateImage will be ignored and cleared.\n this.props.setProps({ generateImage: {} });\n if (this._cy) {\n this.handleImageGeneration(generateImage.type, generateImage.options, generateImage.action, generateImage.filename);\n }\n }\n\n if (this.cyResponsiveClass) {\n this.cyResponsiveClass.toggle(responsive);\n }\n\n return _react2.default.createElement(_reactCytoscapejs2.default, {\n id: id,\n cy: this.handleCy,\n className: className,\n style: style,\n elements: _reactCytoscapejs2.default.normalizeElements(elements),\n stylesheet: stylesheet,\n layout: layout,\n pan: pan,\n zoom: zoom,\n panningEnabled: panningEnabled,\n userPanningEnabled: userPanningEnabled,\n minZoom: minZoom,\n maxZoom: maxZoom,\n zoomingEnabled: zoomingEnabled,\n userZoomingEnabled: userZoomingEnabled,\n boxSelectionEnabled: boxSelectionEnabled,\n autoungrabify: autoungrabify,\n autolock: autolock,\n autounselectify: autounselectify\n });\n }\n }]);\n\n return Cytoscape;\n}(_react.Component);\n\nCytoscape.propTypes = {\n // HTML attribute props\n\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: _propTypes2.default.string,\n\n /**\n * Sets the class name of the element (the value of an element's html\n * class attribute).\n */\n className: _propTypes2.default.string,\n\n /**\n * Add inline styles to the root element.\n */\n style: _propTypes2.default.object,\n\n // Dash specific props\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: _propTypes2.default.func,\n\n // Common props\n\n /**\n * A list of dictionaries representing the elements of the networks. Each dictionary describes an element, and\n * specifies its purpose. The [official Cytoscape.js documentation](https://js.cytoscape.org/#notation/elements-json)\n * offers an extensive overview and examples of element declaration.\n * Alternatively, a dictionary with the format { 'nodes': [], 'edges': [] } is allowed at initialization,\n * but arrays remain the recommended format.\n */\n elements: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.shape({\n /**\n * Either 'nodes' or 'edges'. If not given, it's automatically inferred.\n */\n group: _propTypes2.default.string,\n /** Element specific data.*/\n data: _propTypes2.default.shape({\n /** Reference to the element, useful for selectors and edges. Randomly assigned if not given.*/\n id: _propTypes2.default.string,\n /**\n * Optional name for the element, useful when `data(label)` is given to a style's `content`\n * or `label`. It is only a convention. */\n label: _propTypes2.default.string,\n /** Only for nodes. Optional reference to another node. Needed to create compound nodes. */\n parent: _propTypes2.default.string,\n /** Only for edges. The id of the source node, which is where the edge starts. */\n source: _propTypes2.default.string,\n /** Only for edges. The id of the target node, where the edge ends. */\n target: _propTypes2.default.string\n }),\n /** Only for nodes. The position of the node. */\n position: _propTypes2.default.shape({\n /** The x-coordinate of the node. */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node. */\n y: _propTypes2.default.number\n }),\n /** If the element is selected upon initialisation. */\n selected: _propTypes2.default.bool,\n /** If the element can be selected. */\n selectable: _propTypes2.default.bool,\n /** Only for nodes. If the position is immutable. */\n locked: _propTypes2.default.bool,\n /** Only for nodes. If the node can be grabbed and moved by the user. */\n grabbable: _propTypes2.default.bool,\n /**\n * Space separated string of class names of the element. Those classes can be selected\n * by a style selector.\n */\n classes: _propTypes2.default.string\n })), _propTypes2.default.exact({\n nodes: _propTypes2.default.array,\n edges: _propTypes2.default.array\n })]),\n\n /**\n * A list of dictionaries representing the styles of the elements.\n * Each dictionary requires the following keys: `selector` and `style`.\n *\n * Both the [selector](https://js.cytoscape.org/#selectors) and\n * the [style](https://js.cytoscape.org/#style/node-body) are\n * exhaustively documented in the Cytoscape.js docs. Although methods such\n * as `cy.elements(...)` and `cy.filter(...)` are not available, the selector\n * string syntax stays the same.\n */\n stylesheet: _propTypes2.default.arrayOf(_propTypes2.default.exact({\n /**\n * Which elements you are styling. Generally, you select a group of elements (node, edges, both),\n * a class (that you declare in the element dictionary), or an element by ID.\n */\n selector: _propTypes2.default.string.isRequired,\n /**\n * What aspects of the elements you want to modify. This could be the size or\n * color of a node, the shape of an edge arrow, or many more.\n */\n style: _propTypes2.default.object.isRequired\n })),\n\n /**\n * A dictionary specifying how to set the position of the elements in your\n * graph. The `'name'` key is required, and indicates which layout (algorithm) to\n * use. The keys accepted by `layout` vary depending on the algorithm, but these\n * keys are accepted by all layouts: `fit`, `padding`, `animate`, `animationDuration`,\n * `boundingBox`.\n *\n * The complete list of layouts and their accepted options are available on the\n * [Cytoscape.js docs](https://js.cytoscape.org/#layouts) . For the external layouts,\n * the options are listed in the \"API\" section of the README.\n * Note that certain keys are not supported in Dash since the value is a JavaScript\n * function or a callback. Please visit this\n * [issue](https://github.com/plotly/dash-cytoscape/issues/25) for more information.\n */\n layout: _propTypes2.default.shape({\n /**\n * The layouts available by default are:\n * `random`: Randomly assigns positions.\n * `preset`: Assigns position based on the `position` key in element dictionaries.\n * `circle`: Single-level circle, with optional radius.\n * `concentric`: Multi-level circle, with optional radius.\n * `grid`: Square grid, optionally with numbers of `rows` and `cols`.\n * `breadthfirst`: Tree structure built using BFS, with optional `roots`.\n * `cose`: Force-directed physics simulation.\n *\n * Some external layouts are also included. To use them, run\n * `dash_cytoscape.load_extra_layouts()` before creating your Dash app. Be careful about\n * using the extra layouts when not necessary, since they require supplementary bandwidth\n * for loading, which impacts the startup time of the app.\n * The external layouts are:\n * [cose-bilkent](https://github.com/cytoscape/cytoscape.js-cose-bilkent),\n * [cola](https://github.com/cytoscape/cytoscape.js-cola),\n * [euler](https://github.com/cytoscape/cytoscape.js-dagre),\n * [spread](https://github.com/cytoscape/cytoscape.js-spread),\n * [dagre](https://github.com/cytoscape/cytoscape.js-dagre),\n * [klay](https://github.com/cytoscape/cytoscape.js-klay),\n */\n name: _propTypes2.default.oneOf(['random', 'preset', 'circle', 'concentric', 'grid', 'breadthfirst', 'cose', 'close-bilkent', 'cola', 'euler', 'spread', 'dagre', 'klay']).isRequired,\n /** Whether to render the nodes in order to fit the canvas. */\n fit: _propTypes2.default.bool,\n /** Padding around the sides of the canvas, if fit is enabled. */\n padding: _propTypes2.default.number,\n /** Whether to animate change in position when the layout changes. */\n animate: _propTypes2.default.bool,\n /** Duration of animation in milliseconds, if enabled. */\n animationDuration: _propTypes2.default.number,\n /**\n * How to constrain the layout in a specific area. Keys accepted are either\n * `x1, y1, x2, y2` or `x1, y1, w, h`, all of which receive a pixel value.\n */\n boundingBox: _propTypes2.default.object\n }),\n\n // Viewport Manipulation\n\n /**\n * Dictionary indicating the initial panning position of the graph. The\n * following keys are accepted:\n */\n pan: _propTypes2.default.exact({\n /** The x-coordinate of the node */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node */\n y: _propTypes2.default.number\n }),\n\n /**\n * The initial zoom level of the graph. You can set `minZoom` and\n * `maxZoom` to set restrictions on the zoom level.\n */\n zoom: _propTypes2.default.number,\n\n // Viewport Mutability and gesture Toggling\n /**\n * Whether panning the graph is enabled (i.e., the position of the graph is\n * mutable overall).\n */\n panningEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed to\n * pan the graph.\n */\n userPanningEnabled: _propTypes2.default.bool,\n\n /**\n * A minimum bound on the zoom level of the graph. The viewport can not be\n * scaled smaller than this zoom level.\n */\n minZoom: _propTypes2.default.number,\n\n /**\n * A maximum bound on the zoom level of the graph. The viewport can not be\n * scaled larger than this zoom level.\n */\n maxZoom: _propTypes2.default.number,\n\n /**\n * Whether zooming the graph is enabled (i.e., the zoom level of the graph\n * is mutable overall).\n */\n zoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed\n * to pan the graph.\n */\n userZoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether box selection (i.e. drag a box overlay around, and release it\n * to select) is enabled. If enabled, the user must taphold to pan the graph.\n */\n boxSelectionEnabled: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be ungrabified (not grabbable by user) by\n * default (if true, overrides individual node state).\n */\n autoungrabify: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be locked (not draggable at all) by default\n * (if true, overrides individual node state).\n */\n autolock: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be unselectified (immutable selection state) by\n * default (if true, overrides individual element state).\n */\n autounselectify: _propTypes2.default.bool,\n\n /**\n * Whether the layout should be refreshed when elements are added or removed.\n */\n autoRefreshLayout: _propTypes2.default.bool,\n\n // User Events Props\n\n /**\n * The complete node dictionary returned when you tap or click it. Read-only.\n */\n tapNode: _propTypes2.default.exact({\n /** node specific item */\n edgesData: _propTypes2.default.object,\n /** node specific item */\n renderedPosition: _propTypes2.default.object,\n /** node specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n position: _propTypes2.default.object,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object,\n /** Item for compound nodes */\n ancestorsData: _propTypes2.default.object,\n /** Item for compound nodes */\n childrenData: _propTypes2.default.object,\n /** Item for compound nodes */\n descendantsData: _propTypes2.default.object,\n /** Item for compound nodes */\n parentData: _propTypes2.default.object,\n /** Item for compound nodes */\n siblingsData: _propTypes2.default.object,\n /** Item for compound nodes */\n isParent: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChildless: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChild: _propTypes2.default.bool,\n /** Item for compound nodes */\n isOrphan: _propTypes2.default.bool,\n /** Item for compound nodes */\n relativePosition: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of a node returned when you tap or click it. Read-only.\n */\n tapNodeData: _propTypes2.default.object,\n\n /**\n * The complete edge dictionary returned when you tap or click it. Read-only.\n */\n tapEdge: _propTypes2.default.exact({\n /** Edge-specific item */\n isLoop: _propTypes2.default.bool,\n /** Edge-specific item */\n isSimple: _propTypes2.default.bool,\n /** Edge-specific item */\n midpoint: _propTypes2.default.object,\n /** Edge-specific item */\n sourceData: _propTypes2.default.object,\n /** Edge-specific item */\n sourceEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n targetData: _propTypes2.default.object,\n /** Edge-specific item */\n targetEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of an edge returned when you tap or click it. Read-only.\n */\n tapEdgeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of a node returned when you hover over it. Read-only.\n */\n mouseoverNodeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of an edge returned when you hover over it. Read-only.\n */\n mouseoverEdgeData: _propTypes2.default.object,\n\n /**\n * The list of data dictionaries of all selected nodes (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedNodeData: _propTypes2.default.array,\n\n /**\n * The list of data dictionaries of all selected edges (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedEdgeData: _propTypes2.default.array,\n\n /**\n * Dictionary specifying options to generate an image of the current cytoscape graph.\n * Value is cleared after data is received and image is generated. This property will\n * be ignored on the initial creation of the cytoscape object and must be invoked through\n * a callback after it has been rendered.\n *\n * If the app does not need the image data server side and/or it will only be used to download\n * the image, it may be prudent to invoke `'download'` for `action` instead of\n * `'store'` to improve performance by preventing transfer of data to the server.\n */\n generateImage: _propTypes2.default.exact({\n /** File type to output */\n type: _propTypes2.default.oneOf(['svg', 'png', 'jpg', 'jpeg']).isRequired,\n /** Dictionary of options to cy.png() / cy.jpg() or cy.svg() for image generation.\n * See https://js.cytoscape.org/#core/export for details. For `'output'`, only 'base64'\n * and 'base64uri' are supported. Default: `{'output': 'base64uri'}`.*/\n options: _propTypes2.default.object,\n /**\n * `'store'`: Stores the image data (only jpg and png are supported)\n * in `imageData` and invokes server-side Dash callbacks. `'download'`: Downloads the image\n * as a file with all data handling done client-side. No `imageData` callbacks are fired.\n * `'both'`: Stores image data and downloads image as file. The default is `'store'`\n */\n action: _propTypes2.default.oneOf(['store', 'download', 'both']),\n /** Name for the file to be downloaded. Default: 'cyto'.*/\n filename: _propTypes2.default.string\n }),\n\n /**\n * String representation of the image requested with generateImage. Null if no\n * image was requested yet or the previous request failed. Read-only.\n */\n imageData: _propTypes2.default.string,\n\n /**\n * Toggles intelligent responsive resize of Cytoscape graph with viewport size change\n */\n responsive: _propTypes2.default.bool\n};\n\nCytoscape.defaultProps = {\n style: { width: '600px', height: '600px' },\n layout: { name: 'grid' },\n pan: { x: 0, y: 0 },\n zoom: 1,\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: true,\n userZoomingEnabled: true,\n panningEnabled: true,\n userPanningEnabled: true,\n boxSelectionEnabled: false,\n autolock: false,\n autoungrabify: false,\n autounselectify: false,\n autoRefreshLayout: true,\n generateImage: {},\n imageData: null,\n responsive: false,\n elements: []\n};\n\nexports.default = Cytoscape;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXNoX2N5dG9zY2FwZS8uL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanM/NjQyYyJdLCJuYW1lcyI6WyJDeXRvc2NhcGUiLCJwcm9wcyIsImhhbmRsZUN5IiwiYmluZCIsIl9oYW5kbGVDeUNhbGxlZCIsImhhbmRsZUltYWdlR2VuZXJhdGlvbiIsImN5UmVzcG9uc2l2ZUNsYXNzIiwiZXZlbnQiLCJlbGUiLCJ0YXJnZXQiLCJpc1BhcmVudCIsImlzQ2hpbGRsZXNzIiwiaXNDaGlsZCIsImlzT3JwaGFuIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbGF0aXZlUG9zaXRpb24iLCJwYXJlbnQiLCJzdHlsZSIsImVkZ2VzRGF0YSIsImNvbm5lY3RlZEVkZ2VzIiwibWFwIiwiZGF0YSIsImNoaWxkcmVuRGF0YSIsImNoaWxkcmVuIiwiYW5jZXN0b3JzRGF0YSIsImFuY2VzdG9ycyIsImRlc2NlbmRhbnRzRGF0YSIsImRlc2NlbmRhbnRzIiwic2libGluZ3NEYXRhIiwic2libGluZ3MiLCJ0aW1lU3RhbXAiLCJqc29uIiwiY2xhc3NlcyIsImdyYWJiYWJsZSIsImdyb3VwIiwibG9ja2VkIiwicG9zaXRpb24iLCJzZWxlY3RlZCIsInNlbGVjdGFibGUiLCJwYXJlbnREYXRhIiwibm9kZU9iamVjdCIsIm1pZHBvaW50IiwiaXNMb29wIiwiaXNTaW1wbGUiLCJzb3VyY2VEYXRhIiwic291cmNlIiwic291cmNlRW5kcG9pbnQiLCJ0YXJnZXREYXRhIiwidGFyZ2V0RW5kcG9pbnQiLCJlZGdlT2JqZWN0IiwiY3kiLCJfY3kiLCJ3aW5kb3ciLCJTRUxFQ1RfVEhSRVNIT0xEIiwic2VsZWN0ZWROb2RlcyIsImNvbGxlY3Rpb24iLCJzZWxlY3RlZEVkZ2VzIiwicmVmcmVzaExheW91dCIsIl8iLCJkZWJvdW5jZSIsImF1dG9SZWZyZXNoTGF5b3V0IiwibGF5b3V0IiwicnVuIiwic2VuZFNlbGVjdGVkTm9kZXNEYXRhIiwibm9kZURhdGEiLCJlbCIsInNldFByb3BzIiwic2VsZWN0ZWROb2RlRGF0YSIsInNlbmRTZWxlY3RlZEVkZ2VzRGF0YSIsImVkZ2VEYXRhIiwic2VsZWN0ZWRFZGdlRGF0YSIsIm9uIiwiZ2VuZXJhdGVOb2RlIiwidGFwTm9kZSIsInRhcE5vZGVEYXRhIiwiZ2VuZXJhdGVFZGdlIiwidGFwRWRnZSIsInRhcEVkZ2VEYXRhIiwibW91c2VvdmVyTm9kZURhdGEiLCJtb3VzZW92ZXJFZGdlRGF0YSIsIm1lcmdlIiwidW5tZXJnZSIsIkN5UmVzcG9uc2l2ZSIsInRvZ2dsZSIsInJlc3BvbnNpdmUiLCJpbWFnZVR5cGUiLCJpbWFnZU9wdGlvbnMiLCJhY3Rpb25zVG9QZXJmb3JtIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiZGVzaXJlZE91dHB1dCIsIm91dHB1dCIsImRvd25sb2FkSW1hZ2UiLCJzdG9yZUltYWdlIiwicG5nIiwianBnIiwic3ZnIiwiZk5hbWUiLCJkb3dubG9hZEJsb2IiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiY2FsbGJhY2tEYXRhIiwicmVzdWx0IiwicmVwbGFjZSIsImltYWdlRGF0YSIsInJlYWRBc0RhdGFVUkwiLCJkb3dubG9hZExpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJocmVmIiwiZG93bmxvYWQiLCJjbGljayIsInJldm9rZU9iamVjdFVSTCIsInJlbW92ZUNoaWxkIiwiaWQiLCJjbGFzc05hbWUiLCJlbGVtZW50cyIsInN0eWxlc2hlZXQiLCJwYW4iLCJ6b29tIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG91bmdyYWJpZnkiLCJhdXRvbG9jayIsImF1dG91bnNlbGVjdGlmeSIsImdlbmVyYXRlSW1hZ2UiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYWN0aW9uIiwiZmlsZW5hbWUiLCJDeXRvc2NhcGVDb21wb25lbnQiLCJub3JtYWxpemVFbGVtZW50cyIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm9iamVjdCIsImZ1bmMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwic2hhcGUiLCJsYWJlbCIsIngiLCJudW1iZXIiLCJ5IiwiYm9vbCIsImV4YWN0Iiwibm9kZXMiLCJhcnJheSIsImVkZ2VzIiwic2VsZWN0b3IiLCJpc1JlcXVpcmVkIiwibmFtZSIsIm9uZU9mIiwiZml0IiwicGFkZGluZyIsImFuaW1hdGUiLCJhbmltYXRpb25EdXJhdGlvbiIsImJvdW5kaW5nQm94IiwiZGVmYXVsdFByb3BzIiwid2lkdGgiLCJoZWlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBSUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7Ozs7Ozs7OzsrZUFUQTs7Ozs7O0FBV0E7Ozs7SUFJTUEsUzs7O0FBQ0YsdUJBQVlDLEtBQVosRUFBbUI7QUFBQTs7QUFBQSwwSEFDVEEsS0FEUzs7QUFHZixjQUFLQyxRQUFMLEdBQWdCLE1BQUtBLFFBQUwsQ0FBY0MsSUFBZCxPQUFoQjtBQUNBLGNBQUtDLGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxjQUFLQyxxQkFBTCxHQUE2QixNQUFLQSxxQkFBTCxDQUEyQkYsSUFBM0IsT0FBN0I7QUFDQSxjQUFLRyxpQkFBTCxHQUF5QixLQUF6QjtBQU5lO0FBT2xCOzs7O3FDQUVZQyxLLEVBQU87QUFDaEIsZ0JBQU1DLE1BQU1ELE1BQU1FLE1BQWxCOztBQUVBLGdCQUFNQyxXQUFXRixJQUFJRSxRQUFKLEVBQWpCO0FBQUEsZ0JBQ0lDLGNBQWNILElBQUlHLFdBQUosRUFEbEI7QUFBQSxnQkFFSUMsVUFBVUosSUFBSUksT0FBSixFQUZkO0FBQUEsZ0JBR0lDLFdBQVdMLElBQUlLLFFBQUosRUFI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UixFQUFlLEtBQWYsRUFBc0IsTUFBdEIsQ0FBaEIsRUFBK0NGLFVBRjFCO0FBRzNCOzs7QUFHQTdFLGlCQUFTNEQsb0JBQVVFLE1BTlE7QUFPM0I7Ozs7OztBQU1BUixnQkFBUU0sb0JBQVVtQixLQUFWLENBQWdCLENBQUMsT0FBRCxFQUFVLFVBQVYsRUFBc0IsTUFBdEIsQ0FBaEIsQ0FibUI7QUFjM0I7QUFDQXhCLGtCQUFVSyxvQkFBVUM7QUFmTyxLQUFoQixDQTNZRzs7QUE2WmxCOzs7O0FBSUExQyxlQUFXeUMsb0JBQVVDLE1BamFIOztBQW1hbEI7OztBQUdBbEUsZ0JBQVlpRSxvQkFBVVc7QUF0YUosQ0FBdEI7O0FBeWFBaEssVUFBVThLLFlBQVYsR0FBeUI7QUFDckI3SixXQUFPLEVBQUM4SixPQUFPLE9BQVIsRUFBaUJDLFFBQVEsT0FBekIsRUFEYztBQUVyQm5ILFlBQVEsRUFBQzBHLE1BQU0sTUFBUCxFQUZhO0FBR3JCeEMsU0FBSyxFQUFDOEIsR0FBRyxDQUFKLEVBQU9FLEdBQUcsQ0FBVixFQUhnQjtBQUlyQi9CLFVBQU0sQ0FKZTtBQUtyQkcsYUFBUyxLQUxZO0FBTXJCQyxhQUFTLElBTlk7QUFPckJDLG9CQUFnQixJQVBLO0FBUXJCQyx3QkFBb0IsSUFSQztBQVNyQkwsb0JBQWdCLElBVEs7QUFVckJDLHdCQUFvQixJQVZDO0FBV3JCSyx5QkFBcUIsS0FYQTtBQVlyQkUsY0FBVSxLQVpXO0FBYXJCRCxtQkFBZSxLQWJNO0FBY3JCRSxxQkFBaUIsS0FkSTtBQWVyQjlFLHVCQUFtQixJQWZFO0FBZ0JyQitFLG1CQUFlLEVBaEJNO0FBaUJyQi9CLGVBQVcsSUFqQlU7QUFrQnJCeEIsZ0JBQVksS0FsQlM7QUFtQnJCeUMsY0FBVTtBQW5CVyxDQUF6Qjs7a0JBc0JlN0gsUyIsImZpbGUiOiIuL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEphdmFTY3JpcHQgUmVxdWlyZW1lbnRzOiBjeXRvc2NhcGUsIGN5dG9zY2FwZS1zdmdcbiAqIFJlYWN0LmpzIHJlcXVpcmVtZW50czogcmVhY3QtY3l0b3NjYXBlanNcbiAqL1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEN5dG9zY2FwZUNvbXBvbmVudCBmcm9tICdyZWFjdC1jeXRvc2NhcGVqcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgQ3lSZXNwb25zaXZlIGZyb20gJy4uL2N5UmVzcG9uc2l2ZS5qcyc7XG5cbi8qKlxuQSBDb21wb25lbnQgTGlicmFyeSBmb3IgRGFzaCBhaW1lZCBhdCBmYWNpbGl0YXRpbmcgbmV0d29yayB2aXN1YWxpemF0aW9uIGluXG5QeXRob24sIHdyYXBwZWQgYXJvdW5kIFtDeXRvc2NhcGUuanNdKGh0dHA6Ly9qcy5jeXRvc2NhcGUub3JnLykuXG4gKi9cbmNsYXNzIEN5dG9zY2FwZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ3kgPSB0aGlzLmhhbmRsZUN5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUN5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uID0gdGhpcy5oYW5kbGVJbWFnZUdlbmVyYXRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdlbmVyYXRlTm9kZShldmVudCkge1xuICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgY29uc3QgaXNQYXJlbnQgPSBlbGUuaXNQYXJlbnQoKSxcbiAgICAgICAgICAgIGlzQ2hpbGRsZXNzID0gZWxlLmlzQ2hpbGRsZXNzKCksXG4gICAgICAgICAgICBpc0NoaWxkID0gZWxlLmlzQ2hpbGQoKSxcbiAgICAgICAgICAgIGlzT3JwaGFuID0gZWxlLmlzT3JwaGFuKCksXG4gICAgICAgICAgICByZW5kZXJlZFBvc2l0aW9uID0gZWxlLnJlbmRlcmVkUG9zaXRpb24oKSxcbiAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24gPSBlbGUucmVsYXRpdmVQb3NpdGlvbigpLFxuICAgICAgICAgICAgcGFyZW50ID0gZWxlLnBhcmVudCgpLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGUuc3R5bGUoKTtcblxuICAgICAgICAvLyBUcmltIGRvd24gdGhlIGVsZW1lbnQgb2JqZWN0cyB0byBvbmx5IHRoZSBkYXRhIGNvbnRhaW5lZFxuICAgICAgICBjb25zdCBlZGdlc0RhdGEgPSBlbGUuY29ubmVjdGVkRWRnZXMoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhID0gZWxlLmNoaWxkcmVuKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGFuY2VzdG9yc0RhdGEgPSBlbGUuYW5jZXN0b3JzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzRGF0YSA9IGVsZS5kZXNjZW5kYW50cygpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaWJsaW5nc0RhdGEgPSBlbGUuc2libGluZ3MoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHt0aW1lU3RhbXB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZ3JhYmJhYmxlLFxuICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgICBsb2NrZWQsXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZVxuICAgICAgICB9ID0gZWxlLmpzb24oKTtcblxuICAgICAgICBsZXQgcGFyZW50RGF0YTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnREYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGVPYmplY3QgPSB7XG4gICAgICAgICAgICAvLyBOb2RlcyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBlZGdlc0RhdGEsXG4gICAgICAgICAgICByZW5kZXJlZFBvc2l0aW9uLFxuICAgICAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICAgICAgLy8gRnJvbSBlbGUuanNvbigpXG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBzZWxlY3RhYmxlLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAvLyBDb21wb3VuZCBOb2RlcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGFuY2VzdG9yc0RhdGEsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGEsXG4gICAgICAgICAgICBkZXNjZW5kYW50c0RhdGEsXG4gICAgICAgICAgICBwYXJlbnREYXRhLFxuICAgICAgICAgICAgc2libGluZ3NEYXRhLFxuICAgICAgICAgICAgaXNQYXJlbnQsXG4gICAgICAgICAgICBpc0NoaWxkbGVzcyxcbiAgICAgICAgICAgIGlzQ2hpbGQsXG4gICAgICAgICAgICBpc09ycGhhbixcbiAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24sXG4gICAgICAgICAgICAvLyBTdHlsaW5nXG4gICAgICAgICAgICBzdHlsZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbm9kZU9iamVjdDtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUVkZ2UoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IG1pZHBvaW50ID0gZWxlLm1pZHBvaW50KCksXG4gICAgICAgICAgICBpc0xvb3AgPSBlbGUuaXNMb29wKCksXG4gICAgICAgICAgICBpc1NpbXBsZSA9IGVsZS5pc1NpbXBsZSgpLFxuICAgICAgICAgICAgc291cmNlRGF0YSA9IGVsZS5zb3VyY2UoKS5kYXRhKCksXG4gICAgICAgICAgICBzb3VyY2VFbmRwb2ludCA9IGVsZS5zb3VyY2VFbmRwb2ludCgpLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGUuc3R5bGUoKSxcbiAgICAgICAgICAgIHRhcmdldERhdGEgPSBlbGUudGFyZ2V0KCkuZGF0YSgpLFxuICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKTtcblxuICAgICAgICBjb25zdCB7dGltZVN0YW1wfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgIH0gPSBlbGUuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IGVkZ2VPYmplY3QgPSB7XG4gICAgICAgICAgICAvLyBFZGdlcyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpc0xvb3AsXG4gICAgICAgICAgICBpc1NpbXBsZSxcbiAgICAgICAgICAgIG1pZHBvaW50LFxuICAgICAgICAgICAgc291cmNlRGF0YSxcbiAgICAgICAgICAgIHNvdXJjZUVuZHBvaW50LFxuICAgICAgICAgICAgdGFyZ2V0RGF0YSxcbiAgICAgICAgICAgIHRhcmdldEVuZHBvaW50LFxuICAgICAgICAgICAgdGltZVN0YW1wLFxuICAgICAgICAgICAgLy8gRnJvbSBlbGUuanNvbigpXG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgLy8gU3R5bGluZ1xuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZWRnZU9iamVjdDtcbiAgICB9XG5cbiAgICBoYW5kbGVDeShjeSkge1xuICAgICAgICAvLyBJZiB0aGUgY3kgcG9pbnRlciBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIGFuZCBoYW5kbGVDeSBoYXMgYWxyZWFkeVxuICAgICAgICAvLyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoYW4gd2UgZG9uJ3QgcnVuIHRoaXMgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjeSA9PT0gdGhpcy5fY3kgJiYgdGhpcy5faGFuZGxlQ3lDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jeSA9IGN5O1xuICAgICAgICB3aW5kb3cuY3kgPSBjeTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ3lDYWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ09OU1RBTlRTIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGNvbnN0IFNFTEVDVF9USFJFU0hPTEQgPSAxMDA7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IGN5LmNvbGxlY3Rpb24oKTtcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEZVTkNUSU9OUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBjb25zdCByZWZyZXNoTGF5b3V0ID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlZnJlc2ggTGF5b3V0IGlmIG5lZWRlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCB7YXV0b1JlZnJlc2hMYXlvdXQsIGxheW91dH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgICAgICBpZiAoYXV0b1JlZnJlc2hMYXlvdXQpIHtcbiAgICAgICAgICAgICAgICBjeS5sYXlvdXQobGF5b3V0KS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgU0VMRUNUX1RIUkVTSE9MRCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZFNlbGVjdGVkTm9kZXNEYXRhID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlcGV0aXRpdmVseSBjYWxsZWQgZXZlcnkgdGltZSBhIG5vZGUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICBvciB1bnNlbGVjdGVkLCBidXQga2VlcHMgYmVpbmcgZGVib3VuY2VkIGlmIGl0IGlzIGNhbGxlZCBhZ2FpblxuICAgICAgICAgICAgIHdpdGhpbiAxMDAgbXMgKGdpdmVuIGJ5IFNFTEVDVF9USFJFU0hPTEQpLiBFZmZlY3RpdmVseSwgaXQgb25seVxuICAgICAgICAgICAgIHJ1bnMgd2hlbiBhbGwgdGhlIG5vZGVzIGhhdmUgYmVlbiBjb3JyZWN0bHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBhbmRcbiAgICAgICAgICAgICBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGVkTm9kZXMgY29sbGVjdGlvbiwgYW5kIHRoZW4gdXBkYXRlc1xuICAgICAgICAgICAgIHRoZSBzZWxlY3RlZE5vZGVEYXRhIHByb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IG5vZGVEYXRhID0gc2VsZWN0ZWROb2Rlcy5tYXAoZWwgPT4gZWwuZGF0YSgpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZURhdGE6IG5vZGVEYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRTZWxlY3RlZEVkZ2VzRGF0YSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRnZURhdGEgPSBzZWxlY3RlZEVkZ2VzLm1hcChlbCA9PiBlbC5kYXRhKCkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuc2V0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFZGdlRGF0YTogZWRnZURhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgU0VMRUNUX1RIUkVTSE9MRCk7XG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVWRU5UUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgY3kub24oJ3RhcCcsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZU9iamVjdCA9IHRoaXMuZ2VuZXJhdGVOb2RlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHRhcE5vZGU6IG5vZGVPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIHRhcE5vZGVEYXRhOiBub2RlT2JqZWN0LmRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3RhcCcsICdlZGdlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRnZU9iamVjdCA9IHRoaXMuZ2VuZXJhdGVFZGdlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHRhcEVkZ2U6IGVkZ2VPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIHRhcEVkZ2VEYXRhOiBlZGdlT2JqZWN0LmRhdGFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlb3Zlck5vZGVEYXRhOiBldmVudC50YXJnZXQuZGF0YSgpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdtb3VzZW92ZXInLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBtb3VzZW92ZXJFZGdlRGF0YTogZXZlbnQudGFyZ2V0LmRhdGEoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignc2VsZWN0JywgJ25vZGUnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZE5vZGVzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbigndW5zZWxlY3QgcmVtb3ZlJywgJ25vZGUnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMudW5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkTm9kZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdzZWxlY3QnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgICAgc2VsZWN0ZWRFZGdlcy5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkRWRnZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCd1bnNlbGVjdCByZW1vdmUnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgICAgc2VsZWN0ZWRFZGdlcy51bm1lcmdlKGVsZSk7XG4gICAgICAgICAgICBzZW5kU2VsZWN0ZWRFZGdlc0RhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ2FkZCByZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoTGF5b3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MgPSBuZXcgQ3lSZXNwb25zaXZlKGN5KTtcbiAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcy50b2dnbGUodGhpcy5wcm9wcy5yZXNwb25zaXZlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUdlbmVyYXRpb24oaW1hZ2VUeXBlLCBpbWFnZU9wdGlvbnMsIGFjdGlvbnNUb1BlcmZvcm0sIGZpbGVOYW1lKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChpbWFnZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBpbWFnZU9wdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGVzaXJlZE91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICAgICAgICBvcHRpb25zLm91dHB1dCA9ICdibG9iJztcblxuICAgICAgICBsZXQgZG93bmxvYWRJbWFnZTtcbiAgICAgICAgbGV0IHN0b3JlSW1hZ2U7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uc1RvUGVyZm9ybSkge1xuICAgICAgICAgICAgY2FzZSAnc3RvcmUnOlxuICAgICAgICAgICAgICAgIGRvd25sb2FkSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0b3JlSW1hZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgaWYgKGltYWdlVHlwZSA9PT0gJ3BuZycpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2N5LnBuZyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1hZ2VUeXBlID09PSAnanBnJyB8fCBpbWFnZVR5cGUgPT09ICdqcGVnJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gdGhpcy5fY3kuanBnKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgd29ya3Mgd2hlbiBzdmcgaXMgaW1wb3J0ZWQgKHNlZSBsaWIvZXh0cmFfaW5kZXguanMpXG4gICAgICAgIGlmIChpbWFnZVR5cGUgPT09ICdzdmcnKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSB0aGlzLl9jeS5zdmcob3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBvdXRwdXQgaXMgZW1wdHkgYmVjYXVzZSBvZiBiYWQgb3B0aW9ucyBvciBhIGN5dG9zY2FwZSBlcnJvcixcbiAgICAgICAgICogc2tpcCBhbnkgZG93bmxvYWQgb3Igc3RvcmFnZSBzdGVwcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChvdXRwdXQgJiYgZG93bmxvYWRJbWFnZSkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIERvd25sb2FkaW5nIGlzIGluaXRpYXRlZCBjbGllbnQtc2lkZSBiZWNhdXNlIHRoZSBpbWFnZSBpcyBnZW5lcmF0ZWQgYXRcbiAgICAgICAgICAgICAqIHRoZSBjbGllbnQuIFRoaXMgYXZvaWRzIHRyYW5zZmVycmluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlXG4gICAgICAgICAgICAgKiB0byB0aGUgc2VydmVyIGFuZCBiYWNrIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjay5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IGZOYW1lID0gZmlsZU5hbWU7XG4gICAgICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgZk5hbWUgPSAnY3l0byc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbWFnZVR5cGUgIT09ICdzdmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEJsb2Iob3V0cHV0LCBmTmFtZSArICcuJyArIGltYWdlVHlwZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbb3V0cHV0XSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRCbG9iKGJsb2IsIGZOYW1lICsgJy4nICsgaW1hZ2VUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXQgJiYgc3RvcmVJbWFnZSkge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCBvdXRwdXQgdHlwZSBpZiB1bnNwZWNpZmllZFxuICAgICAgICAgICAgaWYgKCFkZXNpcmVkT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgZGVzaXJlZE91dHB1dCA9ICdiYXNlNjR1cmknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0dXJpJyB8fCBkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0JylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIENvbnZlcnQgYmxvYiB0byBiYXNlNjR1cmkgb3IgYmFzZTY0IHN0cmluZyB0byBzdG9yZSB0aGUgaW1hZ2UgZGF0YS5cbiAgICAgICAgICAgICAqIFRoYW5rIHlvdSwgYmFzZTY0Z3VydSBodHRwczovL2Jhc2U2NC5ndXJ1L2RldmVsb3BlcnMvamF2YXNjcmlwdC9leGFtcGxlcy9lbmNvZGUtYmxvYlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBGaWxlUmVhZGVyIGlzIGFzeW5jaHJvbm91cywgc28gdGhlIHJlYWQgZnVuY3Rpb24gaXMgbm9uLWJsb2NraW5nLlxuICAgICAgICAgICAgICAgICAqIElmIHRoaXMgY29kZSBibG9jayBpcyBwbGFjZWQgYWZ0ZXIgdGhlIHJlYWQgY29tbWFuZCwgaXRcbiAgICAgICAgICAgICAgICAgKiBtYXkgcmVzdWx0IGluIGVtcHR5IG91dHB1dCBiZWNhdXNlIHRoZSBibG9iIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja0RhdGEgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChkZXNpcmVkT3V0cHV0ID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgPSBjYWxsYmFja0RhdGEucmVwbGFjZSgvXmRhdGE6Lis7YmFzZTY0LC8sICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7aW1hZ2VEYXRhOiBjYWxsYmFja0RhdGF9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChvdXRwdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIERvd25sb2FkIGJsb2IgYXMgZmlsZSBieSBkeW5hbWljYWxseSBjcmVhdGluZyBsaW5rLlxuICAgICAgICAgKiBDaHJvbWUgZG9lcyBub3Qgb3BlbiBkYXRhIFVSTHMgd2hlbiBKUyBvcGVucyBhIG5ldyB0YWIgZGlyZWN0ZWRcbiAgICAgICAgICogYXQgdGhlIGRhdGEgVVJMLCBzbyB0aGlzIGlzIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgKiB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBleHRyYSBwYWNrYWdlcy4gSXQgbWF5IG5vdCBiZWhhdmUgaW5cbiAgICAgICAgICogZXhhY3RseSB0aGUgc2FtZSB3YXkgYWNyb3NzIGJyb3dzZXJzIChtaWdodCBkaXNwbGF5IGltYWdlIGluIG5ldyB0YWJcbiAgICAgICAgICogaW50ZWFkIG9mIGRvd25sb2FkaW5nIGFzIGEgZmlsZSkuXG4gICAgICAgICAqIFRoYW5rIHlvdSwga29sZGV2IGh0dHBzOi8vanNmaWRkbGUubmV0L2tvbGRldi9jVzdXNS9cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgZG93bmxvYWRMaW5rLnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmUnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gdXJsO1xuICAgICAgICBkb3dubG9hZExpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb3dubG9hZExpbmspO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgLy8gSFRNTCBhdHRyaWJ1dGUgcHJvcHNcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAvLyBDb21tb24gcHJvcHNcbiAgICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgICAgc3R5bGVzaGVldCxcbiAgICAgICAgICAgIGxheW91dCxcbiAgICAgICAgICAgIC8vIFZpZXdwb3J0IE1hbmlwdWxhdGlvblxuICAgICAgICAgICAgcGFuLFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIC8vIFZpZXdwb3J0IE11dGFiaWxpdHkgYW5kIGdlc3R1cmUgVG9nZ2xpbmdcbiAgICAgICAgICAgIHBhbm5pbmdFbmFibGVkLFxuICAgICAgICAgICAgdXNlclBhbm5pbmdFbmFibGVkLFxuICAgICAgICAgICAgbWluWm9vbSxcbiAgICAgICAgICAgIG1heFpvb20sXG4gICAgICAgICAgICB6b29taW5nRW5hYmxlZCxcbiAgICAgICAgICAgIHVzZXJab29taW5nRW5hYmxlZCxcbiAgICAgICAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQsXG4gICAgICAgICAgICBhdXRvdW5ncmFiaWZ5LFxuICAgICAgICAgICAgYXV0b2xvY2ssXG4gICAgICAgICAgICBhdXRvdW5zZWxlY3RpZnksXG4gICAgICAgICAgICAvLyBJbWFnZSBoYW5kbGluZ1xuICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZSxcbiAgICAgICAgICAgIC8vIFJlc3BvbnNpdmUgZ3JhcGhzXG4gICAgICAgICAgICByZXNwb25zaXZlXG4gICAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhnZW5lcmF0ZUltYWdlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJZiBubyBjeXRvc2NhcGUgb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQgeWV0LCBhbiBpbWFnZSBjYW5ub3QgYmUgZ2VuZXJhdGVkLFxuICAgICAgICAgICAgLy8gc28gZ2VuZXJhdGVJbWFnZSB3aWxsIGJlIGlnbm9yZWQgYW5kIGNsZWFyZWQuXG4gICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtnZW5lcmF0ZUltYWdlOiB7fX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbWFnZUdlbmVyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUltYWdlLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5maWxlbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jeVJlc3BvbnNpdmVDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jeVJlc3BvbnNpdmVDbGFzcy50b2dnbGUocmVzcG9uc2l2ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEN5dG9zY2FwZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICBjeT17dGhpcy5oYW5kbGVDeX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgZWxlbWVudHM9e0N5dG9zY2FwZUNvbXBvbmVudC5ub3JtYWxpemVFbGVtZW50cyhlbGVtZW50cyl9XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldD17c3R5bGVzaGVldH1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9e2xheW91dH1cbiAgICAgICAgICAgICAgICBwYW49e3Bhbn1cbiAgICAgICAgICAgICAgICB6b29tPXt6b29tfVxuICAgICAgICAgICAgICAgIHBhbm5pbmdFbmFibGVkPXtwYW5uaW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICB1c2VyUGFubmluZ0VuYWJsZWQ9e3VzZXJQYW5uaW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBtaW5ab29tPXttaW5ab29tfVxuICAgICAgICAgICAgICAgIG1heFpvb209e21heFpvb219XG4gICAgICAgICAgICAgICAgem9vbWluZ0VuYWJsZWQ9e3pvb21pbmdFbmFibGVkfVxuICAgICAgICAgICAgICAgIHVzZXJab29taW5nRW5hYmxlZD17dXNlclpvb21pbmdFbmFibGVkfVxuICAgICAgICAgICAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ9e2JveFNlbGVjdGlvbkVuYWJsZWR9XG4gICAgICAgICAgICAgICAgYXV0b3VuZ3JhYmlmeT17YXV0b3VuZ3JhYmlmeX1cbiAgICAgICAgICAgICAgICBhdXRvbG9jaz17YXV0b2xvY2t9XG4gICAgICAgICAgICAgICAgYXV0b3Vuc2VsZWN0aWZ5PXthdXRvdW5zZWxlY3RpZnl9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuQ3l0b3NjYXBlLnByb3BUeXBlcyA9IHtcbiAgICAvLyBIVE1MIGF0dHJpYnV0ZSBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogVGhlIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBjb21wb25lbnQgaW4gRGFzaCBjYWxsYmFja3MuXG4gICAgICovXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBlbGVtZW50ICh0aGUgdmFsdWUgb2YgYW4gZWxlbWVudCdzIGh0bWxcbiAgICAgKiBjbGFzcyBhdHRyaWJ1dGUpLlxuICAgICAqL1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAqIEFkZCBpbmxpbmUgc3R5bGVzIHRvIHRoZSByb290IGVsZW1lbnQuXG4gICAgICovXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvLyBEYXNoIHNwZWNpZmljIHByb3BzXG5cbiAgICAvKipcbiAgICAgKiBEYXNoLWFzc2lnbmVkIGNhbGxiYWNrIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBhbnkgb2YgdGhlXG4gICAgICogcHJvcGVydGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgc2V0UHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLy8gQ29tbW9uIHByb3BzXG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyB0aGUgZWxlbWVudHMgb2YgdGhlIG5ldHdvcmtzLiBFYWNoIGRpY3Rpb25hcnkgZGVzY3JpYmVzIGFuIGVsZW1lbnQsIGFuZFxuICAgICAqIHNwZWNpZmllcyBpdHMgcHVycG9zZS4gVGhlIFtvZmZpY2lhbCBDeXRvc2NhcGUuanMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9qcy5jeXRvc2NhcGUub3JnLyNub3RhdGlvbi9lbGVtZW50cy1qc29uKVxuICAgICAqIG9mZmVycyBhbiBleHRlbnNpdmUgb3ZlcnZpZXcgYW5kIGV4YW1wbGVzIG9mIGVsZW1lbnQgZGVjbGFyYXRpb24uXG4gICAgICogQWx0ZXJuYXRpdmVseSwgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZvcm1hdCB7ICdub2Rlcyc6IFtdLCAnZWRnZXMnOiBbXSB9IGlzIGFsbG93ZWQgYXQgaW5pdGlhbGl6YXRpb24sXG4gICAgICogYnV0IGFycmF5cyByZW1haW4gdGhlIHJlY29tbWVuZGVkIGZvcm1hdC5cbiAgICAgKi9cbiAgICBlbGVtZW50czogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBFaXRoZXIgJ25vZGVzJyBvciAnZWRnZXMnLiBJZiBub3QgZ2l2ZW4sIGl0J3MgYXV0b21hdGljYWxseSBpbmZlcnJlZC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBncm91cDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAvKiogRWxlbWVudCBzcGVjaWZpYyBkYXRhLiovXG4gICAgICAgICAgICAgICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAgICAgLyoqICBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQsIHVzZWZ1bCBmb3Igc2VsZWN0b3JzIGFuZCBlZGdlcy4gUmFuZG9tbHkgYXNzaWduZWQgaWYgbm90IGdpdmVuLiovXG4gICAgICAgICAgICAgICAgICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogT3B0aW9uYWwgbmFtZSBmb3IgdGhlIGVsZW1lbnQsIHVzZWZ1bCB3aGVuIGBkYXRhKGxhYmVsKWAgaXMgZ2l2ZW4gdG8gYSBzdHlsZSdzIGBjb250ZW50YFxuICAgICAgICAgICAgICAgICAgICAgKiBvciBgbGFiZWxgLiBJdCBpcyBvbmx5IGEgY29udmVudGlvbi4gKi9cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIC8qKiBPbmx5IGZvciBub2Rlcy4gT3B0aW9uYWwgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZS4gTmVlZGVkIHRvIGNyZWF0ZSBjb21wb3VuZCBub2Rlcy4gKi9cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3IgZWRnZXMuIFRoZSBpZCBvZiB0aGUgc291cmNlIG5vZGUsIHdoaWNoIGlzIHdoZXJlIHRoZSBlZGdlIHN0YXJ0cy4gKi9cbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3IgZWRnZXMuIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IG5vZGUsIHdoZXJlIHRoZSBlZGdlIGVuZHMuICovXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZ1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8qKiBPbmx5IGZvciBub2Rlcy4gVGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgICAgICAgICAvKiogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbm9kZS4gKi9cbiAgICAgICAgICAgICAgICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgLyoqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUuICovXG4gICAgICAgICAgICAgICAgICAgIHk6IFByb3BUeXBlcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiogSWYgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgdXBvbiBpbml0aWFsaXNhdGlvbi4gKi9cbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZC4gKi9cbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIElmIHRoZSBwb3NpdGlvbiBpcyBpbW11dGFibGUuICovXG4gICAgICAgICAgICAgICAgbG9ja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIElmIHRoZSBub2RlIGNhbiBiZSBncmFiYmVkIGFuZCBtb3ZlZCBieSB0aGUgdXNlci4gKi9cbiAgICAgICAgICAgICAgICBncmFiYmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2YgY2xhc3MgbmFtZXMgb2YgdGhlIGVsZW1lbnQuIFRob3NlIGNsYXNzZXMgY2FuIGJlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICogYnkgYSBzdHlsZSBzZWxlY3Rvci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAgICAgbm9kZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgICAgIGVkZ2VzOiBQcm9wVHlwZXMuYXJyYXlcbiAgICAgICAgfSlcbiAgICBdKSxcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgcmVwcmVzZW50aW5nIHRoZSBzdHlsZXMgb2YgdGhlIGVsZW1lbnRzLlxuICAgICAqIEVhY2ggZGljdGlvbmFyeSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGtleXM6IGBzZWxlY3RvcmAgYW5kIGBzdHlsZWAuXG4gICAgICpcbiAgICAgKiBCb3RoIHRoZSBbc2VsZWN0b3JdKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jc2VsZWN0b3JzKSBhbmRcbiAgICAgKiB0aGUgW3N0eWxlXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI3N0eWxlL25vZGUtYm9keSkgYXJlXG4gICAgICogZXhoYXVzdGl2ZWx5IGRvY3VtZW50ZWQgaW4gdGhlIEN5dG9zY2FwZS5qcyBkb2NzLiBBbHRob3VnaCBtZXRob2RzIHN1Y2hcbiAgICAgKiBhcyBgY3kuZWxlbWVudHMoLi4uKWAgYW5kIGBjeS5maWx0ZXIoLi4uKWAgYXJlIG5vdCBhdmFpbGFibGUsIHRoZSBzZWxlY3RvclxuICAgICAqIHN0cmluZyBzeW50YXggc3RheXMgdGhlIHNhbWUuXG4gICAgICovXG4gICAgc3R5bGVzaGVldDogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICAgIFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoaWNoIGVsZW1lbnRzIHlvdSBhcmUgc3R5bGluZy4gR2VuZXJhbGx5LCB5b3Ugc2VsZWN0IGEgZ3JvdXAgb2YgZWxlbWVudHMgKG5vZGUsIGVkZ2VzLCBib3RoKSxcbiAgICAgICAgICAgICAqIGEgY2xhc3MgKHRoYXQgeW91IGRlY2xhcmUgaW4gdGhlIGVsZW1lbnQgZGljdGlvbmFyeSksIG9yIGFuIGVsZW1lbnQgYnkgSUQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNlbGVjdG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoYXQgYXNwZWN0cyBvZiB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gbW9kaWZ5LiBUaGlzIGNvdWxkIGJlIHRoZSBzaXplIG9yXG4gICAgICAgICAgICAgKiBjb2xvciBvZiBhIG5vZGUsIHRoZSBzaGFwZSBvZiBhbiBlZGdlIGFycm93LCBvciBtYW55IG1vcmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbiAgICAgICAgfSlcbiAgICApLFxuXG4gICAgLyoqXG4gICAgICogQSBkaWN0aW9uYXJ5IHNwZWNpZnlpbmcgaG93IHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnRzIGluIHlvdXJcbiAgICAgKiBncmFwaC4gVGhlIGAnbmFtZSdgIGtleSBpcyByZXF1aXJlZCwgYW5kIGluZGljYXRlcyB3aGljaCBsYXlvdXQgKGFsZ29yaXRobSkgdG9cbiAgICAgKiB1c2UuIFRoZSBrZXlzIGFjY2VwdGVkIGJ5IGBsYXlvdXRgIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBhbGdvcml0aG0sIGJ1dCB0aGVzZVxuICAgICAqIGtleXMgYXJlIGFjY2VwdGVkIGJ5IGFsbCBsYXlvdXRzOiBgZml0YCwgIGBwYWRkaW5nYCwgYGFuaW1hdGVgLCBgYW5pbWF0aW9uRHVyYXRpb25gLFxuICAgICAqIGBib3VuZGluZ0JveGAuXG4gICAgICpcbiAgICAgKiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgbGF5b3V0cyBhbmQgdGhlaXIgYWNjZXB0ZWQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAqICBbQ3l0b3NjYXBlLmpzIGRvY3NdKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jbGF5b3V0cykgLiBGb3IgdGhlIGV4dGVybmFsIGxheW91dHMsXG4gICAgICogdGhlIG9wdGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUgXCJBUElcIiBzZWN0aW9uIG9mIHRoZSAgUkVBRE1FLlxuICAgICAqICBOb3RlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluIERhc2ggc2luY2UgdGhlIHZhbHVlIGlzIGEgSmF2YVNjcmlwdFxuICAgICAqICBmdW5jdGlvbiBvciBhIGNhbGxiYWNrLiBQbGVhc2UgdmlzaXQgdGhpc1xuICAgICAqIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9kYXNoLWN5dG9zY2FwZS9pc3N1ZXMvMjUpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIGxheW91dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBsYXlvdXRzIGF2YWlsYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAgICAgICAgICogICBgcmFuZG9tYDogUmFuZG9tbHkgYXNzaWducyBwb3NpdGlvbnMuXG4gICAgICAgICAqICAgYHByZXNldGA6IEFzc2lnbnMgcG9zaXRpb24gYmFzZWQgb24gdGhlIGBwb3NpdGlvbmAga2V5IGluIGVsZW1lbnQgZGljdGlvbmFyaWVzLlxuICAgICAgICAgKiAgIGBjaXJjbGVgOiBTaW5nbGUtbGV2ZWwgY2lyY2xlLCB3aXRoIG9wdGlvbmFsIHJhZGl1cy5cbiAgICAgICAgICogICBgY29uY2VudHJpY2A6IE11bHRpLWxldmVsIGNpcmNsZSwgd2l0aCBvcHRpb25hbCByYWRpdXMuXG4gICAgICAgICAqICAgYGdyaWRgOiBTcXVhcmUgZ3JpZCwgb3B0aW9uYWxseSB3aXRoIG51bWJlcnMgb2YgYHJvd3NgIGFuZCBgY29sc2AuXG4gICAgICAgICAqICAgYGJyZWFkdGhmaXJzdGA6IFRyZWUgc3RydWN0dXJlIGJ1aWx0IHVzaW5nIEJGUywgd2l0aCBvcHRpb25hbCBgcm9vdHNgLlxuICAgICAgICAgKiAgIGBjb3NlYDogRm9yY2UtZGlyZWN0ZWQgcGh5c2ljcyBzaW11bGF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTb21lIGV4dGVybmFsIGxheW91dHMgYXJlIGFsc28gaW5jbHVkZWQuIFRvIHVzZSB0aGVtLCBydW5cbiAgICAgICAgICogICBgZGFzaF9jeXRvc2NhcGUubG9hZF9leHRyYV9sYXlvdXRzKClgIGJlZm9yZSBjcmVhdGluZyB5b3VyIERhc2ggYXBwLiBCZSBjYXJlZnVsIGFib3V0XG4gICAgICAgICAqICAgdXNpbmcgdGhlIGV4dHJhIGxheW91dHMgd2hlbiBub3QgbmVjZXNzYXJ5LCBzaW5jZSB0aGV5IHJlcXVpcmUgc3VwcGxlbWVudGFyeSBiYW5kd2lkdGhcbiAgICAgICAgICogICBmb3IgbG9hZGluZywgd2hpY2ggaW1wYWN0cyB0aGUgc3RhcnR1cCB0aW1lIG9mIHRoZSBhcHAuXG4gICAgICAgICAqICAgVGhlIGV4dGVybmFsIGxheW91dHMgYXJlOlxuICAgICAgICAgKiAgIFtjb3NlLWJpbGtlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWNvc2UtYmlsa2VudCksXG4gICAgICAgICAqICAgW2NvbGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWNvbGEpLFxuICAgICAgICAgKiAgIFtldWxlcl0oaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtZGFncmUpLFxuICAgICAgICAgKiAgIFtzcHJlYWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLXNwcmVhZCksXG4gICAgICAgICAqICAgW2RhZ3JlXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1kYWdyZSksXG4gICAgICAgICAqICAgW2tsYXldKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWtsYXkpLFxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgICAgICAgICdyYW5kb20nLFxuICAgICAgICAgICAgJ3ByZXNldCcsXG4gICAgICAgICAgICAnY2lyY2xlJyxcbiAgICAgICAgICAgICdjb25jZW50cmljJyxcbiAgICAgICAgICAgICdncmlkJyxcbiAgICAgICAgICAgICdicmVhZHRoZmlyc3QnLFxuICAgICAgICAgICAgJ2Nvc2UnLFxuICAgICAgICAgICAgJ2Nsb3NlLWJpbGtlbnQnLFxuICAgICAgICAgICAgJ2NvbGEnLFxuICAgICAgICAgICAgJ2V1bGVyJyxcbiAgICAgICAgICAgICdzcHJlYWQnLFxuICAgICAgICAgICAgJ2RhZ3JlJyxcbiAgICAgICAgICAgICdrbGF5J1xuICAgICAgICBdKS5pc1JlcXVpcmVkLFxuICAgICAgICAvKiogIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBub2RlcyBpbiBvcmRlciB0byBmaXQgdGhlIGNhbnZhcy4gKi9cbiAgICAgICAgZml0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSBzaWRlcyBvZiB0aGUgY2FudmFzLCBpZiBmaXQgaXMgZW5hYmxlZC4gKi9cbiAgICAgICAgcGFkZGluZzogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIFdoZXRoZXIgdG8gYW5pbWF0ZSBjaGFuZ2UgaW4gcG9zaXRpb24gd2hlbiB0aGUgbGF5b3V0IGNoYW5nZXMuICovXG4gICAgICAgIGFuaW1hdGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogRHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kcywgaWYgZW5hYmxlZC4gKi9cbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgdG8gY29uc3RyYWluIHRoZSBsYXlvdXQgaW4gYSBzcGVjaWZpYyBhcmVhLiBLZXlzIGFjY2VwdGVkIGFyZSBlaXRoZXJcbiAgICAgICAgICogYHgxLCB5MSwgeDIsIHkyYCBvciBgeDEsIHkxLCB3LCBoYCwgYWxsIG9mIHdoaWNoIHJlY2VpdmUgYSBwaXhlbCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGJvdW5kaW5nQm94OiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvLyBWaWV3cG9ydCBNYW5pcHVsYXRpb25cblxuICAgIC8qKlxuICAgICAqIERpY3Rpb25hcnkgaW5kaWNhdGluZyB0aGUgaW5pdGlhbCBwYW5uaW5nIHBvc2l0aW9uIG9mIHRoZSBncmFwaC4gVGhlXG4gICAgICogZm9sbG93aW5nIGtleXMgYXJlIGFjY2VwdGVkOlxuICAgICAqL1xuICAgIHBhbjogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUgKi9cbiAgICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUgICovXG4gICAgICAgIHk6IFByb3BUeXBlcy5udW1iZXJcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbml0aWFsIHpvb20gbGV2ZWwgb2YgdGhlIGdyYXBoLiBZb3UgY2FuIHNldCBgbWluWm9vbWAgYW5kXG4gICAgICogYG1heFpvb21gIHRvIHNldCByZXN0cmljdGlvbnMgb24gdGhlIHpvb20gbGV2ZWwuXG4gICAgICovXG4gICAgem9vbTogUHJvcFR5cGVzLm51bWJlcixcblxuICAgIC8vIFZpZXdwb3J0IE11dGFiaWxpdHkgYW5kIGdlc3R1cmUgVG9nZ2xpbmdcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHBhbm5pbmcgdGhlIGdyYXBoIGlzIGVuYWJsZWQgKGkuZS4sIHRoZSBwb3NpdGlvbiBvZiB0aGUgZ3JhcGggaXNcbiAgICAgKiBtdXRhYmxlIG92ZXJhbGwpLlxuICAgICAqL1xuICAgIHBhbm5pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciBldmVudHMgKGUuZy4gZHJhZ2dpbmcgdGhlIGdyYXBoIGJhY2tncm91bmQpIGFyZSBhbGxvd2VkIHRvXG4gICAgICogcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICB1c2VyUGFubmluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogQSBtaW5pbXVtIGJvdW5kIG9uIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gVGhlIHZpZXdwb3J0IGNhbiBub3QgYmVcbiAgICAgKiBzY2FsZWQgc21hbGxlciB0aGFuIHRoaXMgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBtaW5ab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gICAgLyoqXG4gICAgICogQSBtYXhpbXVtIGJvdW5kIG9uIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gVGhlIHZpZXdwb3J0IGNhbiBub3QgYmVcbiAgICAgKiBzY2FsZWQgbGFyZ2VyIHRoYW4gdGhpcyB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIG1heFpvb206IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHpvb21pbmcgdGhlIGdyYXBoIGlzIGVuYWJsZWQgKGkuZS4sIHRoZSB6b29tIGxldmVsIG9mIHRoZSBncmFwaFxuICAgICAqIGlzIG11dGFibGUgb3ZlcmFsbCkuXG4gICAgICovXG4gICAgem9vbWluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIGV2ZW50cyAoZS5nLiBkcmFnZ2luZyB0aGUgZ3JhcGggYmFja2dyb3VuZCkgYXJlIGFsbG93ZWRcbiAgICAgKiB0byBwYW4gdGhlIGdyYXBoLlxuICAgICAqL1xuICAgIHVzZXJab29taW5nRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGJveCBzZWxlY3Rpb24gKGkuZS4gZHJhZyBhIGJveCBvdmVybGF5IGFyb3VuZCwgYW5kIHJlbGVhc2UgaXRcbiAgICAgKiB0byBzZWxlY3QpIGlzIGVuYWJsZWQuIElmIGVuYWJsZWQsIHRoZSB1c2VyIG11c3QgdGFwaG9sZCB0byBwYW4gdGhlIGdyYXBoLlxuICAgICAqL1xuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBub2RlcyBzaG91bGQgYmUgdW5ncmFiaWZpZWQgKG5vdCBncmFiYmFibGUgYnkgdXNlcikgYnlcbiAgICAgKiBkZWZhdWx0IChpZiB0cnVlLCBvdmVycmlkZXMgaW5kaXZpZHVhbCBub2RlIHN0YXRlKS5cbiAgICAgKi9cbiAgICBhdXRvdW5ncmFiaWZ5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIGxvY2tlZCAobm90IGRyYWdnYWJsZSBhdCBhbGwpIGJ5IGRlZmF1bHRcbiAgICAgKiAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgbm9kZSBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b2xvY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBub2RlcyBzaG91bGQgYmUgdW5zZWxlY3RpZmllZCAoaW1tdXRhYmxlIHNlbGVjdGlvbiBzdGF0ZSkgYnlcbiAgICAgKiBkZWZhdWx0IChpZiB0cnVlLCBvdmVycmlkZXMgaW5kaXZpZHVhbCBlbGVtZW50IHN0YXRlKS5cbiAgICAgKi9cbiAgICBhdXRvdW5zZWxlY3RpZnk6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbGF5b3V0IHNob3VsZCBiZSByZWZyZXNoZWQgd2hlbiBlbGVtZW50cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBhdXRvUmVmcmVzaExheW91dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvLyBVc2VyIEV2ZW50cyBQcm9wc1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbXBsZXRlIG5vZGUgZGljdGlvbmFyeSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBOb2RlOiBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAvKiogbm9kZSBzcGVjaWZpYyBpdGVtICovXG4gICAgICAgIGVkZ2VzRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICByZW5kZXJlZFBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogbm9kZSBzcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRpbWVTdGFtcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGFuY2VzdG9yc0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBjaGlsZHJlbkRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBkZXNjZW5kYW50c0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBwYXJlbnREYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgc2libGluZ3NEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNQYXJlbnQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNDaGlsZGxlc3M6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNDaGlsZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBpc09ycGhhbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGEgbm9kZSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBOb2RlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0ZSBlZGdlIGRpY3Rpb25hcnkgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwRWRnZTogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBpc0xvb3A6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIGlzU2ltcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBtaWRwb2ludDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBzb3VyY2VEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHNvdXJjZUVuZHBvaW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRhcmdldERhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgdGFyZ2V0RW5kcG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgdGltZVN0YW1wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBjbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBncmFiYmFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBncm91cDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgbG9ja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYW4gZWRnZSByZXR1cm5lZCB3aGVuIHlvdSB0YXAgb3IgY2xpY2sgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICB0YXBFZGdlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYSBub2RlIHJldHVybmVkIHdoZW4geW91IGhvdmVyIG92ZXIgaXQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBtb3VzZW92ZXJOb2RlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGRpY3Rpb25hcnkgb2YgYW4gZWRnZSByZXR1cm5lZCB3aGVuIHlvdSBob3ZlciBvdmVyIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgbW91c2VvdmVyRWRnZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBkYXRhIGRpY3Rpb25hcmllcyBvZiBhbGwgc2VsZWN0ZWQgbm9kZXMgKGUuZy4gdXNpbmdcbiAgICAgKiBTaGlmdCtDbGljayB0byBzZWxlY3QgbXVsdGlwbGUgbm9kZXMsIG9yIFNoaWZ0K0RyYWcgdG8gdXNlIGJveCBzZWxlY3Rpb24pLiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgc2VsZWN0ZWROb2RlRGF0YTogUHJvcFR5cGVzLmFycmF5LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZGF0YSBkaWN0aW9uYXJpZXMgb2YgYWxsIHNlbGVjdGVkIGVkZ2VzIChlLmcuIHVzaW5nXG4gICAgICogU2hpZnQrQ2xpY2sgdG8gc2VsZWN0IG11bHRpcGxlIG5vZGVzLCBvciBTaGlmdCtEcmFnIHRvIHVzZSBib3ggc2VsZWN0aW9uKS4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHNlbGVjdGVkRWRnZURhdGE6IFByb3BUeXBlcy5hcnJheSxcblxuICAgIC8qKlxuICAgICAqIERpY3Rpb25hcnkgc3BlY2lmeWluZyBvcHRpb25zIHRvIGdlbmVyYXRlIGFuIGltYWdlIG9mIHRoZSBjdXJyZW50IGN5dG9zY2FwZSBncmFwaC5cbiAgICAgKiBWYWx1ZSBpcyBjbGVhcmVkIGFmdGVyIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIGltYWdlIGlzIGdlbmVyYXRlZC4gVGhpcyBwcm9wZXJ0eSB3aWxsXG4gICAgICogYmUgaWdub3JlZCBvbiB0aGUgaW5pdGlhbCBjcmVhdGlvbiBvZiB0aGUgY3l0b3NjYXBlIG9iamVjdCBhbmQgbXVzdCBiZSBpbnZva2VkIHRocm91Z2hcbiAgICAgKiBhIGNhbGxiYWNrIGFmdGVyIGl0IGhhcyBiZWVuIHJlbmRlcmVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGFwcCBkb2VzIG5vdCBuZWVkIHRoZSBpbWFnZSBkYXRhIHNlcnZlciBzaWRlIGFuZC9vciBpdCB3aWxsIG9ubHkgYmUgdXNlZCB0byBkb3dubG9hZFxuICAgICAqIHRoZSBpbWFnZSwgaXQgbWF5IGJlIHBydWRlbnQgdG8gaW52b2tlIGAnZG93bmxvYWQnYCBmb3IgYGFjdGlvbmAgaW5zdGVhZCBvZlxuICAgICAqIGAnc3RvcmUnYCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHByZXZlbnRpbmcgdHJhbnNmZXIgb2YgZGF0YSB0byB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIGdlbmVyYXRlSW1hZ2U6IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBGaWxlIHR5cGUgdG8gb3V0cHV0ICAqL1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoWydzdmcnLCAncG5nJywgJ2pwZycsICdqcGVnJ10pLmlzUmVxdWlyZWQsXG4gICAgICAgIC8qKiBEaWN0aW9uYXJ5IG9mIG9wdGlvbnMgdG8gY3kucG5nKCkgLyBjeS5qcGcoKSBvciBjeS5zdmcoKSBmb3IgaW1hZ2UgZ2VuZXJhdGlvbi5cbiAgICAgICAgICogU2VlIGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jY29yZS9leHBvcnQgZm9yIGRldGFpbHMuIEZvciBgJ291dHB1dCdgLCBvbmx5ICdiYXNlNjQnXG4gICAgICAgICAqIGFuZCAnYmFzZTY0dXJpJyBhcmUgc3VwcG9ydGVkLiBEZWZhdWx0OiBgeydvdXRwdXQnOiAnYmFzZTY0dXJpJ31gLiovXG4gICAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgJ3N0b3JlJ2A6IFN0b3JlcyB0aGUgaW1hZ2UgZGF0YSAob25seSBqcGcgYW5kIHBuZyBhcmUgc3VwcG9ydGVkKVxuICAgICAgICAgKiBpbiBgaW1hZ2VEYXRhYCBhbmQgaW52b2tlcyBzZXJ2ZXItc2lkZSBEYXNoIGNhbGxiYWNrcy4gYCdkb3dubG9hZCdgOiBEb3dubG9hZHMgdGhlIGltYWdlXG4gICAgICAgICAqIGFzIGEgZmlsZSB3aXRoIGFsbCBkYXRhIGhhbmRsaW5nIGRvbmUgY2xpZW50LXNpZGUuIE5vIGBpbWFnZURhdGFgIGNhbGxiYWNrcyBhcmUgZmlyZWQuXG4gICAgICAgICAqIGAnYm90aCdgOiBTdG9yZXMgaW1hZ2UgZGF0YSBhbmQgZG93bmxvYWRzIGltYWdlIGFzIGZpbGUuIFRoZSBkZWZhdWx0IGlzIGAnc3RvcmUnYFxuICAgICAgICAgKi9cbiAgICAgICAgYWN0aW9uOiBQcm9wVHlwZXMub25lT2YoWydzdG9yZScsICdkb3dubG9hZCcsICdib3RoJ10pLFxuICAgICAgICAvKiogTmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZC4gRGVmYXVsdDogJ2N5dG8nLiovXG4gICAgICAgIGZpbGVuYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGltYWdlIHJlcXVlc3RlZCB3aXRoIGdlbmVyYXRlSW1hZ2UuIE51bGwgaWYgbm9cbiAgICAgKiBpbWFnZSB3YXMgcmVxdWVzdGVkIHlldCBvciB0aGUgcHJldmlvdXMgcmVxdWVzdCBmYWlsZWQuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBpbWFnZURhdGE6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIGludGVsbGlnZW50IHJlc3BvbnNpdmUgcmVzaXplIG9mIEN5dG9zY2FwZSBncmFwaCB3aXRoIHZpZXdwb3J0IHNpemUgY2hhbmdlXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbkN5dG9zY2FwZS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc3R5bGU6IHt3aWR0aDogJzYwMHB4JywgaGVpZ2h0OiAnNjAwcHgnfSxcbiAgICBsYXlvdXQ6IHtuYW1lOiAnZ3JpZCd9LFxuICAgIHBhbjoge3g6IDAsIHk6IDB9LFxuICAgIHpvb206IDEsXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IHRydWUsXG4gICAgcGFubmluZ0VuYWJsZWQ6IHRydWUsXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiB0cnVlLFxuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGF1dG9sb2NrOiBmYWxzZSxcbiAgICBhdXRvdW5ncmFiaWZ5OiBmYWxzZSxcbiAgICBhdXRvdW5zZWxlY3RpZnk6IGZhbHNlLFxuICAgIGF1dG9SZWZyZXNoTGF5b3V0OiB0cnVlLFxuICAgIGdlbmVyYXRlSW1hZ2U6IHt9LFxuICAgIGltYWdlRGF0YTogbnVsbCxcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICBlbGVtZW50czogW11cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEN5dG9zY2FwZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/Cytoscape.react.js\n"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactCytoscapejs = __webpack_require__(/*! react-cytoscapejs */ \"./node_modules/react-cytoscapejs/dist/react-cytoscape.js\");\n\nvar _reactCytoscapejs2 = _interopRequireDefault(_reactCytoscapejs);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _cyResponsive = __webpack_require__(/*! ../cyResponsive.js */ \"./src/lib/cyResponsive.js\");\n\nvar _cyResponsive2 = _interopRequireDefault(_cyResponsive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * JavaScript Requirements: cytoscape, cytoscape-svg\n * React.js requirements: react-cytoscapejs\n */\n\n\n/**\nA Component Library for Dash aimed at facilitating network visualization in\nPython, wrapped around [Cytoscape.js](http://js.cytoscape.org/).\n */\nvar Cytoscape = function (_Component) {\n _inherits(Cytoscape, _Component);\n\n function Cytoscape(props) {\n _classCallCheck(this, Cytoscape);\n\n var _this = _possibleConstructorReturn(this, (Cytoscape.__proto__ || Object.getPrototypeOf(Cytoscape)).call(this, props));\n\n _this.handleCy = _this.handleCy.bind(_this);\n _this._handleCyCalled = false;\n _this.handleImageGeneration = _this.handleImageGeneration.bind(_this);\n _this.cyResponsiveClass = false;\n return _this;\n }\n\n _createClass(Cytoscape, [{\n key: 'generateNode',\n value: function generateNode(event) {\n var ele = event.target;\n\n var isParent = ele.isParent(),\n isChildless = ele.isChildless(),\n isChild = ele.isChild(),\n isOrphan = ele.isOrphan(),\n renderedPosition = ele.renderedPosition(),\n relativePosition = ele.relativePosition(),\n parent = ele.parent(),\n style = ele.style();\n\n // Trim down the element objects to only the data contained\n var edgesData = ele.connectedEdges().map(function (ele) {\n return ele.data();\n }),\n childrenData = ele.children().map(function (ele) {\n return ele.data();\n }),\n ancestorsData = ele.ancestors().map(function (ele) {\n return ele.data();\n }),\n descendantsData = ele.descendants().map(function (ele) {\n return ele.data();\n }),\n siblingsData = ele.siblings().map(function (ele) {\n return ele.data();\n });\n\n var timeStamp = event.timeStamp;\n\n var _ele$json = ele.json(),\n classes = _ele$json.classes,\n data = _ele$json.data,\n grabbable = _ele$json.grabbable,\n group = _ele$json.group,\n locked = _ele$json.locked,\n position = _ele$json.position,\n selected = _ele$json.selected,\n selectable = _ele$json.selectable;\n\n var parentData = void 0;\n if (parent) {\n parentData = parent.data();\n } else {\n parentData = null;\n }\n\n var nodeObject = {\n // Nodes attributes\n edgesData: edgesData,\n renderedPosition: renderedPosition,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n position: position,\n selectable: selectable,\n selected: selected,\n // Compound Nodes additional attributes\n ancestorsData: ancestorsData,\n childrenData: childrenData,\n descendantsData: descendantsData,\n parentData: parentData,\n siblingsData: siblingsData,\n isParent: isParent,\n isChildless: isChildless,\n isChild: isChild,\n isOrphan: isOrphan,\n relativePosition: relativePosition,\n // Styling\n style: style\n };\n return nodeObject;\n }\n }, {\n key: 'generateEdge',\n value: function generateEdge(event) {\n var ele = event.target;\n\n var midpoint = ele.midpoint(),\n isLoop = ele.isLoop(),\n isSimple = ele.isSimple(),\n sourceData = ele.source().data(),\n sourceEndpoint = ele.sourceEndpoint(),\n style = ele.style(),\n targetData = ele.target().data(),\n targetEndpoint = ele.targetEndpoint();\n\n var timeStamp = event.timeStamp;\n\n var _ele$json2 = ele.json(),\n classes = _ele$json2.classes,\n data = _ele$json2.data,\n grabbable = _ele$json2.grabbable,\n group = _ele$json2.group,\n locked = _ele$json2.locked,\n selectable = _ele$json2.selectable,\n selected = _ele$json2.selected;\n\n var edgeObject = {\n // Edges attributes\n isLoop: isLoop,\n isSimple: isSimple,\n midpoint: midpoint,\n sourceData: sourceData,\n sourceEndpoint: sourceEndpoint,\n targetData: targetData,\n targetEndpoint: targetEndpoint,\n timeStamp: timeStamp,\n // From ele.json()\n classes: classes,\n data: data,\n grabbable: grabbable,\n group: group,\n locked: locked,\n selectable: selectable,\n selected: selected,\n // Styling\n style: style\n };\n\n return edgeObject;\n }\n }, {\n key: 'handleCy',\n value: function handleCy(cy) {\n var _this2 = this;\n\n // If the cy pointer has not been modified, and handleCy has already\n // been called before, than we don't run this function.\n if (cy === this._cy && this._handleCyCalled) {\n return;\n }\n this._cy = cy;\n window.cy = cy;\n this._handleCyCalled = true;\n\n // ///////////////////////////////////// CONSTANTS /////////////////////////////////////////\n var SELECT_THRESHOLD = 100;\n\n var selectedNodes = cy.collection();\n var selectedEdges = cy.collection();\n\n // ///////////////////////////////////// FUNCTIONS /////////////////////////////////////////\n var refreshLayout = _lodash2.default.debounce(function () {\n /**\n * Refresh Layout if needed\n */\n var _props = _this2.props,\n autoRefreshLayout = _props.autoRefreshLayout,\n layout = _props.layout;\n\n\n if (autoRefreshLayout) {\n cy.layout(layout).run();\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedNodesData = _lodash2.default.debounce(function () {\n /**\n This function is repetitively called every time a node is selected\n or unselected, but keeps being debounced if it is called again\n within 100 ms (given by SELECT_THRESHOLD). Effectively, it only\n runs when all the nodes have been correctly selected/unselected and\n added/removed from the selectedNodes collection, and then updates\n the selectedNodeData prop.\n */\n var nodeData = selectedNodes.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedNodeData: nodeData\n });\n }\n }, SELECT_THRESHOLD);\n\n var sendSelectedEdgesData = _lodash2.default.debounce(function () {\n var edgeData = selectedEdges.map(function (el) {\n return el.data();\n });\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n selectedEdgeData: edgeData\n });\n }\n }, SELECT_THRESHOLD);\n\n // /////////////////////////////////////// EVENTS //////////////////////////////////////////\n cy.on('tap', 'node', function (event) {\n var nodeObject = _this2.generateNode(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapNode: nodeObject,\n tapNodeData: nodeObject.data\n });\n }\n });\n\n cy.on('tap', 'edge', function (event) {\n var edgeObject = _this2.generateEdge(event);\n\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n tapEdge: edgeObject,\n tapEdgeData: edgeObject.data\n });\n }\n });\n\n cy.on('mouseover', 'node', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverNodeData: event.target.data()\n });\n }\n });\n\n cy.on('mouseover', 'edge', function (event) {\n if (typeof _this2.props.setProps === 'function') {\n _this2.props.setProps({\n mouseoverEdgeData: event.target.data()\n });\n }\n });\n\n cy.on('select', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.merge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('unselect remove', 'node', function (event) {\n var ele = event.target;\n\n selectedNodes.unmerge(ele);\n sendSelectedNodesData();\n });\n\n cy.on('select', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.merge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('unselect remove', 'edge', function (event) {\n var ele = event.target;\n\n selectedEdges.unmerge(ele);\n sendSelectedEdgesData();\n });\n\n cy.on('add remove', function () {\n refreshLayout();\n });\n\n this.cyResponsiveClass = new _cyResponsive2.default(cy);\n this.cyResponsiveClass.toggle(this.props.responsive);\n }\n }, {\n key: 'handleImageGeneration',\n value: function handleImageGeneration(imageType, imageOptions, actionsToPerform, fileName) {\n var _this3 = this;\n\n var options = {};\n if (imageOptions) {\n options = imageOptions;\n }\n\n var desiredOutput = options.output;\n options.output = 'blob';\n\n var downloadImage = void 0;\n var storeImage = void 0;\n switch (actionsToPerform) {\n case 'store':\n downloadImage = false;\n storeImage = true;\n break;\n case 'download':\n downloadImage = true;\n storeImage = false;\n break;\n case 'both':\n downloadImage = true;\n storeImage = true;\n break;\n default:\n downloadImage = false;\n storeImage = true;\n break;\n }\n\n var output = void 0;\n if (imageType === 'png') {\n output = this._cy.png(options);\n }\n if (imageType === 'jpg' || imageType === 'jpeg') {\n output = this._cy.jpg(options);\n }\n // only works when svg is imported (see lib/extra_index.js)\n if (imageType === 'svg') {\n output = this._cy.svg(options);\n }\n\n /*\n * If output is empty because of bad options or a cytoscape error,\n * skip any download or storage steps.\n */\n if (output && downloadImage) {\n /*\n * Downloading is initiated client-side because the image is generated at\n * the client. This avoids transferring a potentially large image\n * to the server and back again through a callback.\n */\n var fName = fileName;\n if (!fileName) {\n fName = 'cyto';\n }\n\n if (imageType !== 'svg') {\n this.downloadBlob(output, fName + '.' + imageType);\n } else {\n var blob = new Blob([output], {\n type: 'image/svg+xml;charset=utf-8'\n });\n this.downloadBlob(blob, fName + '.' + imageType);\n }\n }\n\n if (output && storeImage) {\n // Default output type if unspecified\n if (!desiredOutput) {\n desiredOutput = 'base64uri';\n }\n\n if (!(desiredOutput === 'base64uri' || desiredOutput === 'base64')) {\n return;\n }\n\n /*\n * Convert blob to base64uri or base64 string to store the image data.\n * Thank you, base64guru https://base64.guru/developers/javascript/examples/encode-blob\n */\n var reader = new FileReader();\n reader.onload = function () {\n /* FileReader is asynchronous, so the read function is non-blocking.\n * If this code block is placed after the read command, it\n * may result in empty output because the blob has not been loaded yet.\n */\n var callbackData = reader.result;\n if (desiredOutput === 'base64') {\n callbackData = callbackData.replace(/^data:.+;base64,/, '');\n }\n _this3.props.setProps({ imageData: callbackData });\n };\n reader.readAsDataURL(output);\n }\n }\n }, {\n key: 'downloadBlob',\n value: function downloadBlob(blob, fileName) {\n /*\n * Download blob as file by dynamically creating link.\n * Chrome does not open data URLs when JS opens a new tab directed\n * at the data URL, so this is an alternate implementation\n * that doesn't require extra packages. It may not behave in\n * exactly the same way across browsers (might display image in new tab\n * intead of downloading as a file).\n * Thank you, koldev https://jsfiddle.net/koldev/cW7W5/\n */\n var downloadLink = document.createElement('a');\n downloadLink.style = 'display: none';\n document.body.appendChild(downloadLink);\n\n var url = window.URL.createObjectURL(blob);\n downloadLink.href = url;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(url);\n\n document.body.removeChild(downloadLink);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n style = _props2.style,\n className = _props2.className,\n elements = _props2.elements,\n stylesheet = _props2.stylesheet,\n layout = _props2.layout,\n pan = _props2.pan,\n zoom = _props2.zoom,\n panningEnabled = _props2.panningEnabled,\n userPanningEnabled = _props2.userPanningEnabled,\n minZoom = _props2.minZoom,\n maxZoom = _props2.maxZoom,\n zoomingEnabled = _props2.zoomingEnabled,\n userZoomingEnabled = _props2.userZoomingEnabled,\n boxSelectionEnabled = _props2.boxSelectionEnabled,\n autoungrabify = _props2.autoungrabify,\n autolock = _props2.autolock,\n autounselectify = _props2.autounselectify,\n generateImage = _props2.generateImage,\n responsive = _props2.responsive;\n\n\n if (Object.keys(generateImage).length > 0) {\n // If no cytoscape object has been created yet, an image cannot be generated,\n // so generateImage will be ignored and cleared.\n this.props.setProps({ generateImage: {} });\n if (this._cy) {\n this.handleImageGeneration(generateImage.type, generateImage.options, generateImage.action, generateImage.filename);\n }\n }\n\n if (this.cyResponsiveClass) {\n this.cyResponsiveClass.toggle(responsive);\n }\n\n return _react2.default.createElement(_reactCytoscapejs2.default, {\n id: id,\n cy: this.handleCy,\n className: className,\n style: style,\n elements: _reactCytoscapejs2.default.normalizeElements(elements),\n stylesheet: stylesheet,\n layout: layout,\n pan: pan,\n zoom: zoom,\n panningEnabled: panningEnabled,\n userPanningEnabled: userPanningEnabled,\n minZoom: minZoom,\n maxZoom: maxZoom,\n zoomingEnabled: zoomingEnabled,\n userZoomingEnabled: userZoomingEnabled,\n boxSelectionEnabled: boxSelectionEnabled,\n autoungrabify: autoungrabify,\n autolock: autolock,\n autounselectify: autounselectify\n });\n }\n }]);\n\n return Cytoscape;\n}(_react.Component);\n\nCytoscape.propTypes = {\n // HTML attribute props\n\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: _propTypes2.default.string,\n\n /**\n * Sets the class name of the element (the value of an element's html\n * class attribute).\n */\n className: _propTypes2.default.string,\n\n /**\n * Add inline styles to the root element.\n */\n style: _propTypes2.default.object,\n\n // Dash specific props\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: _propTypes2.default.func,\n\n // Common props\n\n /**\n * A list of dictionaries representing the elements of the networks. Each dictionary describes an element, and\n * specifies its purpose. The [official Cytoscape.js documentation](https://js.cytoscape.org/#notation/elements-json)\n * offers an extensive overview and examples of element declaration.\n * Alternatively, a dictionary with the format { 'nodes': [], 'edges': [] } is allowed at initialization,\n * but arrays remain the recommended format.\n */\n elements: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.shape({\n /**\n * Either 'nodes' or 'edges'. If not given, it's automatically inferred.\n */\n group: _propTypes2.default.string,\n /** Element specific data.*/\n data: _propTypes2.default.shape({\n /** Reference to the element, useful for selectors and edges. Randomly assigned if not given.*/\n id: _propTypes2.default.string,\n /**\n * Optional name for the element, useful when `data(label)` is given to a style's `content`\n * or `label`. It is only a convention. */\n label: _propTypes2.default.string,\n /** Only for nodes. Optional reference to another node. Needed to create compound nodes. */\n parent: _propTypes2.default.string,\n /** Only for edges. The id of the source node, which is where the edge starts. */\n source: _propTypes2.default.string,\n /** Only for edges. The id of the target node, where the edge ends. */\n target: _propTypes2.default.string\n }),\n /** Only for nodes. The position of the node. */\n position: _propTypes2.default.shape({\n /** The x-coordinate of the node. */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node. */\n y: _propTypes2.default.number\n }),\n /** If the element is selected upon initialisation. */\n selected: _propTypes2.default.bool,\n /** If the element can be selected. */\n selectable: _propTypes2.default.bool,\n /** Only for nodes. If the position is immutable. */\n locked: _propTypes2.default.bool,\n /** Only for nodes. If the node can be grabbed and moved by the user. */\n grabbable: _propTypes2.default.bool,\n /**\n * Space separated string of class names of the element. Those classes can be selected\n * by a style selector.\n */\n classes: _propTypes2.default.string\n })), _propTypes2.default.exact({\n nodes: _propTypes2.default.array,\n edges: _propTypes2.default.array\n })]),\n\n /**\n * A list of dictionaries representing the styles of the elements.\n * Each dictionary requires the following keys: `selector` and `style`.\n *\n * Both the [selector](https://js.cytoscape.org/#selectors) and\n * the [style](https://js.cytoscape.org/#style/node-body) are\n * exhaustively documented in the Cytoscape.js docs. Although methods such\n * as `cy.elements(...)` and `cy.filter(...)` are not available, the selector\n * string syntax stays the same.\n */\n stylesheet: _propTypes2.default.arrayOf(_propTypes2.default.exact({\n /**\n * Which elements you are styling. Generally, you select a group of elements (node, edges, both),\n * a class (that you declare in the element dictionary), or an element by ID.\n */\n selector: _propTypes2.default.string.isRequired,\n /**\n * What aspects of the elements you want to modify. This could be the size or\n * color of a node, the shape of an edge arrow, or many more.\n */\n style: _propTypes2.default.object.isRequired\n })),\n\n /**\n * A dictionary specifying how to set the position of the elements in your\n * graph. The `'name'` key is required, and indicates which layout (algorithm) to\n * use. The keys accepted by `layout` vary depending on the algorithm, but these\n * keys are accepted by all layouts: `fit`, `padding`, `animate`, `animationDuration`,\n * `boundingBox`.\n *\n * The complete list of layouts and their accepted options are available on the\n * [Cytoscape.js docs](https://js.cytoscape.org/#layouts) . For the external layouts,\n * the options are listed in the \"API\" section of the README.\n * Note that certain keys are not supported in Dash since the value is a JavaScript\n * function or a callback. Please visit this\n * [issue](https://github.com/plotly/dash-cytoscape/issues/25) for more information.\n */\n layout: _propTypes2.default.shape({\n /**\n * The layouts available by default are:\n * `random`: Randomly assigns positions.\n * `preset`: Assigns position based on the `position` key in element dictionaries.\n * `circle`: Single-level circle, with optional radius.\n * `concentric`: Multi-level circle, with optional radius.\n * `grid`: Square grid, optionally with numbers of `rows` and `cols`.\n * `breadthfirst`: Tree structure built using BFS, with optional `roots`.\n * `cose`: Force-directed physics simulation.\n *\n * Some external layouts are also included. To use them, run\n * `dash_cytoscape.load_extra_layouts()` before creating your Dash app. Be careful about\n * using the extra layouts when not necessary, since they require supplementary bandwidth\n * for loading, which impacts the startup time of the app.\n * The external layouts are:\n * [cose-bilkent](https://github.com/cytoscape/cytoscape.js-cose-bilkent),\n * [cola](https://github.com/cytoscape/cytoscape.js-cola),\n * [euler](https://github.com/cytoscape/cytoscape.js-dagre),\n * [spread](https://github.com/cytoscape/cytoscape.js-spread),\n * [dagre](https://github.com/cytoscape/cytoscape.js-dagre),\n * [klay](https://github.com/cytoscape/cytoscape.js-klay),\n */\n name: _propTypes2.default.oneOf(['random', 'preset', 'circle', 'concentric', 'grid', 'breadthfirst', 'cose', 'close-bilkent', 'cola', 'euler', 'spread', 'dagre', 'klay']).isRequired,\n /** Whether to render the nodes in order to fit the canvas. */\n fit: _propTypes2.default.bool,\n /** Padding around the sides of the canvas, if fit is enabled. */\n padding: _propTypes2.default.number,\n /** Whether to animate change in position when the layout changes. */\n animate: _propTypes2.default.bool,\n /** Duration of animation in milliseconds, if enabled. */\n animationDuration: _propTypes2.default.number,\n /**\n * How to constrain the layout in a specific area. Keys accepted are either\n * `x1, y1, x2, y2` or `x1, y1, w, h`, all of which receive a pixel value.\n */\n boundingBox: _propTypes2.default.object\n }),\n\n // Viewport Manipulation\n\n /**\n * Dictionary indicating the initial panning position of the graph. The\n * following keys are accepted:\n */\n pan: _propTypes2.default.exact({\n /** The x-coordinate of the node */\n x: _propTypes2.default.number,\n /** The y-coordinate of the node */\n y: _propTypes2.default.number\n }),\n\n /**\n * The initial zoom level of the graph. You can set `minZoom` and\n * `maxZoom` to set restrictions on the zoom level.\n */\n zoom: _propTypes2.default.number,\n\n // Viewport Mutability and gesture Toggling\n /**\n * Whether panning the graph is enabled (i.e., the position of the graph is\n * mutable overall).\n */\n panningEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed to\n * pan the graph.\n */\n userPanningEnabled: _propTypes2.default.bool,\n\n /**\n * A minimum bound on the zoom level of the graph. The viewport can not be\n * scaled smaller than this zoom level.\n */\n minZoom: _propTypes2.default.number,\n\n /**\n * A maximum bound on the zoom level of the graph. The viewport can not be\n * scaled larger than this zoom level.\n */\n maxZoom: _propTypes2.default.number,\n\n /**\n * Whether zooming the graph is enabled (i.e., the zoom level of the graph\n * is mutable overall).\n */\n zoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether user events (e.g. dragging the graph background) are allowed\n * to pan the graph.\n */\n userZoomingEnabled: _propTypes2.default.bool,\n\n /**\n * Whether box selection (i.e. drag a box overlay around, and release it\n * to select) is enabled. If enabled, the user must taphold to pan the graph.\n */\n boxSelectionEnabled: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be ungrabified (not grabbable by user) by\n * default (if true, overrides individual node state).\n */\n autoungrabify: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be locked (not draggable at all) by default\n * (if true, overrides individual node state).\n */\n autolock: _propTypes2.default.bool,\n\n /**\n * Whether nodes should be unselectified (immutable selection state) by\n * default (if true, overrides individual element state).\n */\n autounselectify: _propTypes2.default.bool,\n\n /**\n * Whether the layout should be refreshed when elements are added or removed.\n */\n autoRefreshLayout: _propTypes2.default.bool,\n\n // User Events Props\n\n /**\n * The complete node dictionary returned when you tap or click it. Read-only.\n */\n tapNode: _propTypes2.default.exact({\n /** node specific item */\n edgesData: _propTypes2.default.object,\n /** node specific item */\n renderedPosition: _propTypes2.default.object,\n /** node specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n position: _propTypes2.default.object,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object,\n /** Item for compound nodes */\n ancestorsData: _propTypes2.default.object,\n /** Item for compound nodes */\n childrenData: _propTypes2.default.object,\n /** Item for compound nodes */\n descendantsData: _propTypes2.default.object,\n /** Item for compound nodes */\n parentData: _propTypes2.default.object,\n /** Item for compound nodes */\n siblingsData: _propTypes2.default.object,\n /** Item for compound nodes */\n isParent: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChildless: _propTypes2.default.bool,\n /** Item for compound nodes */\n isChild: _propTypes2.default.bool,\n /** Item for compound nodes */\n isOrphan: _propTypes2.default.bool,\n /** Item for compound nodes */\n relativePosition: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of a node returned when you tap or click it. Read-only.\n */\n tapNodeData: _propTypes2.default.object,\n\n /**\n * The complete edge dictionary returned when you tap or click it. Read-only.\n */\n tapEdge: _propTypes2.default.exact({\n /** Edge-specific item */\n isLoop: _propTypes2.default.bool,\n /** Edge-specific item */\n isSimple: _propTypes2.default.bool,\n /** Edge-specific item */\n midpoint: _propTypes2.default.object,\n /** Edge-specific item */\n sourceData: _propTypes2.default.object,\n /** Edge-specific item */\n sourceEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n targetData: _propTypes2.default.object,\n /** Edge-specific item */\n targetEndpoint: _propTypes2.default.object,\n /** Edge-specific item */\n timeStamp: _propTypes2.default.number,\n /** General item (for all elements) */\n classes: _propTypes2.default.string,\n /** General item (for all elements) */\n data: _propTypes2.default.object,\n /** General item (for all elements) */\n grabbable: _propTypes2.default.bool,\n /** General item (for all elements) */\n group: _propTypes2.default.string,\n /** General item (for all elements) */\n locked: _propTypes2.default.bool,\n /** General item (for all elements) */\n selectable: _propTypes2.default.bool,\n /** General item (for all elements) */\n selected: _propTypes2.default.bool,\n /** General item (for all elements) */\n style: _propTypes2.default.object\n }),\n\n /**\n * The data dictionary of an edge returned when you tap or click it. Read-only.\n */\n tapEdgeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of a node returned when you hover over it. Read-only.\n */\n mouseoverNodeData: _propTypes2.default.object,\n\n /**\n * The data dictionary of an edge returned when you hover over it. Read-only.\n */\n mouseoverEdgeData: _propTypes2.default.object,\n\n /**\n * The list of data dictionaries of all selected nodes (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedNodeData: _propTypes2.default.array,\n\n /**\n * The list of data dictionaries of all selected edges (e.g. using\n * Shift+Click to select multiple nodes, or Shift+Drag to use box selection). Read-only.\n */\n selectedEdgeData: _propTypes2.default.array,\n\n /**\n * Dictionary specifying options to generate an image of the current cytoscape graph.\n * Value is cleared after data is received and image is generated. This property will\n * be ignored on the initial creation of the cytoscape object and must be invoked through\n * a callback after it has been rendered.\n *\n * If the app does not need the image data server side and/or it will only be used to download\n * the image, it may be prudent to invoke `'download'` for `action` instead of\n * `'store'` to improve performance by preventing transfer of data to the server.\n */\n generateImage: _propTypes2.default.exact({\n /** File type to output */\n type: _propTypes2.default.oneOf(['svg', 'png', 'jpg', 'jpeg']).isRequired,\n /** Dictionary of options to cy.png() / cy.jpg() or cy.svg() for image generation.\n * See https://js.cytoscape.org/#core/export for details. For `'output'`, only 'base64'\n * and 'base64uri' are supported. Default: `{'output': 'base64uri'}`.*/\n options: _propTypes2.default.object,\n /**\n * `'store'`: Stores the image data (only jpg and png are supported)\n * in `imageData` and invokes server-side Dash callbacks. `'download'`: Downloads the image\n * as a file with all data handling done client-side. No `imageData` callbacks are fired.\n * `'both'`: Stores image data and downloads image as file. The default is `'store'`\n */\n action: _propTypes2.default.oneOf(['store', 'download', 'both']),\n /** Name for the file to be downloaded. Default: 'cyto'.*/\n filename: _propTypes2.default.string\n }),\n\n /**\n * String representation of the image requested with generateImage. Null if no\n * image was requested yet or the previous request failed. Read-only.\n */\n imageData: _propTypes2.default.string,\n\n /**\n * Toggles intelligent responsive resize of Cytoscape graph with viewport size change\n */\n responsive: _propTypes2.default.bool,\n\n /**\n * Used to allow user interactions in this component to be persisted when\n * the component - or the page - is refreshed. If `persisted` is truthy and\n * hasn't changed from its previous value, any `persisted_props` that the\n * user has changed while using the app will keep those changes, as long as\n * the new prop value also matches what was given originally.\n * Used in conjunction with `persistence_type` and `persisted_props`.\n */\n persistence: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string, _propTypes2.default.number]),\n\n /**\n * Properties whose user interactions will persist after refreshing the\n * component or the page.\n */\n persisted_props: _propTypes2.default.arrayOf(_propTypes2.default.oneOf(['elements', 'stylesheet', 'layout'])),\n\n /**\n * Where persisted user changes will be stored:\n * memory: only kept in memory, reset on page refresh.\n * local: window.localStorage, data is kept after the browser quit.\n * session: window.sessionStorage, data is cleared once the browser quit.\n */\n persistence_type: _propTypes2.default.oneOf(['local', 'session', 'memory'])\n};\n\nCytoscape.defaultProps = {\n style: { width: '600px', height: '600px' },\n layout: { name: 'grid' },\n pan: { x: 0, y: 0 },\n zoom: 1,\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: true,\n userZoomingEnabled: true,\n panningEnabled: true,\n userPanningEnabled: true,\n boxSelectionEnabled: false,\n autolock: false,\n autoungrabify: false,\n autounselectify: false,\n autoRefreshLayout: true,\n generateImage: {},\n imageData: null,\n responsive: false,\n elements: [],\n persisted_props: [],\n persistence_type: 'local'\n};\n\nvar defaultPersistenceTransform = {\n extract: function extract(propValue) {\n return propValue;\n },\n apply: function apply(storedValue) {\n return storedValue;\n }\n};\n\nCytoscape.persistenceTransforms = {\n elements: defaultPersistenceTransform,\n stylesheet: defaultPersistenceTransform,\n layout: defaultPersistenceTransform\n\n};\n\nexports.default = Cytoscape;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXNoX2N5dG9zY2FwZS8uL3NyYy9saWIvY29tcG9uZW50cy9DeXRvc2NhcGUucmVhY3QuanM/NjQyYyJdLCJuYW1lcyI6WyJDeXRvc2NhcGUiLCJwcm9wcyIsImhhbmRsZUN5IiwiYmluZCIsIl9oYW5kbGVDeUNhbGxlZCIsImhhbmRsZUltYWdlR2VuZXJhdGlvbiIsImN5UmVzcG9uc2l2ZUNsYXNzIiwiZXZlbnQiLCJlbGUiLCJ0YXJnZXQiLCJpc1BhcmVudCIsImlzQ2hpbGRsZXNzIiwiaXNDaGlsZCIsImlzT3JwaGFuIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbGF0aXZlUG9zaXRpb24iLCJwYXJlbnQiLCJzdHlsZSIsImVkZ2VzRGF0YSIsImNvbm5lY3RlZEVkZ2VzIiwibWFwIiwiZGF0YSIsImNoaWxkcmVuRGF0YSIsImNoaWxkcmVuIiwiYW5jZXN0b3JzRGF0YSIsImFuY2VzdG9ycyIsImRlc2NlbmRhbnRzRGF0YSIsImRlc2NlbmRhbnRzIiwic2libGluZ3NEYXRhIiwic2libGluZ3MiLCJ0aW1lU3RhbXAiLCJqc29uIiwiY2xhc3NlcyIsImdyYWJiYWJsZSIsImdyb3VwIiwibG9ja2VkIiwicG9zaXRpb24iLCJzZWxlY3RlZCIsInNlbGVjdGFibGUiLCJwYXJlbnREYXRhIiwibm9kZU9iamVjdCIsIm1pZHBvaW50IiwiaXNMb29wIiwiaXNTaW1wbGUiLCJzb3VyY2VEYXRhIiwic291cmNlIiwic291cmNlRW5kcG9pbnQiLCJ0YXJnZXREYXRhIiwidGFyZ2V0RW5kcG9pbnQiLCJlZGdlT2JqZWN0IiwiY3kiLCJfY3kiLCJ3aW5kb3ciLCJTRUxFQ1RfVEhSRVNIT0xEIiwic2VsZWN0ZWROb2RlcyIsImNvbGxlY3Rpb24iLCJzZWxlY3RlZEVkZ2VzIiwicmVmcmVzaExheW91dCIsIl8iLCJkZWJvdW5jZSIsImF1dG9SZWZyZXNoTGF5b3V0IiwibGF5b3V0IiwicnVuIiwic2VuZFNlbGVjdGVkTm9kZXNEYXRhIiwibm9kZURhdGEiLCJlbCIsInNldFByb3BzIiwic2VsZWN0ZWROb2RlRGF0YSIsInNlbmRTZWxlY3RlZEVkZ2VzRGF0YSIsImVkZ2VEYXRhIiwic2VsZWN0ZWRFZGdlRGF0YSIsIm9uIiwiZ2VuZXJhdGVOb2RlIiwidGFwTm9kZSIsInRhcE5vZGVEYXRhIiwiZ2VuZXJhdGVFZGdlIiwidGFwRWRnZSIsInRhcEVkZ2VEYXRhIiwibW91c2VvdmVyTm9kZURhdGEiLCJtb3VzZW92ZXJFZGdlRGF0YSIsIm1lcmdlIiwidW5tZXJnZSIsIkN5UmVzcG9uc2l2ZSIsInRvZ2dsZSIsInJlc3BvbnNpdmUiLCJpbWFnZVR5cGUiLCJpbWFnZU9wdGlvbnMiLCJhY3Rpb25zVG9QZXJmb3JtIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiZGVzaXJlZE91dHB1dCIsIm91dHB1dCIsImRvd25sb2FkSW1hZ2UiLCJzdG9yZUltYWdlIiwicG5nIiwianBnIiwic3ZnIiwiZk5hbWUiLCJkb3dubG9hZEJsb2IiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiY2FsbGJhY2tEYXRhIiwicmVzdWx0IiwicmVwbGFjZSIsImltYWdlRGF0YSIsInJlYWRBc0RhdGFVUkwiLCJkb3dubG9hZExpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJocmVmIiwiZG93bmxvYWQiLCJjbGljayIsInJldm9rZU9iamVjdFVSTCIsInJlbW92ZUNoaWxkIiwiaWQiLCJjbGFzc05hbWUiLCJlbGVtZW50cyIsInN0eWxlc2hlZXQiLCJwYW4iLCJ6b29tIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG91bmdyYWJpZnkiLCJhdXRvbG9jayIsImF1dG91bnNlbGVjdGlmeSIsImdlbmVyYXRlSW1hZ2UiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYWN0aW9uIiwiZmlsZW5hbWUiLCJDeXRvc2NhcGVDb21wb25lbnQiLCJub3JtYWxpemVFbGVtZW50cyIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm9iamVjdCIsImZ1bmMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwic2hhcGUiLCJsYWJlbCIsIngiLCJudW1iZXIiLCJ5IiwiYm9vbCIsImV4YWN0Iiwibm9kZXMiLCJhcnJheSIsImVkZ2VzIiwic2VsZWN0b3IiLCJpc1JlcXVpcmVkIiwibmFtZSIsIm9uZU9mIiwiZml0IiwicGFkZGluZyIsImFuaW1hdGUiLCJhbmltYXRpb25EdXJhdGlvbiIsImJvdW5kaW5nQm94IiwicGVyc2lzdGVuY2UiLCJwZXJzaXN0ZWRfcHJvcHMiLCJwZXJzaXN0ZW5jZV90eXBlIiwiZGVmYXVsdFByb3BzIiwid2lkdGgiLCJoZWlnaHQiLCJkZWZhdWx0UGVyc2lzdGVuY2VUcmFuc2Zvcm0iLCJleHRyYWN0IiwicHJvcFZhbHVlIiwiYXBwbHkiLCJzdG9yZWRWYWx1ZSIsInBlcnNpc3RlbmNlVHJhbnNmb3JtcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7Ozs7Ozs7OytlQVRBOzs7Ozs7QUFXQTs7OztJQUlNQSxTOzs7QUFDRix1QkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLDBIQUNUQSxLQURTOztBQUdmLGNBQUtDLFFBQUwsR0FBZ0IsTUFBS0EsUUFBTCxDQUFjQyxJQUFkLE9BQWhCO0FBQ0EsY0FBS0MsZUFBTCxHQUF1QixLQUF2QjtBQUNBLGNBQUtDLHFCQUFMLEdBQTZCLE1BQUtBLHFCQUFMLENBQTJCRixJQUEzQixPQUE3QjtBQUNBLGNBQUtHLGlCQUFMLEdBQXlCLEtBQXpCO0FBTmU7QUFPbEI7Ozs7cUNBRVlDLEssRUFBTztBQUNoQixnQkFBTUMsTUFBTUQs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QUcsQ0FBSixFQUFPRSxHQUFHLENBQVYsRUFIZ0I7QUFJckIvQixVQUFNLENBSmU7QUFLckJHLGFBQVMsS0FMWTtBQU1yQkMsYUFBUyxJQU5ZO0FBT3JCQyxvQkFBZ0IsSUFQSztBQVFyQkMsd0JBQW9CLElBUkM7QUFTckJMLG9CQUFnQixJQVRLO0FBVXJCQyx3QkFBb0IsSUFWQztBQVdyQksseUJBQXFCLEtBWEE7QUFZckJFLGNBQVUsS0FaVztBQWFyQkQsbUJBQWUsS0FiTTtBQWNyQkUscUJBQWlCLEtBZEk7QUFlckI5RSx1QkFBbUIsSUFmRTtBQWdCckIrRSxtQkFBZSxFQWhCTTtBQWlCckIvQixlQUFXLElBakJVO0FBa0JyQnhCLGdCQUFZLEtBbEJTO0FBbUJyQnlDLGNBQVUsRUFuQlc7QUFvQnJCa0QscUJBQWlCLEVBcEJJO0FBcUJyQkMsc0JBQWtCO0FBckJHLENBQXpCOztBQXdCQSxJQUFNSSw4QkFBOEI7QUFDaENDLGFBQVM7QUFBQSxlQUFhQyxTQUFiO0FBQUEsS0FEdUI7QUFFaENDLFdBQU87QUFBQSxlQUFlQyxXQUFmO0FBQUE7QUFGeUIsQ0FBcEM7O0FBS0F4TCxVQUFVeUwscUJBQVYsR0FBa0M7QUFDOUI1RCxjQUFVdUQsMkJBRG9CO0FBRTlCdEQsZ0JBQVlzRCwyQkFGa0I7QUFHOUJ2SCxZQUFRdUg7O0FBSHNCLENBQWxDOztrQkFPZXBMLFMiLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvQ3l0b3NjYXBlLnJlYWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKYXZhU2NyaXB0IFJlcXVpcmVtZW50czogY3l0b3NjYXBlLCBjeXRvc2NhcGUtc3ZnXG4gKiBSZWFjdC5qcyByZXF1aXJlbWVudHM6IHJlYWN0LWN5dG9zY2FwZWpzXG4gKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDeXRvc2NhcGVDb21wb25lbnQgZnJvbSAncmVhY3QtY3l0b3NjYXBlanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IEN5UmVzcG9uc2l2ZSBmcm9tICcuLi9jeVJlc3BvbnNpdmUuanMnO1xuXG4vKipcbkEgQ29tcG9uZW50IExpYnJhcnkgZm9yIERhc2ggYWltZWQgYXQgZmFjaWxpdGF0aW5nIG5ldHdvcmsgdmlzdWFsaXphdGlvbiBpblxuUHl0aG9uLCB3cmFwcGVkIGFyb3VuZCBbQ3l0b3NjYXBlLmpzXShodHRwOi8vanMuY3l0b3NjYXBlLm9yZy8pLlxuICovXG5jbGFzcyBDeXRvc2NhcGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUN5ID0gdGhpcy5oYW5kbGVDeS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVDeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZUltYWdlR2VuZXJhdGlvbiA9IHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZU5vZGUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IGlzUGFyZW50ID0gZWxlLmlzUGFyZW50KCksXG4gICAgICAgICAgICBpc0NoaWxkbGVzcyA9IGVsZS5pc0NoaWxkbGVzcygpLFxuICAgICAgICAgICAgaXNDaGlsZCA9IGVsZS5pc0NoaWxkKCksXG4gICAgICAgICAgICBpc09ycGhhbiA9IGVsZS5pc09ycGhhbigpLFxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbiA9IGVsZS5yZW5kZXJlZFBvc2l0aW9uKCksXG4gICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uID0gZWxlLnJlbGF0aXZlUG9zaXRpb24oKSxcbiAgICAgICAgICAgIHBhcmVudCA9IGVsZS5wYXJlbnQoKSxcbiAgICAgICAgICAgIHN0eWxlID0gZWxlLnN0eWxlKCk7XG5cbiAgICAgICAgLy8gVHJpbSBkb3duIHRoZSBlbGVtZW50IG9iamVjdHMgdG8gb25seSB0aGUgZGF0YSBjb250YWluZWRcbiAgICAgICAgY29uc3QgZWRnZXNEYXRhID0gZWxlLmNvbm5lY3RlZEVkZ2VzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YSA9IGVsZS5jaGlsZHJlbigpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhbmNlc3RvcnNEYXRhID0gZWxlLmFuY2VzdG9ycygpLm1hcChlbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZXNjZW5kYW50c0RhdGEgPSBlbGUuZGVzY2VuZGFudHMoKS5tYXAoZWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2libGluZ3NEYXRhID0gZWxlLnNpYmxpbmdzKCkubWFwKGVsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7dGltZVN0YW1wfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGdyYWJiYWJsZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgbG9ja2VkLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGVcbiAgICAgICAgfSA9IGVsZS5qc29uKCk7XG5cbiAgICAgICAgbGV0IHBhcmVudERhdGE7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudERhdGEgPSBwYXJlbnQuZGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50RGF0YSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlT2JqZWN0ID0ge1xuICAgICAgICAgICAgLy8gTm9kZXMgYXR0cmlidXRlc1xuICAgICAgICAgICAgZWRnZXNEYXRhLFxuICAgICAgICAgICAgcmVuZGVyZWRQb3NpdGlvbixcbiAgICAgICAgICAgIHRpbWVTdGFtcCxcbiAgICAgICAgICAgIC8vIEZyb20gZWxlLmpzb24oKVxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgLy8gQ29tcG91bmQgTm9kZXMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBhbmNlc3RvcnNEYXRhLFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhLFxuICAgICAgICAgICAgZGVzY2VuZGFudHNEYXRhLFxuICAgICAgICAgICAgcGFyZW50RGF0YSxcbiAgICAgICAgICAgIHNpYmxpbmdzRGF0YSxcbiAgICAgICAgICAgIGlzUGFyZW50LFxuICAgICAgICAgICAgaXNDaGlsZGxlc3MsXG4gICAgICAgICAgICBpc0NoaWxkLFxuICAgICAgICAgICAgaXNPcnBoYW4sXG4gICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uLFxuICAgICAgICAgICAgLy8gU3R5bGluZ1xuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5vZGVPYmplY3Q7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVFZGdlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZSA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICBjb25zdCBtaWRwb2ludCA9IGVsZS5taWRwb2ludCgpLFxuICAgICAgICAgICAgaXNMb29wID0gZWxlLmlzTG9vcCgpLFxuICAgICAgICAgICAgaXNTaW1wbGUgPSBlbGUuaXNTaW1wbGUoKSxcbiAgICAgICAgICAgIHNvdXJjZURhdGEgPSBlbGUuc291cmNlKCkuZGF0YSgpLFxuICAgICAgICAgICAgc291cmNlRW5kcG9pbnQgPSBlbGUuc291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgICAgIHN0eWxlID0gZWxlLnN0eWxlKCksXG4gICAgICAgICAgICB0YXJnZXREYXRhID0gZWxlLnRhcmdldCgpLmRhdGEoKSxcbiAgICAgICAgICAgIHRhcmdldEVuZHBvaW50ID0gZWxlLnRhcmdldEVuZHBvaW50KCk7XG5cbiAgICAgICAgY29uc3Qge3RpbWVTdGFtcH0gPSBldmVudDtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICB9ID0gZWxlLmpzb24oKTtcblxuICAgICAgICBjb25zdCBlZGdlT2JqZWN0ID0ge1xuICAgICAgICAgICAgLy8gRWRnZXMgYXR0cmlidXRlc1xuICAgICAgICAgICAgaXNMb29wLFxuICAgICAgICAgICAgaXNTaW1wbGUsXG4gICAgICAgICAgICBtaWRwb2ludCxcbiAgICAgICAgICAgIHNvdXJjZURhdGEsXG4gICAgICAgICAgICBzb3VyY2VFbmRwb2ludCxcbiAgICAgICAgICAgIHRhcmdldERhdGEsXG4gICAgICAgICAgICB0YXJnZXRFbmRwb2ludCxcbiAgICAgICAgICAgIHRpbWVTdGFtcCxcbiAgICAgICAgICAgIC8vIEZyb20gZWxlLmpzb24oKVxuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBncmFiYmFibGUsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgIGxvY2tlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIC8vIFN0eWxpbmdcbiAgICAgICAgICAgIHN0eWxlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGVkZ2VPYmplY3Q7XG4gICAgfVxuXG4gICAgaGFuZGxlQ3koY3kpIHtcbiAgICAgICAgLy8gSWYgdGhlIGN5IHBvaW50ZXIgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBhbmQgaGFuZGxlQ3kgaGFzIGFscmVhZHlcbiAgICAgICAgLy8gYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGFuIHdlIGRvbid0IHJ1biB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY3kgPT09IHRoaXMuX2N5ICYmIHRoaXMuX2hhbmRsZUN5Q2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3kgPSBjeTtcbiAgICAgICAgd2luZG93LmN5ID0gY3k7XG4gICAgICAgIHRoaXMuX2hhbmRsZUN5Q2FsbGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIENPTlNUQU5UUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICBjb25zdCBTRUxFQ1RfVEhSRVNIT0xEID0gMTAwO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGVU5DVElPTlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgY29uc3QgcmVmcmVzaExheW91dCA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZWZyZXNoIExheW91dCBpZiBuZWVkZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3Qge2F1dG9SZWZyZXNoTGF5b3V0LCBsYXlvdXR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICAgICAgaWYgKGF1dG9SZWZyZXNoTGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgY3kubGF5b3V0KGxheW91dCkucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRTZWxlY3RlZE5vZGVzRGF0YSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZXBldGl0aXZlbHkgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBub2RlIGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAgb3IgdW5zZWxlY3RlZCwgYnV0IGtlZXBzIGJlaW5nIGRlYm91bmNlZCBpZiBpdCBpcyBjYWxsZWQgYWdhaW5cbiAgICAgICAgICAgICB3aXRoaW4gMTAwIG1zIChnaXZlbiBieSBTRUxFQ1RfVEhSRVNIT0xEKS4gRWZmZWN0aXZlbHksIGl0IG9ubHlcbiAgICAgICAgICAgICBydW5zIHdoZW4gYWxsIHRoZSBub2RlcyBoYXZlIGJlZW4gY29ycmVjdGx5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgYW5kXG4gICAgICAgICAgICAgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RlZE5vZGVzIGNvbGxlY3Rpb24sIGFuZCB0aGVuIHVwZGF0ZXNcbiAgICAgICAgICAgICB0aGUgc2VsZWN0ZWROb2RlRGF0YSBwcm9wLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBub2RlRGF0YSA9IHNlbGVjdGVkTm9kZXMubWFwKGVsID0+IGVsLmRhdGEoKSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE5vZGVEYXRhOiBub2RlRGF0YVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBTRUxFQ1RfVEhSRVNIT0xEKTtcblxuICAgICAgICBjb25zdCBzZW5kU2VsZWN0ZWRFZGdlc0RhdGEgPSBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gc2VsZWN0ZWRFZGdlcy5tYXAoZWwgPT4gZWwuZGF0YSgpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnNldFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWRnZURhdGE6IGVkZ2VEYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFNFTEVDVF9USFJFU0hPTEQpO1xuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFVkVOVFMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIGN5Lm9uKCd0YXAnLCAnbm9kZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYmplY3QgPSB0aGlzLmdlbmVyYXRlTm9kZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICB0YXBOb2RlOiBub2RlT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXBOb2RlRGF0YTogbm9kZU9iamVjdC5kYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCd0YXAnLCAnZWRnZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VPYmplY3QgPSB0aGlzLmdlbmVyYXRlRWRnZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICB0YXBFZGdlOiBlZGdlT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXBFZGdlRGF0YTogZWRnZU9iamVjdC5kYXRhXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdtb3VzZW92ZXInLCAnbm9kZScsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5zZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBtb3VzZW92ZXJOb2RlRGF0YTogZXZlbnQudGFyZ2V0LmRhdGEoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignbW91c2VvdmVyJywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuc2V0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnNldFByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VvdmVyRWRnZURhdGE6IGV2ZW50LnRhcmdldC5kYXRhKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3NlbGVjdCcsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLm1lcmdlKGVsZSk7XG4gICAgICAgICAgICBzZW5kU2VsZWN0ZWROb2Rlc0RhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3kub24oJ3Vuc2VsZWN0IHJlbW92ZScsICdub2RlJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLnVubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZE5vZGVzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbignc2VsZWN0JywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkRWRnZXMubWVyZ2UoZWxlKTtcbiAgICAgICAgICAgIHNlbmRTZWxlY3RlZEVkZ2VzRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjeS5vbigndW5zZWxlY3QgcmVtb3ZlJywgJ2VkZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkRWRnZXMudW5tZXJnZShlbGUpO1xuICAgICAgICAgICAgc2VuZFNlbGVjdGVkRWRnZXNEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN5Lm9uKCdhZGQgcmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaExheW91dCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmN5UmVzcG9uc2l2ZUNsYXNzID0gbmV3IEN5UmVzcG9uc2l2ZShjeSk7XG4gICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MudG9nZ2xlKHRoaXMucHJvcHMucmVzcG9uc2l2ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW1hZ2VHZW5lcmF0aW9uKGltYWdlVHlwZSwgaW1hZ2VPcHRpb25zLCBhY3Rpb25zVG9QZXJmb3JtLCBmaWxlTmFtZSkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAoaW1hZ2VPcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gaW1hZ2VPcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRlc2lyZWRPdXRwdXQgPSBvcHRpb25zLm91dHB1dDtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXQgPSAnYmxvYic7XG5cbiAgICAgICAgbGV0IGRvd25sb2FkSW1hZ2U7XG4gICAgICAgIGxldCBzdG9yZUltYWdlO1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbnNUb1BlcmZvcm0pIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0b3JlJzpcbiAgICAgICAgICAgICAgICBkb3dubG9hZEltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkb3dubG9hZCc6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgICAgICAgZG93bmxvYWRJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RvcmVJbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGRvd25sb2FkSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdG9yZUltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGlmIChpbWFnZVR5cGUgPT09ICdwbmcnKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSB0aGlzLl9jeS5wbmcob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltYWdlVHlwZSA9PT0gJ2pwZycgfHwgaW1hZ2VUeXBlID09PSAnanBlZycpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2N5LmpwZyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvbmx5IHdvcmtzIHdoZW4gc3ZnIGlzIGltcG9ydGVkIChzZWUgbGliL2V4dHJhX2luZGV4LmpzKVxuICAgICAgICBpZiAoaW1hZ2VUeXBlID09PSAnc3ZnJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gdGhpcy5fY3kuc3ZnKG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogSWYgb3V0cHV0IGlzIGVtcHR5IGJlY2F1c2Ugb2YgYmFkIG9wdGlvbnMgb3IgYSBjeXRvc2NhcGUgZXJyb3IsXG4gICAgICAgICAqIHNraXAgYW55IGRvd25sb2FkIG9yIHN0b3JhZ2Ugc3RlcHMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAob3V0cHV0ICYmIGRvd25sb2FkSW1hZ2UpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBEb3dubG9hZGluZyBpcyBpbml0aWF0ZWQgY2xpZW50LXNpZGUgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgZ2VuZXJhdGVkIGF0XG4gICAgICAgICAgICAgKiB0aGUgY2xpZW50LiBUaGlzIGF2b2lkcyB0cmFuc2ZlcnJpbmcgYSBwb3RlbnRpYWxseSBsYXJnZSBpbWFnZVxuICAgICAgICAgICAgICogdG8gdGhlIHNlcnZlciBhbmQgYmFjayBhZ2FpbiB0aHJvdWdoIGEgY2FsbGJhY2suXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCBmTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGZOYW1lID0gJ2N5dG8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW1hZ2VUeXBlICE9PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRCbG9iKG91dHB1dCwgZk5hbWUgKyAnLicgKyBpbWFnZVR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW291dHB1dF0sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmTmFtZSArICcuJyArIGltYWdlVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3V0cHV0ICYmIHN0b3JlSW1hZ2UpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgb3V0cHV0IHR5cGUgaWYgdW5zcGVjaWZpZWRcbiAgICAgICAgICAgIGlmICghZGVzaXJlZE91dHB1dCkge1xuICAgICAgICAgICAgICAgIGRlc2lyZWRPdXRwdXQgPSAnYmFzZTY0dXJpJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NHVyaScgfHwgZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NCcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBDb252ZXJ0IGJsb2IgdG8gYmFzZTY0dXJpIG9yIGJhc2U2NCBzdHJpbmcgdG8gc3RvcmUgdGhlIGltYWdlIGRhdGEuXG4gICAgICAgICAgICAgKiBUaGFuayB5b3UsIGJhc2U2NGd1cnUgaHR0cHM6Ly9iYXNlNjQuZ3VydS9kZXZlbG9wZXJzL2phdmFzY3JpcHQvZXhhbXBsZXMvZW5jb2RlLWJsb2JcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogRmlsZVJlYWRlciBpcyBhc3luY2hyb25vdXMsIHNvIHRoZSByZWFkIGZ1bmN0aW9uIGlzIG5vbi1ibG9ja2luZy5cbiAgICAgICAgICAgICAgICAgKiBJZiB0aGlzIGNvZGUgYmxvY2sgaXMgcGxhY2VkIGFmdGVyIHRoZSByZWFkIGNvbW1hbmQsIGl0XG4gICAgICAgICAgICAgICAgICogbWF5IHJlc3VsdCBpbiBlbXB0eSBvdXRwdXQgYmVjYXVzZSB0aGUgYmxvYiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2tEYXRhID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZE91dHB1dCA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhID0gY2FsbGJhY2tEYXRhLnJlcGxhY2UoL15kYXRhOi4rO2Jhc2U2NCwvLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0UHJvcHMoe2ltYWdlRGF0YTogY2FsbGJhY2tEYXRhfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwob3V0cHV0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBEb3dubG9hZCBibG9iIGFzIGZpbGUgYnkgZHluYW1pY2FsbHkgY3JlYXRpbmcgbGluay5cbiAgICAgICAgICogQ2hyb21lIGRvZXMgbm90IG9wZW4gZGF0YSBVUkxzIHdoZW4gSlMgb3BlbnMgYSBuZXcgdGFiIGRpcmVjdGVkXG4gICAgICAgICAqIGF0IHRoZSBkYXRhIFVSTCwgc28gdGhpcyBpcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICogdGhhdCBkb2Vzbid0IHJlcXVpcmUgZXh0cmEgcGFja2FnZXMuIEl0IG1heSBub3QgYmVoYXZlIGluXG4gICAgICAgICAqIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFjcm9zcyBicm93c2VycyAobWlnaHQgZGlzcGxheSBpbWFnZSBpbiBuZXcgdGFiXG4gICAgICAgICAqIGludGVhZCBvZiBkb3dubG9hZGluZyBhcyBhIGZpbGUpLlxuICAgICAgICAgKiBUaGFuayB5b3UsIGtvbGRldiBodHRwczovL2pzZmlkZGxlLm5ldC9rb2xkZXYvY1c3VzUvXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvd25sb2FkTGluay5zdHlsZSA9ICdkaXNwbGF5OiBub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZExpbmspO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgZG93bmxvYWRMaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG93bmxvYWRMaW5rKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIC8vIEhUTUwgYXR0cmlidXRlIHByb3BzXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgLy8gQ29tbW9uIHByb3BzXG4gICAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICAgIHN0eWxlc2hlZXQsXG4gICAgICAgICAgICBsYXlvdXQsXG4gICAgICAgICAgICAvLyBWaWV3cG9ydCBNYW5pcHVsYXRpb25cbiAgICAgICAgICAgIHBhbixcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICAvLyBWaWV3cG9ydCBNdXRhYmlsaXR5IGFuZCBnZXN0dXJlIFRvZ2dsaW5nXG4gICAgICAgICAgICBwYW5uaW5nRW5hYmxlZCxcbiAgICAgICAgICAgIHVzZXJQYW5uaW5nRW5hYmxlZCxcbiAgICAgICAgICAgIG1pblpvb20sXG4gICAgICAgICAgICBtYXhab29tLFxuICAgICAgICAgICAgem9vbWluZ0VuYWJsZWQsXG4gICAgICAgICAgICB1c2VyWm9vbWluZ0VuYWJsZWQsXG4gICAgICAgICAgICBib3hTZWxlY3Rpb25FbmFibGVkLFxuICAgICAgICAgICAgYXV0b3VuZ3JhYmlmeSxcbiAgICAgICAgICAgIGF1dG9sb2NrLFxuICAgICAgICAgICAgYXV0b3Vuc2VsZWN0aWZ5LFxuICAgICAgICAgICAgLy8gSW1hZ2UgaGFuZGxpbmdcbiAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UsXG4gICAgICAgICAgICAvLyBSZXNwb25zaXZlIGdyYXBoc1xuICAgICAgICAgICAgcmVzcG9uc2l2ZVxuICAgICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZ2VuZXJhdGVJbWFnZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgbm8gY3l0b3NjYXBlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkIHlldCwgYW4gaW1hZ2UgY2Fubm90IGJlIGdlbmVyYXRlZCxcbiAgICAgICAgICAgIC8vIHNvIGdlbmVyYXRlSW1hZ2Ugd2lsbCBiZSBpZ25vcmVkIGFuZCBjbGVhcmVkLlxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXRQcm9wcyh7Z2VuZXJhdGVJbWFnZToge319KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW1hZ2VHZW5lcmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUltYWdlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2Uub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVJbWFnZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlSW1hZ2UuZmlsZW5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMuY3lSZXNwb25zaXZlQ2xhc3MudG9nZ2xlKHJlc3BvbnNpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDeXRvc2NhcGVDb21wb25lbnRcbiAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgY3k9e3RoaXMuaGFuZGxlQ3l9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtDeXRvc2NhcGVDb21wb25lbnQubm9ybWFsaXplRWxlbWVudHMoZWxlbWVudHMpfVxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQ9e3N0eWxlc2hlZXR9XG4gICAgICAgICAgICAgICAgbGF5b3V0PXtsYXlvdXR9XG4gICAgICAgICAgICAgICAgcGFuPXtwYW59XG4gICAgICAgICAgICAgICAgem9vbT17em9vbX1cbiAgICAgICAgICAgICAgICBwYW5uaW5nRW5hYmxlZD17cGFubmluZ0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgdXNlclBhbm5pbmdFbmFibGVkPXt1c2VyUGFubmluZ0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgbWluWm9vbT17bWluWm9vbX1cbiAgICAgICAgICAgICAgICBtYXhab29tPXttYXhab29tfVxuICAgICAgICAgICAgICAgIHpvb21pbmdFbmFibGVkPXt6b29taW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICB1c2VyWm9vbWluZ0VuYWJsZWQ9e3VzZXJab29taW5nRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBib3hTZWxlY3Rpb25FbmFibGVkPXtib3hTZWxlY3Rpb25FbmFibGVkfVxuICAgICAgICAgICAgICAgIGF1dG91bmdyYWJpZnk9e2F1dG91bmdyYWJpZnl9XG4gICAgICAgICAgICAgICAgYXV0b2xvY2s9e2F1dG9sb2NrfVxuICAgICAgICAgICAgICAgIGF1dG91bnNlbGVjdGlmeT17YXV0b3Vuc2VsZWN0aWZ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkN5dG9zY2FwZS5wcm9wVHlwZXMgPSB7XG4gICAgLy8gSFRNTCBhdHRyaWJ1dGUgcHJvcHNcblxuICAgIC8qKlxuICAgICAqIFRoZSBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgY29tcG9uZW50IGluIERhc2ggY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZWxlbWVudCAodGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQncyBodG1sXG4gICAgICogY2xhc3MgYXR0cmlidXRlKS5cbiAgICAgKi9cbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBBZGQgaW5saW5lIHN0eWxlcyB0byB0aGUgcm9vdCBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gICAgLy8gRGFzaCBzcGVjaWZpYyBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogRGFzaC1hc3NpZ25lZCBjYWxsYmFjayB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYW55IG9mIHRoZVxuICAgICAqIHByb3BlcnRpZXMgY2hhbmdlLlxuICAgICAqL1xuICAgIHNldFByb3BzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8vIENvbW1vbiBwcm9wc1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBuZXR3b3Jrcy4gRWFjaCBkaWN0aW9uYXJ5IGRlc2NyaWJlcyBhbiBlbGVtZW50LCBhbmRcbiAgICAgKiBzcGVjaWZpZXMgaXRzIHB1cnBvc2UuIFRoZSBbb2ZmaWNpYWwgQ3l0b3NjYXBlLmpzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vanMuY3l0b3NjYXBlLm9yZy8jbm90YXRpb24vZWxlbWVudHMtanNvbilcbiAgICAgKiBvZmZlcnMgYW4gZXh0ZW5zaXZlIG92ZXJ2aWV3IGFuZCBleGFtcGxlcyBvZiBlbGVtZW50IGRlY2xhcmF0aW9uLlxuICAgICAqIEFsdGVybmF0aXZlbHksIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBmb3JtYXQgeyAnbm9kZXMnOiBbXSwgJ2VkZ2VzJzogW10gfSBpcyBhbGxvd2VkIGF0IGluaXRpYWxpemF0aW9uLFxuICAgICAqIGJ1dCBhcnJheXMgcmVtYWluIHRoZSByZWNvbW1lbmRlZCBmb3JtYXQuXG4gICAgICovXG4gICAgZWxlbWVudHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgICAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRWl0aGVyICdub2Rlcycgb3IgJ2VkZ2VzJy4gSWYgbm90IGdpdmVuLCBpdCdzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICAgICAgLyoqIEVsZW1lbnQgc3BlY2lmaWMgZGF0YS4qL1xuICAgICAgICAgICAgICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAgICAgICAgIC8qKiAgUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50LCB1c2VmdWwgZm9yIHNlbGVjdG9ycyBhbmQgZWRnZXMuIFJhbmRvbWx5IGFzc2lnbmVkIGlmIG5vdCBnaXZlbi4qL1xuICAgICAgICAgICAgICAgICAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBlbGVtZW50LCB1c2VmdWwgd2hlbiBgZGF0YShsYWJlbClgIGlzIGdpdmVuIHRvIGEgc3R5bGUncyBgY29udGVudGBcbiAgICAgICAgICAgICAgICAgICAgICogb3IgYGxhYmVsYC4gSXQgaXMgb25seSBhIGNvbnZlbnRpb24uICovXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIE9wdGlvbmFsIHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUuIE5lZWRlZCB0byBjcmVhdGUgY29tcG91bmQgbm9kZXMuICovXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIGVkZ2VzLiBUaGUgaWQgb2YgdGhlIHNvdXJjZSBub2RlLCB3aGljaCBpcyB3aGVyZSB0aGUgZWRnZSBzdGFydHMuICovXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIGVkZ2VzLiBUaGUgaWQgb2YgdGhlIHRhcmdldCBub2RlLCB3aGVyZSB0aGUgZWRnZSBlbmRzLiAqL1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiogT25seSBmb3Igbm9kZXMuIFRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZS4gKi9cbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUuICovXG4gICAgICAgICAgICAgICAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIC8qKiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlLiAqL1xuICAgICAgICAgICAgICAgICAgICB5OiBQcm9wVHlwZXMubnVtYmVyXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIHVwb24gaW5pdGlhbGlzYXRpb24uICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIC8qKiBJZiB0aGUgZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQuICovXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIG5vZGVzLiBJZiB0aGUgcG9zaXRpb24gaXMgaW1tdXRhYmxlLiAqL1xuICAgICAgICAgICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICAgICAgLyoqIE9ubHkgZm9yIG5vZGVzLiBJZiB0aGUgbm9kZSBjYW4gYmUgZ3JhYmJlZCBhbmQgbW92ZWQgYnkgdGhlIHVzZXIuICovXG4gICAgICAgICAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBTcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNsYXNzIG5hbWVzIG9mIHRoZSBlbGVtZW50LiBUaG9zZSBjbGFzc2VzIGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAqIGJ5IGEgc3R5bGUgc2VsZWN0b3IuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgICAgIG5vZGVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgICAgICAgICBlZGdlczogUHJvcFR5cGVzLmFycmF5XG4gICAgICAgIH0pXG4gICAgXSksXG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyB0aGUgc3R5bGVzIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgKiBFYWNoIGRpY3Rpb25hcnkgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBrZXlzOiBgc2VsZWN0b3JgIGFuZCBgc3R5bGVgLlxuICAgICAqXG4gICAgICogQm90aCB0aGUgW3NlbGVjdG9yXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI3NlbGVjdG9ycykgYW5kXG4gICAgICogdGhlIFtzdHlsZV0oaHR0cHM6Ly9qcy5jeXRvc2NhcGUub3JnLyNzdHlsZS9ub2RlLWJvZHkpIGFyZVxuICAgICAqIGV4aGF1c3RpdmVseSBkb2N1bWVudGVkIGluIHRoZSBDeXRvc2NhcGUuanMgZG9jcy4gQWx0aG91Z2ggbWV0aG9kcyBzdWNoXG4gICAgICogYXMgYGN5LmVsZW1lbnRzKC4uLilgIGFuZCBgY3kuZmlsdGVyKC4uLilgIGFyZSBub3QgYXZhaWxhYmxlLCB0aGUgc2VsZWN0b3JcbiAgICAgKiBzdHJpbmcgc3ludGF4IHN0YXlzIHRoZSBzYW1lLlxuICAgICAqL1xuICAgIHN0eWxlc2hlZXQ6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGljaCBlbGVtZW50cyB5b3UgYXJlIHN0eWxpbmcuIEdlbmVyYWxseSwgeW91IHNlbGVjdCBhIGdyb3VwIG9mIGVsZW1lbnRzIChub2RlLCBlZGdlcywgYm90aCksXG4gICAgICAgICAgICAgKiBhIGNsYXNzICh0aGF0IHlvdSBkZWNsYXJlIGluIHRoZSBlbGVtZW50IGRpY3Rpb25hcnkpLCBvciBhbiBlbGVtZW50IGJ5IElELlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGF0IGFzcGVjdHMgb2YgdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIG1vZGlmeS4gVGhpcyBjb3VsZCBiZSB0aGUgc2l6ZSBvclxuICAgICAgICAgICAgICogY29sb3Igb2YgYSBub2RlLCB0aGUgc2hhcGUgb2YgYW4gZWRnZSBhcnJvdywgb3IgbWFueSBtb3JlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gICAgICAgIH0pXG4gICAgKSxcblxuICAgIC8qKlxuICAgICAqIEEgZGljdGlvbmFyeSBzcGVjaWZ5aW5nIGhvdyB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB5b3VyXG4gICAgICogZ3JhcGguIFRoZSBgJ25hbWUnYCBrZXkgaXMgcmVxdWlyZWQsIGFuZCBpbmRpY2F0ZXMgd2hpY2ggbGF5b3V0IChhbGdvcml0aG0pIHRvXG4gICAgICogdXNlLiBUaGUga2V5cyBhY2NlcHRlZCBieSBgbGF5b3V0YCB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgYWxnb3JpdGhtLCBidXQgdGhlc2VcbiAgICAgKiBrZXlzIGFyZSBhY2NlcHRlZCBieSBhbGwgbGF5b3V0czogYGZpdGAsICBgcGFkZGluZ2AsIGBhbmltYXRlYCwgYGFuaW1hdGlvbkR1cmF0aW9uYCxcbiAgICAgKiBgYm91bmRpbmdCb3hgLlxuICAgICAqXG4gICAgICogIFRoZSBjb21wbGV0ZSBsaXN0IG9mIGxheW91dHMgYW5kIHRoZWlyIGFjY2VwdGVkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgKiAgW0N5dG9zY2FwZS5qcyBkb2NzXShodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI2xheW91dHMpIC4gRm9yIHRoZSBleHRlcm5hbCBsYXlvdXRzLFxuICAgICAqIHRoZSBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlIFwiQVBJXCIgc2VjdGlvbiBvZiB0aGUgIFJFQURNRS5cbiAgICAgKiAgTm90ZSB0aGF0IGNlcnRhaW4ga2V5cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBEYXNoIHNpbmNlIHRoZSB2YWx1ZSBpcyBhIEphdmFTY3JpcHRcbiAgICAgKiAgZnVuY3Rpb24gb3IgYSBjYWxsYmFjay4gUGxlYXNlIHZpc2l0IHRoaXNcbiAgICAgKiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvZGFzaC1jeXRvc2NhcGUvaXNzdWVzLzI1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBsYXlvdXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbGF5b3V0cyBhdmFpbGFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICAgICAqICAgYHJhbmRvbWA6IFJhbmRvbWx5IGFzc2lnbnMgcG9zaXRpb25zLlxuICAgICAgICAgKiAgIGBwcmVzZXRgOiBBc3NpZ25zIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBgcG9zaXRpb25gIGtleSBpbiBlbGVtZW50IGRpY3Rpb25hcmllcy5cbiAgICAgICAgICogICBgY2lyY2xlYDogU2luZ2xlLWxldmVsIGNpcmNsZSwgd2l0aCBvcHRpb25hbCByYWRpdXMuXG4gICAgICAgICAqICAgYGNvbmNlbnRyaWNgOiBNdWx0aS1sZXZlbCBjaXJjbGUsIHdpdGggb3B0aW9uYWwgcmFkaXVzLlxuICAgICAgICAgKiAgIGBncmlkYDogU3F1YXJlIGdyaWQsIG9wdGlvbmFsbHkgd2l0aCBudW1iZXJzIG9mIGByb3dzYCBhbmQgYGNvbHNgLlxuICAgICAgICAgKiAgIGBicmVhZHRoZmlyc3RgOiBUcmVlIHN0cnVjdHVyZSBidWlsdCB1c2luZyBCRlMsIHdpdGggb3B0aW9uYWwgYHJvb3RzYC5cbiAgICAgICAgICogICBgY29zZWA6IEZvcmNlLWRpcmVjdGVkIHBoeXNpY3Mgc2ltdWxhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogU29tZSBleHRlcm5hbCBsYXlvdXRzIGFyZSBhbHNvIGluY2x1ZGVkLiBUbyB1c2UgdGhlbSwgcnVuXG4gICAgICAgICAqICAgYGRhc2hfY3l0b3NjYXBlLmxvYWRfZXh0cmFfbGF5b3V0cygpYCBiZWZvcmUgY3JlYXRpbmcgeW91ciBEYXNoIGFwcC4gQmUgY2FyZWZ1bCBhYm91dFxuICAgICAgICAgKiAgIHVzaW5nIHRoZSBleHRyYSBsYXlvdXRzIHdoZW4gbm90IG5lY2Vzc2FyeSwgc2luY2UgdGhleSByZXF1aXJlIHN1cHBsZW1lbnRhcnkgYmFuZHdpZHRoXG4gICAgICAgICAqICAgZm9yIGxvYWRpbmcsIHdoaWNoIGltcGFjdHMgdGhlIHN0YXJ0dXAgdGltZSBvZiB0aGUgYXBwLlxuICAgICAgICAgKiAgIFRoZSBleHRlcm5hbCBsYXlvdXRzIGFyZTpcbiAgICAgICAgICogICBbY29zZS1iaWxrZW50XShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1jb3NlLWJpbGtlbnQpLFxuICAgICAgICAgKiAgIFtjb2xhXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1jb2xhKSxcbiAgICAgICAgICogICBbZXVsZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9jeXRvc2NhcGUvY3l0b3NjYXBlLmpzLWRhZ3JlKSxcbiAgICAgICAgICogICBbc3ByZWFkXShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1zcHJlYWQpLFxuICAgICAgICAgKiAgIFtkYWdyZV0oaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtZGFncmUpLFxuICAgICAgICAgKiAgIFtrbGF5XShodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS5qcy1rbGF5KSxcbiAgICAgICAgICovXG4gICAgICAgIG5hbWU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICAgICAgICAncmFuZG9tJyxcbiAgICAgICAgICAgICdwcmVzZXQnLFxuICAgICAgICAgICAgJ2NpcmNsZScsXG4gICAgICAgICAgICAnY29uY2VudHJpYycsXG4gICAgICAgICAgICAnZ3JpZCcsXG4gICAgICAgICAgICAnYnJlYWR0aGZpcnN0JyxcbiAgICAgICAgICAgICdjb3NlJyxcbiAgICAgICAgICAgICdjbG9zZS1iaWxrZW50JyxcbiAgICAgICAgICAgICdjb2xhJyxcbiAgICAgICAgICAgICdldWxlcicsXG4gICAgICAgICAgICAnc3ByZWFkJyxcbiAgICAgICAgICAgICdkYWdyZScsXG4gICAgICAgICAgICAna2xheSdcbiAgICAgICAgXSkuaXNSZXF1aXJlZCxcbiAgICAgICAgLyoqICBXaGV0aGVyIHRvIHJlbmRlciB0aGUgbm9kZXMgaW4gb3JkZXIgdG8gZml0IHRoZSBjYW52YXMuICovXG4gICAgICAgIGZpdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgc2lkZXMgb2YgdGhlIGNhbnZhcywgaWYgZml0IGlzIGVuYWJsZWQuICovXG4gICAgICAgIHBhZGRpbmc6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBXaGV0aGVyIHRvIGFuaW1hdGUgY2hhbmdlIGluIHBvc2l0aW9uIHdoZW4gdGhlIGxheW91dCBjaGFuZ2VzLiAqL1xuICAgICAgICBhbmltYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIER1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMsIGlmIGVuYWJsZWQuICovXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAvKipcbiAgICAgICAgICogSG93IHRvIGNvbnN0cmFpbiB0aGUgbGF5b3V0IGluIGEgc3BlY2lmaWMgYXJlYS4gS2V5cyBhY2NlcHRlZCBhcmUgZWl0aGVyXG4gICAgICAgICAqIGB4MSwgeTEsIHgyLCB5MmAgb3IgYHgxLCB5MSwgdywgaGAsIGFsbCBvZiB3aGljaCByZWNlaXZlIGEgcGl4ZWwgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBib3VuZGluZ0JveDogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLFxuXG4gICAgLy8gVmlld3BvcnQgTWFuaXB1bGF0aW9uXG5cbiAgICAvKipcbiAgICAgKiBEaWN0aW9uYXJ5IGluZGljYXRpbmcgdGhlIGluaXRpYWwgcGFubmluZyBwb3NpdGlvbiBvZiB0aGUgZ3JhcGguIFRoZVxuICAgICAqIGZvbGxvd2luZyBrZXlzIGFyZSBhY2NlcHRlZDpcbiAgICAgKi9cbiAgICBwYW46IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBub2RlICovXG4gICAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlICAqL1xuICAgICAgICB5OiBQcm9wVHlwZXMubnVtYmVyXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCB6b29tIGxldmVsIG9mIHRoZSBncmFwaC4gWW91IGNhbiBzZXQgYG1pblpvb21gIGFuZFxuICAgICAqIGBtYXhab29tYCB0byBzZXQgcmVzdHJpY3Rpb25zIG9uIHRoZSB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIHpvb206IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgICAvLyBWaWV3cG9ydCBNdXRhYmlsaXR5IGFuZCBnZXN0dXJlIFRvZ2dsaW5nXG4gICAgLyoqXG4gICAgICogV2hldGhlciBwYW5uaW5nIHRoZSBncmFwaCBpcyBlbmFibGVkIChpLmUuLCB0aGUgcG9zaXRpb24gb2YgdGhlIGdyYXBoIGlzXG4gICAgICogbXV0YWJsZSBvdmVyYWxsKS5cbiAgICAgKi9cbiAgICBwYW5uaW5nRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgZXZlbnRzIChlLmcuIGRyYWdnaW5nIHRoZSBncmFwaCBiYWNrZ3JvdW5kKSBhcmUgYWxsb3dlZCB0b1xuICAgICAqIHBhbiB0aGUgZ3JhcGguXG4gICAgICovXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIEEgbWluaW11bSBib3VuZCBvbiB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGguIFRoZSB2aWV3cG9ydCBjYW4gbm90IGJlXG4gICAgICogc2NhbGVkIHNtYWxsZXIgdGhhbiB0aGlzIHpvb20gbGV2ZWwuXG4gICAgICovXG4gICAgbWluWm9vbTogUHJvcFR5cGVzLm51bWJlcixcblxuICAgIC8qKlxuICAgICAqIEEgbWF4aW11bSBib3VuZCBvbiB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGguIFRoZSB2aWV3cG9ydCBjYW4gbm90IGJlXG4gICAgICogc2NhbGVkIGxhcmdlciB0aGFuIHRoaXMgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBtYXhab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB6b29taW5nIHRoZSBncmFwaCBpcyBlbmFibGVkIChpLmUuLCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgZ3JhcGhcbiAgICAgKiBpcyBtdXRhYmxlIG92ZXJhbGwpLlxuICAgICAqL1xuICAgIHpvb21pbmdFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciBldmVudHMgKGUuZy4gZHJhZ2dpbmcgdGhlIGdyYXBoIGJhY2tncm91bmQpIGFyZSBhbGxvd2VkXG4gICAgICogdG8gcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBib3ggc2VsZWN0aW9uIChpLmUuIGRyYWcgYSBib3ggb3ZlcmxheSBhcm91bmQsIGFuZCByZWxlYXNlIGl0XG4gICAgICogdG8gc2VsZWN0KSBpcyBlbmFibGVkLiBJZiBlbmFibGVkLCB0aGUgdXNlciBtdXN0IHRhcGhvbGQgdG8gcGFuIHRoZSBncmFwaC5cbiAgICAgKi9cbiAgICBib3hTZWxlY3Rpb25FbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIHVuZ3JhYmlmaWVkIChub3QgZ3JhYmJhYmxlIGJ5IHVzZXIpIGJ5XG4gICAgICogZGVmYXVsdCAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgbm9kZSBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b3VuZ3JhYmlmeTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5vZGVzIHNob3VsZCBiZSBsb2NrZWQgKG5vdCBkcmFnZ2FibGUgYXQgYWxsKSBieSBkZWZhdWx0XG4gICAgICogKGlmIHRydWUsIG92ZXJyaWRlcyBpbmRpdmlkdWFsIG5vZGUgc3RhdGUpLlxuICAgICAqL1xuICAgIGF1dG9sb2NrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgbm9kZXMgc2hvdWxkIGJlIHVuc2VsZWN0aWZpZWQgKGltbXV0YWJsZSBzZWxlY3Rpb24gc3RhdGUpIGJ5XG4gICAgICogZGVmYXVsdCAoaWYgdHJ1ZSwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgZWxlbWVudCBzdGF0ZSkuXG4gICAgICovXG4gICAgYXV0b3Vuc2VsZWN0aWZ5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGxheW91dCBzaG91bGQgYmUgcmVmcmVzaGVkIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQuXG4gICAgICovXG4gICAgYXV0b1JlZnJlc2hMYXlvdXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLy8gVXNlciBFdmVudHMgUHJvcHNcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0ZSBub2RlIGRpY3Rpb25hcnkgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwTm9kZTogUHJvcFR5cGVzLmV4YWN0KHtcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBlZGdlc0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBub2RlIHNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgcmVuZGVyZWRQb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIG5vZGUgc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICB0aW1lU3RhbXA6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGNsYXNzZXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGdyYWJiYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGdyb3VwOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBsb2NrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBJdGVtIGZvciBjb21wb3VuZCBub2RlcyAqL1xuICAgICAgICBhbmNlc3RvcnNEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgY2hpbGRyZW5EYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgZGVzY2VuZGFudHNEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgcGFyZW50RGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIHNpYmxpbmdzRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzUGFyZW50OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzQ2hpbGRsZXNzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEl0ZW0gZm9yIGNvbXBvdW5kIG5vZGVzICovXG4gICAgICAgIGlzQ2hpbGQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgaXNPcnBoYW46IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogSXRlbSBmb3IgY29tcG91bmQgbm9kZXMgKi9cbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZGljdGlvbmFyeSBvZiBhIG5vZGUgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwTm9kZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29tcGxldGUgZWRnZSBkaWN0aW9uYXJ5IHJldHVybmVkIHdoZW4geW91IHRhcCBvciBjbGljayBpdC4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHRhcEVkZ2U6IFByb3BUeXBlcy5leGFjdCh7XG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgaXNMb29wOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBpc1NpbXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgbWlkcG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIC8qKiBFZGdlLXNwZWNpZmljIGl0ZW0gKi9cbiAgICAgICAgc291cmNlRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICBzb3VyY2VFbmRwb2ludDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEVkZ2Utc3BlY2lmaWMgaXRlbSAqL1xuICAgICAgICB0YXJnZXREYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRhcmdldEVuZHBvaW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKiogRWRnZS1zcGVjaWZpYyBpdGVtICovXG4gICAgICAgIHRpbWVTdGFtcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgY2xhc3NlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JhYmJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgLyoqIEdlbmVyYWwgaXRlbSAoZm9yIGFsbCBlbGVtZW50cykgKi9cbiAgICAgICAgZ3JvdXA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIGxvY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAvKiogR2VuZXJhbCBpdGVtIChmb3IgYWxsIGVsZW1lbnRzKSAqL1xuICAgICAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIC8qKiBHZW5lcmFsIGl0ZW0gKGZvciBhbGwgZWxlbWVudHMpICovXG4gICAgICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGFuIGVkZ2UgcmV0dXJuZWQgd2hlbiB5b3UgdGFwIG9yIGNsaWNrIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgdGFwRWRnZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGEgbm9kZSByZXR1cm5lZCB3aGVuIHlvdSBob3ZlciBvdmVyIGl0LiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgbW91c2VvdmVyTm9kZURhdGE6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBkaWN0aW9uYXJ5IG9mIGFuIGVkZ2UgcmV0dXJuZWQgd2hlbiB5b3UgaG92ZXIgb3ZlciBpdC4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIG1vdXNlb3ZlckVkZ2VEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZGF0YSBkaWN0aW9uYXJpZXMgb2YgYWxsIHNlbGVjdGVkIG5vZGVzIChlLmcuIHVzaW5nXG4gICAgICogU2hpZnQrQ2xpY2sgdG8gc2VsZWN0IG11bHRpcGxlIG5vZGVzLCBvciBTaGlmdCtEcmFnIHRvIHVzZSBib3ggc2VsZWN0aW9uKS4gUmVhZC1vbmx5LlxuICAgICAqL1xuICAgIHNlbGVjdGVkTm9kZURhdGE6IFByb3BUeXBlcy5hcnJheSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIGRhdGEgZGljdGlvbmFyaWVzIG9mIGFsbCBzZWxlY3RlZCBlZGdlcyAoZS5nLiB1c2luZ1xuICAgICAqIFNoaWZ0K0NsaWNrIHRvIHNlbGVjdCBtdWx0aXBsZSBub2Rlcywgb3IgU2hpZnQrRHJhZyB0byB1c2UgYm94IHNlbGVjdGlvbikuIFJlYWQtb25seS5cbiAgICAgKi9cbiAgICBzZWxlY3RlZEVkZ2VEYXRhOiBQcm9wVHlwZXMuYXJyYXksXG5cbiAgICAvKipcbiAgICAgKiBEaWN0aW9uYXJ5IHNwZWNpZnlpbmcgb3B0aW9ucyB0byBnZW5lcmF0ZSBhbiBpbWFnZSBvZiB0aGUgY3VycmVudCBjeXRvc2NhcGUgZ3JhcGguXG4gICAgICogVmFsdWUgaXMgY2xlYXJlZCBhZnRlciBkYXRhIGlzIHJlY2VpdmVkIGFuZCBpbWFnZSBpcyBnZW5lcmF0ZWQuIFRoaXMgcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIGlnbm9yZWQgb24gdGhlIGluaXRpYWwgY3JlYXRpb24gb2YgdGhlIGN5dG9zY2FwZSBvYmplY3QgYW5kIG11c3QgYmUgaW52b2tlZCB0aHJvdWdoXG4gICAgICogYSBjYWxsYmFjayBhZnRlciBpdCBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBhcHAgZG9lcyBub3QgbmVlZCB0aGUgaW1hZ2UgZGF0YSBzZXJ2ZXIgc2lkZSBhbmQvb3IgaXQgd2lsbCBvbmx5IGJlIHVzZWQgdG8gZG93bmxvYWRcbiAgICAgKiB0aGUgaW1hZ2UsIGl0IG1heSBiZSBwcnVkZW50IHRvIGludm9rZSBgJ2Rvd25sb2FkJ2AgZm9yIGBhY3Rpb25gIGluc3RlYWQgb2ZcbiAgICAgKiBgJ3N0b3JlJ2AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSBwcmV2ZW50aW5nIHRyYW5zZmVyIG9mIGRhdGEgdG8gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZUltYWdlOiBQcm9wVHlwZXMuZXhhY3Qoe1xuICAgICAgICAvKiogRmlsZSB0eXBlIHRvIG91dHB1dCAgKi9cbiAgICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFsnc3ZnJywgJ3BuZycsICdqcGcnLCAnanBlZyddKS5pc1JlcXVpcmVkLFxuICAgICAgICAvKiogRGljdGlvbmFyeSBvZiBvcHRpb25zIHRvIGN5LnBuZygpIC8gY3kuanBnKCkgb3IgY3kuc3ZnKCkgZm9yIGltYWdlIGdlbmVyYXRpb24uXG4gICAgICAgICAqIFNlZSBodHRwczovL2pzLmN5dG9zY2FwZS5vcmcvI2NvcmUvZXhwb3J0IGZvciBkZXRhaWxzLiBGb3IgYCdvdXRwdXQnYCwgb25seSAnYmFzZTY0J1xuICAgICAgICAgKiBhbmQgJ2Jhc2U2NHVyaScgYXJlIHN1cHBvcnRlZC4gRGVmYXVsdDogYHsnb3V0cHV0JzogJ2Jhc2U2NHVyaSd9YC4qL1xuICAgICAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICAvKipcbiAgICAgICAgICogYCdzdG9yZSdgOiBTdG9yZXMgdGhlIGltYWdlIGRhdGEgKG9ubHkganBnIGFuZCBwbmcgYXJlIHN1cHBvcnRlZClcbiAgICAgICAgICogaW4gYGltYWdlRGF0YWAgYW5kIGludm9rZXMgc2VydmVyLXNpZGUgRGFzaCBjYWxsYmFja3MuIGAnZG93bmxvYWQnYDogRG93bmxvYWRzIHRoZSBpbWFnZVxuICAgICAgICAgKiBhcyBhIGZpbGUgd2l0aCBhbGwgZGF0YSBoYW5kbGluZyBkb25lIGNsaWVudC1zaWRlLiBObyBgaW1hZ2VEYXRhYCBjYWxsYmFja3MgYXJlIGZpcmVkLlxuICAgICAgICAgKiBgJ2JvdGgnYDogU3RvcmVzIGltYWdlIGRhdGEgYW5kIGRvd25sb2FkcyBpbWFnZSBhcyBmaWxlLiBUaGUgZGVmYXVsdCBpcyBgJ3N0b3JlJ2BcbiAgICAgICAgICovXG4gICAgICAgIGFjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnc3RvcmUnLCAnZG93bmxvYWQnLCAnYm90aCddKSxcbiAgICAgICAgLyoqIE5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQuIERlZmF1bHQ6ICdjeXRvJy4qL1xuICAgICAgICBmaWxlbmFtZTogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbWFnZSByZXF1ZXN0ZWQgd2l0aCBnZW5lcmF0ZUltYWdlLiBOdWxsIGlmIG5vXG4gICAgICogaW1hZ2Ugd2FzIHJlcXVlc3RlZCB5ZXQgb3IgdGhlIHByZXZpb3VzIHJlcXVlc3QgZmFpbGVkLiBSZWFkLW9ubHkuXG4gICAgICovXG4gICAgaW1hZ2VEYXRhOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBpbnRlbGxpZ2VudCByZXNwb25zaXZlIHJlc2l6ZSBvZiBDeXRvc2NhcGUgZ3JhcGggd2l0aCB2aWV3cG9ydCBzaXplIGNoYW5nZVxuICAgICAqL1xuICAgIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBhbGxvdyB1c2VyIGludGVyYWN0aW9ucyBpbiB0aGlzIGNvbXBvbmVudCB0byBiZSBwZXJzaXN0ZWQgd2hlblxuICAgICAqIHRoZSBjb21wb25lbnQgLSBvciB0aGUgcGFnZSAtIGlzIHJlZnJlc2hlZC4gSWYgYHBlcnNpc3RlZGAgaXMgdHJ1dGh5IGFuZFxuICAgICAqIGhhc24ndCBjaGFuZ2VkIGZyb20gaXRzIHByZXZpb3VzIHZhbHVlLCBhbnkgYHBlcnNpc3RlZF9wcm9wc2AgdGhhdCB0aGVcbiAgICAgKiB1c2VyIGhhcyBjaGFuZ2VkIHdoaWxlIHVzaW5nIHRoZSBhcHAgd2lsbCBrZWVwIHRob3NlIGNoYW5nZXMsIGFzIGxvbmcgYXNcbiAgICAgKiB0aGUgbmV3IHByb3AgdmFsdWUgYWxzbyBtYXRjaGVzIHdoYXQgd2FzIGdpdmVuIG9yaWdpbmFsbHkuXG4gICAgICogVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBwZXJzaXN0ZW5jZV90eXBlYCBhbmQgYHBlcnNpc3RlZF9wcm9wc2AuXG4gICAgICovXG4gICAgcGVyc2lzdGVuY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgUHJvcFR5cGVzLm51bWJlcixcbiAgICBdKSxcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgd2hvc2UgdXNlciBpbnRlcmFjdGlvbnMgd2lsbCBwZXJzaXN0IGFmdGVyIHJlZnJlc2hpbmcgdGhlXG4gICAgICogY29tcG9uZW50IG9yIHRoZSBwYWdlLlxuICAgICAqL1xuICAgIHBlcnNpc3RlZF9wcm9wczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICAgIFByb3BUeXBlcy5vbmVPZihbJ2VsZW1lbnRzJywgJ3N0eWxlc2hlZXQnLCAnbGF5b3V0J10pXG4gICAgKSxcblxuICAgIC8qKlxuICAgICAqIFdoZXJlIHBlcnNpc3RlZCB1c2VyIGNoYW5nZXMgd2lsbCBiZSBzdG9yZWQ6XG4gICAgICogbWVtb3J5OiBvbmx5IGtlcHQgaW4gbWVtb3J5LCByZXNldCBvbiBwYWdlIHJlZnJlc2guXG4gICAgICogbG9jYWw6IHdpbmRvdy5sb2NhbFN0b3JhZ2UsIGRhdGEgaXMga2VwdCBhZnRlciB0aGUgYnJvd3NlciBxdWl0LlxuICAgICAqIHNlc3Npb246IHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgZGF0YSBpcyBjbGVhcmVkIG9uY2UgdGhlIGJyb3dzZXIgcXVpdC5cbiAgICAgKi9cbiAgICBwZXJzaXN0ZW5jZV90eXBlOiBQcm9wVHlwZXMub25lT2YoWydsb2NhbCcsICdzZXNzaW9uJywgJ21lbW9yeSddKSxcbn07XG5cbkN5dG9zY2FwZS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc3R5bGU6IHt3aWR0aDogJzYwMHB4JywgaGVpZ2h0OiAnNjAwcHgnfSxcbiAgICBsYXlvdXQ6IHtuYW1lOiAnZ3JpZCd9LFxuICAgIHBhbjoge3g6IDAsIHk6IDB9LFxuICAgIHpvb206IDEsXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IHRydWUsXG4gICAgcGFubmluZ0VuYWJsZWQ6IHRydWUsXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiB0cnVlLFxuICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGF1dG9sb2NrOiBmYWxzZSxcbiAgICBhdXRvdW5ncmFiaWZ5OiBmYWxzZSxcbiAgICBhdXRvdW5zZWxlY3RpZnk6IGZhbHNlLFxuICAgIGF1dG9SZWZyZXNoTGF5b3V0OiB0cnVlLFxuICAgIGdlbmVyYXRlSW1hZ2U6IHt9LFxuICAgIGltYWdlRGF0YTogbnVsbCxcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICBlbGVtZW50czogW10sXG4gICAgcGVyc2lzdGVkX3Byb3BzOiBbXSxcbiAgICBwZXJzaXN0ZW5jZV90eXBlOiAnbG9jYWwnLFxufTtcblxuY29uc3QgZGVmYXVsdFBlcnNpc3RlbmNlVHJhbnNmb3JtID0ge1xuICAgIGV4dHJhY3Q6IHByb3BWYWx1ZSA9PiBwcm9wVmFsdWUsXG4gICAgYXBwbHk6IHN0b3JlZFZhbHVlID0+IHN0b3JlZFZhbHVlLFxufTtcblxuQ3l0b3NjYXBlLnBlcnNpc3RlbmNlVHJhbnNmb3JtcyA9IHtcbiAgICBlbGVtZW50czogZGVmYXVsdFBlcnNpc3RlbmNlVHJhbnNmb3JtLFxuICAgIHN0eWxlc2hlZXQ6IGRlZmF1bHRQZXJzaXN0ZW5jZVRyYW5zZm9ybSxcbiAgICBsYXlvdXQ6IGRlZmF1bHRQZXJzaXN0ZW5jZVRyYW5zZm9ybVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEN5dG9zY2FwZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/Cytoscape.react.js\n"); /***/ }), diff --git a/dash_cytoscape/dash_cytoscape_extra.min.js b/dash_cytoscape/dash_cytoscape_extra.min.js index c978a343..fc1c7124 100644 --- a/dash_cytoscape/dash_cytoscape_extra.min.js +++ b/dash_cytoscape/dash_cytoscape_extra.min.js @@ -7,7 +7,7 @@ Licensed under The MIT License (http://opensource.org/licenses/MIT) var Mn=function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof e&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Mn.prototype={fulfill:function(t){return Dn(this,1,"fulfillValue",t)},reject:function(t){return Dn(this,2,"rejectReason",t)},then:function(t,e){var n=new Mn;return this.onFulfilled.push(Gn(t,n,"fulfill")),this.onRejected.push(Gn(e,n,"reject")),Rn(this),n.proxy}};var Dn=function(t,e,n,r){return 0===t.state&&(t.state=e,t[n]=r,Rn(t)),t},Rn=function(t){1===t.state?Bn(t,"onFulfilled",t.fulfillValue):2===t.state&&Bn(t,"onRejected",t.rejectReason)},Bn=function(t,n,r){if(0!==t[n].length){var i=t[n];t[n]=[];var o=function(){for(var t=0;t0:void 0}},clearQueue:function(){return function(){var t=void 0!==this.length?this:[this];if(!(this._private.cy||this).styleEnabled())return this;for(var e=0;e0&&this.spawn(n).updateStyle().emit("class"),this},addClass:function(t){return this.toggleClass(t,!0)},hasClass:function(t){var e=this[0];return null!=e&&e._private.classes.has(t)},toggleClass:function(t,e){x(t)||(t=t.match(/\S+/g)||[]);for(var n=void 0===e,r=[],i=0,o=this.length;i0&&this.spawn(r).updateStyle().emit("class"),this},removeClass:function(t){return this.toggleClass(t,!1)},flashClass:function(t,e){var n=this;if(null==e)e=250;else if(0===e)return n;return n.addClass(t),setTimeout((function(){n.removeClass(t)}),e),n}};Un.className=Un.classNames=Un.classes;var Xn={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:R,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Xn.variable="(?:[\\w-]|(?:\\\\"+Xn.metaChar+"))+",Xn.value=Xn.string+"|"+Xn.number,Xn.className=Xn.variable,Xn.id=Xn.variable,function(){var t,e,n;for(t=Xn.comparatorOp.split("|"),n=0;n=0||"="!==e&&(Xn.comparatorOp+="|\\!"+e)}();var Wn=0,$n=1,Kn=2,Zn=3,Qn=4,Jn=5,tr=6,er=7,nr=8,rr=9,ir=10,or=11,ar=12,sr=13,ur=14,cr=15,lr=16,fr=17,hr=18,dr=19,pr=20,gr=[{selector:":selected",matches:function(t){return t.selected()}},{selector:":unselected",matches:function(t){return!t.selected()}},{selector:":selectable",matches:function(t){return t.selectable()}},{selector:":unselectable",matches:function(t){return!t.selectable()}},{selector:":locked",matches:function(t){return t.locked()}},{selector:":unlocked",matches:function(t){return!t.locked()}},{selector:":visible",matches:function(t){return t.visible()}},{selector:":hidden",matches:function(t){return!t.visible()}},{selector:":transparent",matches:function(t){return t.transparent()}},{selector:":grabbed",matches:function(t){return t.grabbed()}},{selector:":free",matches:function(t){return!t.grabbed()}},{selector:":removed",matches:function(t){return t.removed()}},{selector:":inside",matches:function(t){return!t.removed()}},{selector:":grabbable",matches:function(t){return t.grabbable()}},{selector:":ungrabbable",matches:function(t){return!t.grabbable()}},{selector:":animated",matches:function(t){return t.animated()}},{selector:":unanimated",matches:function(t){return!t.animated()}},{selector:":parent",matches:function(t){return t.isParent()}},{selector:":childless",matches:function(t){return t.isChildless()}},{selector:":child",matches:function(t){return t.isChild()}},{selector:":orphan",matches:function(t){return t.isOrphan()}},{selector:":nonorphan",matches:function(t){return t.isChild()}},{selector:":compound",matches:function(t){return t.isNode()?t.isParent():t.source().isParent()||t.target().isParent()}},{selector:":loop",matches:function(t){return t.isLoop()}},{selector:":simple",matches:function(t){return t.isSimple()}},{selector:":active",matches:function(t){return t.active()}},{selector:":inactive",matches:function(t){return!t.active()}},{selector:":backgrounding",matches:function(t){return t.backgrounding()}},{selector:":nonbackgrounding",matches:function(t){return!t.backgrounding()}}].sort((function(t,e){return function(t,e){return-1*B(t,e)}(t.selector,e.selector)})),vr=function(){for(var t,e={},n=0;n0&&u.edgeCount>0)return pt("The selector `"+t+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return pt("The selector `"+t+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&pt("The selector `"+t+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var t=function(t){return null==t?"":t},e=function(e){return w(e)?'"'+e+'"':t(e)},n=function(t){return" "+t+" "},r=function(r,o){var a=r.type,s=r.value;switch(a){case Wn:var u=t(s);return u.substring(0,u.length-1);case Zn:var c=r.field,l=r.operator;return"["+c+n(t(l))+e(s)+"]";case Jn:var f=r.operator,h=r.field;return"["+t(f)+h+"]";case Qn:return"["+r.field+"]";case tr:var d=r.operator;return"[["+r.field+n(t(d))+e(s)+"]]";case er:return s;case nr:return"#"+s;case rr:return"."+s;case fr:case cr:return i(r.parent,o)+n(">")+i(r.child,o);case hr:case lr:return i(r.ancestor,o)+" "+i(r.descendant,o);case dr:var p=i(r.left,o),g=i(r.subject,o),v=i(r.right,o);return p+(p.length>0?" ":"")+g+v;case pr:return""}},i=function(t,e){return t.checks.reduce((function(n,i,o){return n+(e===t&&0===o?"$":"")+r(i,e)}),"")},o="",a=0;a1&&a=0&&(e=e.replace("!",""),l=!0),e.indexOf("@")>=0&&(e=e.replace("@",""),c=!0),(a||u||c)&&(i=a||s?""+t:"",o=""+n),c&&(t=i=i.toLowerCase(),n=o=o.toLowerCase()),e){case"*=":r=i.indexOf(o)>=0;break;case"$=":r=i.indexOf(o,i.length-o.length)>=0;break;case"^=":r=0===i.indexOf(o);break;case"=":r=t===n;break;case">":f=!0,r=t>n;break;case">=":f=!0,r=t>=n;break;case"<":f=!0,r=t0;){var c=i.shift();e(c),o.add(c.id()),a&&r(i,o,c)}return t}function Mr(t,e,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1];return jr(this,t,e,Mr)},Ir.forEachUp=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return jr(this,t,e,Dr)},Ir.forEachUpAndDown=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return jr(this,t,e,Rr)},Ir.ancestors=Ir.parents,(Or=Lr={data:Vn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Vn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Vn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Vn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Vn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Vn.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var t=this[0];if(t)return t._private.data.id}}).attr=Or.data,Or.removeAttr=Or.removeData;var Br,Gr,Hr=Lr,Fr={};function zr(t){return function(e){if(void 0===e&&(e=!0),0!==this.length&&this.isNode()&&!this.removed()){for(var n=0,r=this[0],i=r._private.edges,o=0;oe})),minIndegree:Yr("indegree",(function(t,e){return te})),minOutdegree:Yr("outdegree",(function(t,e){return te}))}),G(Fr,{totalDegree:function(t){for(var e=0,n=this.nodes(),r=0;r0,l=c;c&&(u=u[0]);var f=l?u.position():{x:0,y:0};return i={x:s.x-f.x,y:s.y-f.y},void 0===t?i:i[t]}for(var h=0;h0,v=g;g&&(p=p[0]);var b=v?p.position():{x:0,y:0};void 0!==e?d.position(t,e+b[t]):void 0!==i&&d.position({x:i.x+b.x,y:i.y+b.y})}}else if(!o)return;return this}}).modelPosition=Br.point=Br.position,Br.modelPositions=Br.points=Br.positions,Br.renderedPoint=Br.renderedPosition,Br.relativePoint=Br.relativePosition;var Ur,Xr,Wr=Gr;Ur=Xr={},Xr.renderedBoundingBox=function(t){var e=this.boundingBox(t),n=this.cy(),r=n.zoom(),i=n.pan(),o=e.x1*r+i.x,a=e.x2*r+i.x,s=e.y1*r+i.y,u=e.y2*r+i.y;return{x1:o,x2:a,y1:s,y2:u,w:a-o,h:u-s}},Xr.dirtyCompoundBoundsCache=function(){var t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var e=t._private;e.compoundBoundsClean=!1,e.bbCache=null,t.emitAndNotify("bounds")}})),this):this},Xr.updateCompoundBounds=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function n(t){if(t.isParent()){var e=t._private,n=t.children(),r="include"===t.pstyle("compound-sizing-wrt-labels").value,i={width:{val:t.pstyle("min-width").pfValue,left:t.pstyle("min-width-bias-left"),right:t.pstyle("min-width-bias-right")},height:{val:t.pstyle("min-height").pfValue,top:t.pstyle("min-height-bias-top"),bottom:t.pstyle("min-height-bias-bottom")}},o=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),a=e.position;0!==o.w&&0!==o.h||((o={w:t.pstyle("width").pfValue,h:t.pstyle("height").pfValue}).x1=a.x-o.w/2,o.x2=a.x+o.w/2,o.y1=a.y-o.h/2,o.y2=a.y+o.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var u=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(u=100*u/i.width.val);var c=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(c=100*c/i.height.val);var l=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(l=100*l/i.height.val);var f=b(i.width.val-o.w,s,u),h=f.biasDiff,d=f.biasComplementDiff,p=b(i.height.val-o.h,c,l),g=p.biasDiff,v=p.biasComplementDiff;e.autoPadding=function(t,e,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return t>0?n.pfValue*t:0;case"height":return e>0?n.pfValue*e:0;case"average":return t>0&&e>0?n.pfValue*(t+e)/2:0;case"min":return t>0&&e>0?t>e?n.pfValue*e:n.pfValue*t:0;case"max":return t>0&&e>0?t>e?n.pfValue*t:n.pfValue*e:0;default:return 0}}(o.w,o.h,t.pstyle("padding"),t.pstyle("padding-relative-to").value),e.autoWidth=Math.max(o.w,i.width.val),a.x=(-h+o.x1+o.x2+d)/2,e.autoHeight=Math.max(o.h,i.height.val),a.y=(-g+o.y1+o.y2+v)/2}function b(t,e,n){var r=0,i=0,o=e+n;return t>0&&o>0&&(r=e/o*t,i=n/o*t),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;rt.x2?r:t.x2,t.y1=nt.y2?i:t.y2,t.w=t.x2-t.x1,t.h=t.y2-t.y1)},Zr=function(t,e){return null==e?t:Kr(t,e.x1,e.y1,e.x2,e.y2)},Qr=function(t,e,n){return _t(t,e,n)},Jr=function(t,e,n){if(!e.cy().headless()){var r,i,o=e._private,a=o.rstyle,s=a.arrowWidth/2;if("none"!==e.pstyle(n+"-arrow-shape").value){"source"===n?(r=a.srcX,i=a.srcY):"target"===n?(r=a.tgtX,i=a.tgtY):(r=a.midX,i=a.midY);var u=o.arrowBounds=o.arrowBounds||{},c=u[n]=u[n]||{};c.x1=r-s,c.y1=i-s,c.x2=r+s,c.y2=i+s,c.w=c.x2-c.x1,c.h=c.y2-c.y1,re(c,1),Kr(t,c.x1,c.y1,c.x2,c.y2)}}},ti=function(t,e,n){if(!e.cy().headless()){var r;r=n?n+"-":"";var i=e._private,o=i.rstyle;if(e.pstyle(r+"label").strValue){var a,s,u,c,l=e.pstyle("text-halign"),f=e.pstyle("text-valign"),h=Qr(o,"labelWidth",n),d=Qr(o,"labelHeight",n),p=Qr(o,"labelX",n),g=Qr(o,"labelY",n),v=e.pstyle(r+"text-margin-x").pfValue,b=e.pstyle(r+"text-margin-y").pfValue,y=e.isEdge(),w=e.pstyle(r+"text-rotation"),m=e.pstyle("text-outline-width").pfValue,x=e.pstyle("text-border-width").pfValue/2,_=e.pstyle("text-background-padding").pfValue,E=d,k=h,S=k/2,C=E/2;if(y)a=p-S,s=p+S,u=g-C,c=g+C;else{switch(l.value){case"left":a=p-k,s=p;break;case"center":a=p-S,s=p+S;break;case"right":a=p,s=p+k}switch(f.value){case"top":u=g-E,c=g;break;case"center":u=g-C,c=g+C;break;case"bottom":u=g,c=g+E}}a+=v-Math.max(m,x)-_,s+=v+Math.max(m,x)+_,u+=b-Math.max(m,x)-_,c+=b+Math.max(m,x)+_;var T=n||"main",A=i.labelBounds,N=A[T]=A[T]||{};N.x1=a,N.y1=u,N.x2=s,N.y2=c,N.w=s-a,N.h=c-u,re(N,1);var O=y&&"autorotate"===w.strValue,L=null!=w.pfValue&&0!==w.pfValue;if(O||L){var P=O?Qr(i.rstyle,"labelAngle",n):w.pfValue,I=Math.cos(P),j=Math.sin(P),M=(a+s)/2,D=(u+c)/2;if(!y){switch(l.value){case"left":M=s;break;case"right":M=a}switch(f.value){case"top":D=c;break;case"bottom":D=u}}var R=function(t,e){return{x:(t-=M)*I-(e-=D)*j+M,y:t*j+e*I+D}},B=R(a,u),G=R(a,c),H=R(s,u),F=R(s,c);a=Math.min(B.x,G.x,H.x,F.x),s=Math.max(B.x,G.x,H.x,F.x),u=Math.min(B.y,G.y,H.y,F.y),c=Math.max(B.y,G.y,H.y,F.y)}var z=T+"Rot",Y=A[z]=A[z]||{};Y.x1=a,Y.y1=u,Y.x2=s,Y.y2=c,Y.w=s-a,Y.h=c-u,Kr(t,a,u,s,c),Kr(i.labelBounds.all,a,u,s,c)}return t}},ei=function(t){var e=0,n=function(t){return(t?1:0)<(r=C[1].x)){var T=n;n=r,r=T}if(i>(o=C[1].y)){var A=i;i=o,o=A}Kr(h,n-x,i-x,r+x,o+x)}}else if("bezier"===S||"unbundled-bezier"===S||"segments"===S||"taxi"===S){var N;switch(S){case"bezier":case"unbundled-bezier":N=v.bezierPts;break;case"segments":case"taxi":N=v.linePts}if(null!=N)for(var O=0;O(r=I.x)){var j=n;n=r,r=j}if((i=P.y)>(o=I.y)){var M=i;i=o,o=M}Kr(h,n-=x,i-=x,r+=x,o+=x)}if(l&&e.includeEdges&&g&&(Jr(h,t,"mid-source"),Jr(h,t,"mid-target"),Jr(h,t,"source"),Jr(h,t,"target")),l)if("yes"===t.pstyle("ghost").value){var D=t.pstyle("ghost-offset-x").pfValue,R=t.pstyle("ghost-offset-y").pfValue;Kr(h,h.x1+D,h.y1+R,h.x2+D,h.y2+R)}var B=d.bodyBounds=d.bodyBounds||{};oe(B,h),ie(B,b),re(B,1),l&&(n=h.x1,r=h.x2,i=h.y1,o=h.y2,Kr(h,n-m,i-m,r+m,o+m));var G=d.overlayBounds=d.overlayBounds||{};oe(G,h),ie(G,b),re(G,1);var H=d.labelBounds=d.labelBounds||{};null!=H.all?((u=H.all).x1=1/0,u.y1=1/0,u.x2=-1/0,u.y2=-1/0,u.w=0,u.h=0):H.all=ee(),l&&e.includeLabels&&(e.includeMainLabels&&ti(h,t,null),g&&(e.includeSourceLabels&&ti(h,t,"source"),e.includeTargetLabels&&ti(h,t,"target")))}return h.x1=$r(h.x1),h.y1=$r(h.y1),h.x2=$r(h.x2),h.y2=$r(h.y2),h.w=$r(h.x2-h.x1),h.h=$r(h.y2-h.y1),h.w>0&&h.h>0&&w&&(ie(h,b),re(h,1)),h}(t,ii),r.bbCache=n,r.bbCacheShift.x=r.bbCacheShift.y=0,r.bbCachePosKey=a):n=r.bbCache,!c&&(0!==r.bbCacheShift.x||0!==r.bbCacheShift.y)){var l=ae,f=r.bbCacheShift,h=function(t,e){null!=t&&l(t,e)};l(n,f);var d=r.bodyBounds,p=r.overlayBounds,g=r.labelBounds,v=r.arrowBounds;h(d,f),h(p,f),null!=v&&(h(v.source,f),h(v.target,f),h(v["mid-source"],f),h(v["mid-target"],f)),null!=g&&(h(g.main,f),h(g.all,f),h(g.source,f),h(g.target,f))}if(r.bbCacheShift.x=r.bbCacheShift.y=0,!o){var b=t.isNode();n=ee(),(e.includeNodes&&b||e.includeEdges&&!b)&&(e.includeOverlays?Zr(n,r.overlayBounds):Zr(n,r.bodyBounds)),e.includeLabels&&(e.includeMainLabels&&(!i||e.includeSourceLabels&&e.includeTargetLabels)?Zr(n,r.labelBounds.all):(e.includeMainLabels&&Zr(n,r.labelBounds.mainRot),e.includeSourceLabels&&Zr(n,r.labelBounds.sourceRot),e.includeTargetLabels&&Zr(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},ii={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,useCache:!0},oi=ei(ii),ai=wt(ii);Xr.boundingBox=function(t){var e;if(1!==this.length||null==this[0]._private.bbCache||void 0!==t&&void 0!==t.useCache&&!0!==t.useCache){e=ee();var n=ai(t=t||ii);if(this.cy().styleEnabled())for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:xi,e=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)a(s);return this},Ei.removeAllListeners=function(){return this.removeListener("*")},Ei.emit=Ei.trigger=function(t,e,n){var r=this.listeners,i=r.length;return this.emitting++,x(e)||(e=[e]),Ci(this,(function(t,o){null!=n&&(r=[{event:o.event,type:o.type,namespace:o.namespace,callback:n}],i=r.length);for(var a=function(n){var i=r[n];if(i.type===o.type&&(!i.namespace||i.namespace===o.namespace||".*"===i.namespace)&&t.eventMatches(t.context,i,o)){var a=[o];null!=e&&function(t,e){for(var n=0;n1&&!r){var i=this.length-1,o=this[i],a=o._private.data.id;this[i]=void 0,this[t]=o,n.set(a,{ele:o,index:t})}return this.length--,this},unmergeOne:function(t){t=t[0];var e=this._private,n=t._private.data.id,r=e.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(t){var e=this._private.cy;if(!t)return this;if(t&&w(t)){var n=t;t=e.mutableElements().filter(n)}for(var r=0;r=0;e--){t(this[e])&&this.unmergeAt(e)}return this},map:function(t,e){for(var n=[],r=0;rr&&(r=a,n=o)}return{value:r,ele:n}},min:function(t,e){for(var n,r=1/0,i=0;i=0&&i1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){var i=n._private.style[t];return null!=i?i:e?r.style().getDefaultProperty(t):null}},numericStyle:function(t){var e=this[0];if(e.cy().styleEnabled()&&e){var n=e.pstyle(t);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(t){var e=this[0];if(e.cy().styleEnabled())return e?e.pstyle(t).units:void 0},renderedStyle:function(t){var e=this.cy();if(!e.styleEnabled())return this;var n=this[0];return n?e.style().getRenderedStyle(n,t):void 0},style:function(t,e){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(_(t)){var i=t;r.applyBypass(this,i,!1),this.emitAndNotify("style")}else if(w(t)){if(void 0===e){var o=this[0];return o?r.getStylePropertyValue(o,t):void 0}r.applyBypass(this,t,e,!1),this.emitAndNotify("style")}else if(void 0===t){var a=this[0];return a?r.getRawStyle(a):void 0}return this},removeStyle:function(t){var e=this.cy();if(!e.styleEnabled())return this;var n=e.style();if(void 0===t)for(var r=0;r0&&e.push(l[0]),e.push(s[0])}return this.spawn(e,{unique:!0}).filter(t)}),"neighborhood"),closedNeighborhood:function(t){return this.neighborhood().add(this).filter(t)},openNeighborhood:function(t){return this.neighborhood(t)}}),Ki.neighbourhood=Ki.neighborhood,Ki.closedNeighbourhood=Ki.closedNeighborhood,Ki.openNeighbourhood=Ki.openNeighborhood,G(Ki,{source:Pr((function(t){var e,n=this[0];return n&&(e=n._private.source||n.cy().collection()),e&&t?e.filter(t):e}),"source"),target:Pr((function(t){var e,n=this[0];return n&&(e=n._private.target||n.cy().collection()),e&&t?e.filter(t):e}),"target"),sources:to({attr:"source"}),targets:to({attr:"target"})}),G(Ki,{edgesWith:Pr(eo(),"edgesWith"),edgesTo:Pr(eo({thisIsSrc:!0}),"edgesTo")}),G(Ki,{connectedEdges:Pr((function(t){for(var e=[],n=0;n0);return o},component:function(){var t=this[0];return t.cy().mutableElements().components(t)[0]}}),Ki.componentsOf=Ki.components;var ro=function(t,e,n){for(var r=null!=n?n:vt();t.hasElementWithId(r);)r=vt();return r},io=function(t,e,n){if(void 0!==t&&A(t)){var r=new kt,i=!1;if(e){if(e.length>0&&_(e[0])&&!C(e[0])){i=!0;for(var o=[],a=new Ct,s=0,u=e.length;s0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,o=i.cy(),a=o._private,s=[],u=[],c=0,l=i.length;c0){for(var B=new io(o,t),G=0;G0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},o=n._private.cy;function a(t){for(var e=t._private.edges,n=0;n0&&(t?T.emitAndNotify("remove"):e&&T.emit("remove"));for(var A=0;A1e-4&&Math.abs(s.v)>1e-4;);return o?function(t){return c[t*(c.length-1)|0]}:l}}(),uo=function(t,e,n,r){var i=function(t,e,n,r){var i=4,o=.001,a=1e-7,s=10,u=11,c=1/(u-1),l="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var f=0;f<4;++f)if("number"!=typeof arguments[f]||isNaN(arguments[f])||!isFinite(arguments[f]))return!1;t=Math.min(t,1),n=Math.min(n,1),t=Math.max(t,0),n=Math.max(n,0);var h=l?new Float32Array(u):new Array(u);function d(t,e){return 1-3*e+3*t}function p(t,e){return 3*e-6*t}function g(t){return 3*t}function v(t,e,n){return((d(e,n)*t+p(e,n))*t+g(e))*t}function b(t,e,n){return 3*d(e,n)*t*t+2*p(e,n)*t+g(e)}function y(e,r){for(var o=0;o0?i=u:r=u}while(Math.abs(o)>a&&++c=o?y(e,s):0===l?s:m(e,r,r+c)}var _=!1;function E(){_=!0,t===e&&n===r||w()}var k=function(i){return _||E(),t===e&&n===r?i:0===i?0:1===i?1:v(x(i),e,r)};k.getControlPoints=function(){return[{x:t,y:e},{x:n,y:r}]};var S="generateBezier("+[t,e,n,r]+")";return k.toString=function(){return S},k}(t,e,n,r);return function(t,e,n){return t+(e-t)*i(n)}},co={linear:function(t,e,n){return t+(e-t)*n},ease:uo(.25,.1,.25,1),"ease-in":uo(.42,0,1,1),"ease-out":uo(0,0,.58,1),"ease-in-out":uo(.42,0,.58,1),"ease-in-sine":uo(.47,0,.745,.715),"ease-out-sine":uo(.39,.575,.565,1),"ease-in-out-sine":uo(.445,.05,.55,.95),"ease-in-quad":uo(.55,.085,.68,.53),"ease-out-quad":uo(.25,.46,.45,.94),"ease-in-out-quad":uo(.455,.03,.515,.955),"ease-in-cubic":uo(.55,.055,.675,.19),"ease-out-cubic":uo(.215,.61,.355,1),"ease-in-out-cubic":uo(.645,.045,.355,1),"ease-in-quart":uo(.895,.03,.685,.22),"ease-out-quart":uo(.165,.84,.44,1),"ease-in-out-quart":uo(.77,0,.175,1),"ease-in-quint":uo(.755,.05,.855,.06),"ease-out-quint":uo(.23,1,.32,1),"ease-in-out-quint":uo(.86,0,.07,1),"ease-in-expo":uo(.95,.05,.795,.035),"ease-out-expo":uo(.19,1,.22,1),"ease-in-out-expo":uo(1,0,0,1),"ease-in-circ":uo(.6,.04,.98,.335),"ease-out-circ":uo(.075,.82,.165,1),"ease-in-out-circ":uo(.785,.135,.15,.86),spring:function(t,e,n){if(0===n)return co.linear;var r=so(t,e,n);return function(t,e,n){return t+(e-t)*r(n)}},"cubic-bezier":uo};function lo(t,e,n,r,i){if(1===r)return n;if(e===n)return n;var o=i(e,n,r);return null==t||((t.roundValue||t.color)&&(o=Math.round(o)),void 0!==t.min&&(o=Math.max(o,t.min)),void 0!==t.max&&(o=Math.min(o,t.max))),o}function fo(t,e){return null!=t.pfValue||null!=t.value?null==t.pfValue||null!=e&&"%"===e.type.units?t.value:t.pfValue:t}function ho(t,e,n,r,i){var o=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var a=fo(t,i),s=fo(e,i);if(E(a)&&E(s))return lo(o,a,s,n,r);if(x(a)&&x(s)){for(var u=[],c=0;c0?("spring"===f&&h.push(a.duration),a.easingImpl=co[f].apply(null,h)):a.easingImpl=co[f]}var d,p=a.easingImpl;if(d=0===a.duration?1:(n-u)/a.duration,a.applying&&(d=a.progress),d<0?d=0:d>1&&(d=1),null==a.delay){var g=a.startPosition,v=a.position;if(v&&i&&!t.locked()){var b={};go(g.x,v.x)&&(b.x=ho(g.x,v.x,d,p)),go(g.y,v.y)&&(b.y=ho(g.y,v.y,d,p)),t.position(b)}var y=a.startPan,m=a.pan,x=o.pan,_=null!=m&&r;_&&(go(y.x,m.x)&&(x.x=ho(y.x,m.x,d,p)),go(y.y,m.y)&&(x.y=ho(y.y,m.y,d,p)),t.emit("pan"));var E=a.startZoom,k=a.zoom,S=null!=k&&r;S&&(go(E,k)&&(o.zoom=te(o.minZoom,ho(E,k,d,p),o.maxZoom)),t.emit("zoom")),(_||S)&&t.emit("viewport");var C=a.style;if(C&&C.length>0&&i){for(var T=0;T=0;e--){(0,t[e])()}t.splice(0,t.length)},l=o.length-1;l>=0;l--){var f=o[l],h=f._private;h.stopped?(o.splice(l,1),h.hooked=!1,h.playing=!1,h.started=!1,c(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||vo(0,f,t),po(e,f,t,n),h.applying&&(h.applying=!1),c(h.frames),null!=h.step&&h.step(t),f.completed()&&(o.splice(l,1),h.hooked=!1,h.playing=!1,h.started=!1,c(h.completes)),s=!0)}return n||0!==o.length||0!==a.length||r.push(e),s}for(var o=!1,a=0;a0?e.notify("draw",n):e.notify("draw")),n.unmerge(r),e.emit("step")}var yo={animate:Vn.animate(),animation:Vn.animation(),animated:Vn.animated(),clearQueue:Vn.clearQueue(),delay:Vn.delay(),delayAnimation:Vn.delayAnimation(),stop:Vn.stop(),addToAnimationPool:function(t){this.styleEnabled()&&this._private.aniEles.merge(t)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var t=this;if(t._private.animationsRunning=!0,t.styleEnabled()){var e=t.renderer();e&&e.beforeRender?e.beforeRender((function(e,n){bo(n,t)}),e.beforeRenderPriorities.animations):function e(){t._private.animationsRunning&&X((function(n){bo(n,t),e()}))}()}}},wo={qualifierCompare:function(t,e){return null==t||null==e?null==t&&null==e:t.sameText(e)},eventMatches:function(t,e,n){var r=e.qualifier;return null==r||t!==n.target&&C(n.target)&&r.matches(n.target)},addEventFields:function(t,e){e.cy=t,e.target=t},callbackContext:function(t,e,n){return null!=e.qualifier?n.target:t}},mo=function(t){return w(t)?new Tr(t):t},xo={createEmitter:function(){var t=this._private;return t.emitter||(t.emitter=new _i(wo,this)),this},emitter:function(){return this._private.emitter},on:function(t,e,n){return this.emitter().on(t,mo(e),n),this},removeListener:function(t,e,n){return this.emitter().removeListener(t,mo(e),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(t,e,n){return this.emitter().one(t,mo(e),n),this},once:function(t,e,n){return this.emitter().one(t,mo(e),n),this},emit:function(t,e){return this.emitter().emit(t,e),this},emitAndNotify:function(t,e){return this.emit(t),this.notify(t,e),this}};Vn.eventAliasesOn(xo);var _o={png:function(t){return t=t||{},this._private.renderer.png(t)},jpg:function(t){var e=this._private.renderer;return(t=t||{}).bg=t.bg||"#fff",e.jpg(t)}};_o.jpeg=_o.jpg;var Eo={layout:function(t){if(null!=t)if(null!=t.name){var e=t.name,n=this.extension("layout",e);if(null!=n){var r;r=w(t.eles)?this.$(t.eles):null!=t.eles?t.eles:this.$();var i=new n(G({},t,{cy:this,eles:r}));return i}ht("No such layout `"+e+"` found. Did you forget to import it and `cytoscape.use()` it?")}else ht("A `name` must be specified to make a layout");else ht("Layout options must be specified to make a layout")}};Eo.createLayout=Eo.makeLayout=Eo.layout;var ko={notify:function(t,e){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[t]=n.batchNotifications[t]||this.collection();null!=e&&r.merge(e)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(t,e)}},notifications:function(t){var e=this._private;return void 0===t?e.notificationsEnabled:(e.notificationsEnabled=!!t,this)},noNotifications:function(t){this.notifications(!1),t(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var t=this._private;return null==t.batchCount&&(t.batchCount=0),0===t.batchCount&&(t.batchStyleEles=this.collection(),t.batchNotifications={}),t.batchCount++,this},endBatch:function(){var t=this._private;if(0===t.batchCount)return this;if(t.batchCount--,0===t.batchCount){t.batchStyleEles.updateStyle();var e=this.renderer();Object.keys(t.batchNotifications).forEach((function(n){var r=t.batchNotifications[n];r.empty()?e.notify(n):e.notify(n,r)}))}return this},batch:function(t){return this.startBatch(),t(),this.endBatch(),this},batchData:function(t){var e=this;return this.batch((function(){for(var n=Object.keys(t),r=0;r0;)t.removeChild(t.childNodes[0]);this._private.renderer=null,this.mutableElements().forEach((function(t){var e=t._private;e.rscratch={},e.rstyle={},e.animation.current=[],e.animation.queue=[]}))},onRender:function(t){return this.on("render",t)},offRender:function(t){return this.off("render",t)}};Co.invalidateDimensions=Co.resize;var To={collection:function(t,e){return w(t)?this.$(t):S(t)?t.collection():x(t)?new io(this,t,e):new io(this)},nodes:function(t){var e=this.$((function(t){return t.isNode()}));return t?e.filter(t):e},edges:function(t){var e=this.$((function(t){return t.isEdge()}));return t?e.filter(t):e},$:function(t){var e=this._private.elements;return t?e.filter(t):e.spawnSelf()},mutableElements:function(){return this._private.elements}};To.elements=To.filter=To.$;var Ao={};Ao.apply=function(t){var e=this._private,n=e.cy.collection();e.newStyle&&(e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0));for(var r=0;r0;if(f||l&&h){var d=void 0;f&&h||f?d=u.properties:h&&(d=u.mappedProperties);for(var p=0;p1&&(g=1),s.color){var m=i.valueMin[0],x=i.valueMax[0],_=i.valueMin[1],k=i.valueMax[1],S=i.valueMin[2],C=i.valueMax[2],T=null==i.valueMin[3]?1:i.valueMin[3],A=null==i.valueMax[3]?1:i.valueMax[3],N=[Math.round(m+(x-m)*g),Math.round(_+(k-_)*g),Math.round(S+(C-S)*g),Math.round(T+(A-T)*g)];n={bypass:i.bypass,name:i.name,value:N,strValue:"rgb("+N[0]+", "+N[1]+", "+N[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*g;n=this.parse(i.name,O,i.bypass,"mapping")}if(!n)return p(),!1;n.mapping=i,i=n;break;case a.data:for(var L=i.field.split("."),P=f.data,I=0;I0&&o>0){for(var s={},u=!1,c=0;c0?t.delayAnimation(a).play().promise().then(e):e()})).then((function(){return t.animation({style:s,duration:o,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(t,i),t.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),r.transitioning=!1)},Ao.checkTrigger=function(t,e,n,r,i,o){var a=this.properties[e],s=i(a);null!=s&&s(n,r)&&o(a)},Ao.checkZOrderTrigger=function(t,e,n,r){var i=this;this.checkTrigger(t,e,n,r,(function(t){return t.triggersZOrder}),(function(){i._private.cy.notify("zorder",t)}))},Ao.checkBoundsTrigger=function(t,e,n,r){this.checkTrigger(t,e,n,r,(function(t){return t.triggersBounds}),(function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),"bezier"!==t.pstyle("curve-style").value&&("curve-style"!==e||"bezier"!==n&&"bezier"!==r)||!i.triggersBoundsOfParallelBeziers||t.parallelEdges().forEach((function(t){t.isBundledBezier()&&t.dirtyBoundingBoxCache()}))}))},Ao.checkTriggers=function(t,e,n,r){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,n,r),this.checkBoundsTrigger(t,e,n,r)};var No={applyBypass:function(t,e,n,r){var i=[];if("*"===e||"**"===e){if(void 0!==n)for(var o=0;oe.length?i.substr(e.length):""}function a(){n=n.length>r.length?n.substr(r.length):""}for(i=i.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(i.match(/^\s*$/))break;var s=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!s){pt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}e=s[0];var u=s[1];if("core"!==u)if(new Tr(u).invalid){pt("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=s[2],l=!1;n=c;for(var f=[];;){if(n.match(/^\s*$/))break;var h=n.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);if(!h){pt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),l=!0;break}r=h[0];var d=h[1],p=h[2];if(this.properties[d])this.parse(d,p)?(f.push({name:d,val:p}),a()):(pt("Skipping property: Invalid property definition in: "+r),a());else pt("Skipping property: Invalid property name in: "+r),a()}if(l){o();break}this.selector(u);for(var g=0;g=7&&"d"===e[0]&&(u=new RegExp(a.data.regex).exec(e))){if(n)return!1;var f=a.data;return{name:t,value:u,strValue:""+e,mapped:f,field:u[1],bypass:n}}if(e.length>=10&&"m"===e[0]&&(c=new RegExp(a.mapData.regex).exec(e))){if(n)return!1;if(l.multiple)return!1;var h=a.mapData;if(!l.color&&!l.number)return!1;var d=this.parse(t,c[4]);if(!d||d.mapped)return!1;var p=this.parse(t,c[5]);if(!p||p.mapped)return!1;if(d.pfValue===p.pfValue||d.strValue===p.strValue)return pt("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+d.strValue+"`"),this.parse(t,d.strValue);if(l.color){var g=d.value,v=p.value;if(!(g[0]!==v[0]||g[1]!==v[1]||g[2]!==v[2]||g[3]!==v[3]&&(null!=g[3]&&1!==g[3]||null!=v[3]&&1!==v[3])))return!1}return{name:t,value:c,strValue:""+e,mapped:h,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:d.value,valueMax:p.value,bypass:n}}}if(l.multiple&&"multiple"!==r){var b;if(b=s?e.split(/\s+/):x(e)?e:[e],l.evenMultiple&&b.length%2!=0)return null;for(var y=[],_=[],k=[],S="",C=!1,T=0;T0?" ":"")+A.strValue}return l.validate&&!l.validate(y,_)?null:l.singleEnum&&C?1===y.length&&w(y[0])?{name:t,value:y[0],strValue:y[0],bypass:n}:null:{name:t,value:y,pfValue:k,strValue:S,bypass:n,units:_}}var N,O,L=function(){for(var r=0;rl.max||l.strictMax&&e===l.max))return null;var B={name:t,value:e,strValue:""+e+(P||""),units:P,bypass:n};return l.unitless||"px"!==P&&"em"!==P?B.pfValue=e:B.pfValue="px"!==P&&P?this.getEmSizeInPixels()*e:e,"ms"!==P&&"s"!==P||(B.pfValue="ms"===P?e:1e3*e),"deg"!==P&&"rad"!==P||(B.pfValue="rad"===P?e:(N=e,Math.PI*N/180)),"%"===P&&(B.pfValue=e/100),B}if(l.propList){var G=[],F=""+e;if("none"===F);else{for(var z=F.split(/\s*,\s*|\s+/),Y=0;Y0&&u>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((s-2*e)/n.w,(u-2*e)/n.h))>this._private.maxZoom?this._private.maxZoom:a)=n.minZoom&&(n.maxZoom=e),this},minZoom:function(t){return void 0===t?this._private.minZoom:this.zoomRange({min:t})},maxZoom:function(t){return void 0===t?this._private.maxZoom:this.zoomRange({max:t})},getZoomedViewport:function(t){var e,n,r=this._private,i=r.pan,o=r.zoom,a=!1;if(r.zoomingEnabled||(a=!0),E(t)?n=t:_(t)&&(n=t.level,null!=t.position?e=Yt(t.position,o,i):null!=t.renderedPosition&&(e=t.renderedPosition),null==e||r.panningEnabled||(a=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)e.maxZoom||!e.zoomingEnabled?o=!0:(e.zoom=s,i.push("zoom"))}if(r&&(!o||!t.cancelOnFailedZoom)&&e.panningEnabled){var u=t.pan;E(u.x)&&(e.pan.x=u.x,a=!1),E(u.y)&&(e.pan.y=u.y,a=!1),a||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(t){var e=this.getCenterPan(t);return e&&(this._private.pan=e,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(t,e){if(this._private.panningEnabled){if(w(t)){var n=t;t=this.mutableElements().filter(n)}else S(t)||(t=this.mutableElements());if(0!==t.length){var r=t.boundingBox(),i=this.width(),o=this.height();return{x:(i-(e=void 0===e?this._private.zoom:e)*(r.x1+r.x2))/2,y:(o-e*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var t,e,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(t=h.getComputedStyle(r),e=function(e){return parseFloat(t.getPropertyValue(e))},{width:r.clientWidth-e("padding-left")-e("padding-right"),height:r.clientHeight-e("padding-top")-e("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var t=this._private.pan,e=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-t.x)/e,x2:(n.x2-t.x)/e,y1:(n.y1-t.y)/e,y2:(n.y2-t.y)/e};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var t=this.width(),e=this.height();return{x1:0,y1:0,x2:t,y2:e,w:t,h:e}}};Go.centre=Go.center,Go.autolockNodes=Go.autolock,Go.autoungrabifyNodes=Go.autoungrabify;var Ho={data:Vn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0}),removeData:Vn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0}),scratch:Vn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0}),removeScratch:Vn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0})};Ho.attr=Ho.data,Ho.removeAttr=Ho.removeData;var Fo=function(t){var e=this,n=(t=G({},t)).container;n&&!k(n)&&k(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=e;var o=void 0!==h&&void 0!==n&&!t.headless,a=t;a.layout=G({name:o?"grid":"null"},a.layout),a.renderer=G({name:o?"canvas":"null"},a.renderer);var s=function(t,e,n){return void 0!==e?e:void 0!==n?n:t},u=this._private={container:n,ready:!1,options:a,elements:new io(this),listeners:[],aniEles:new io(this),data:{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,a.zoomingEnabled),userZoomingEnabled:s(!0,a.userZoomingEnabled),panningEnabled:s(!0,a.panningEnabled),userPanningEnabled:s(!0,a.userPanningEnabled),boxSelectionEnabled:s(!0,a.boxSelectionEnabled),autolock:s(!1,a.autolock,a.autolockNodes),autoungrabify:s(!1,a.autoungrabify,a.autoungrabifyNodes),autounselectify:s(!1,a.autounselectify),styleEnabled:void 0===a.styleEnabled?o:a.styleEnabled,zoom:E(a.zoom)?a.zoom:1,pan:{x:_(a.pan)&&E(a.pan.x)?a.pan.x:0,y:_(a.pan)&&E(a.pan.y)?a.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1};this.createEmitter(),this.selectionType(a.selectionType),this.zoomRange({min:a.minZoom,max:a.maxZoom});u.styleEnabled&&e.setStyle([]);var c=G({},a,a.renderer);e.initRenderer(c);!function(t,e){if(t.some(L))return Fn.all(t).then(e);e(t)}([a.style,a.elements],(function(t){var n=t[0],o=t[1];u.styleEnabled&&e.style().append(n),function(t,n,r){e.notifications(!1);var i=e.mutableElements();i.length>0&&i.remove(),null!=t&&(_(t)||x(t))&&e.add(t),e.one("layoutready",(function(t){e.notifications(!0),e.emit(t),e.one("load",n),e.emitAndNotify("load")})).one("layoutstop",(function(){e.one("done",r),e.emit("done")}));var o=G({},e._private.options.layout);o.eles=e.elements(),e.layout(o).run()}(o,(function(){e.startAnimationLoop(),u.ready=!0,m(a.ready)&&e.on("ready",a.ready);for(var t=0;t0,c=ee(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(S(n.roots))t=n.roots;else if(x(n.roots)){for(var l=[],f=0;f0;){var P=N.shift(),I=A(P,O);if(I)P.outgoers().filter((function(t){return t.isNode()&&i.has(t)})).forEach(L);else if(null===I){pt("Detected double maximal shift for node `"+P.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}T();var j=0;if(n.avoidOverlap)for(var M=0;M0&&b[0].length<=3?u/2:0),f=2*Math.PI/b[r].length*i;return 0===r&&1===b[0].length&&(l=1),{x:W+l*Math.cos(f),y:$+l*Math.sin(f)}}return{x:W+(i+1-(o+1)/2)*a,y:(r+1)*s}})),this};var Xo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function Wo(t){this.options=G({},Xo,t)}Wo.prototype.run=function(){var t=this.options,e=t,n=t.cy,r=e.eles,i=void 0!==e.counterclockwise?!e.counterclockwise:e.clockwise,o=r.nodes().not(":parent");e.sort&&(o=o.sort(e.sort));for(var a,s=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),u=s.x1+s.w/2,c=s.y1+s.h/2,l=(void 0===e.sweep?2*Math.PI-2*Math.PI/o.length:e.sweep)/Math.max(1,o.length-1),f=0,h=0;h1&&e.avoidOverlap){f*=1.75;var v=Math.cos(l)-Math.cos(0),b=Math.sin(l)-Math.sin(0),y=Math.sqrt(f*f/(v*v+b*b));a=Math.max(y,a)}return o.layoutPositions(this,e,(function(t,n){var r=e.startAngle+n*l*(i?1:-1),o=a*Math.cos(r),s=a*Math.sin(r);return{x:u+o,y:c+s}})),this};var $o,Ko={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(t){return t.degree()},levelWidth:function(t){return t.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function Zo(t){this.options=G({},Ko,t)}Zo.prototype.run=function(){for(var t=this.options,e=t,n=void 0!==e.counterclockwise?!e.counterclockwise:e.clockwise,r=t.cy,i=e.eles.nodes().not(":parent"),o=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),a=o.x1+o.w/2,s=o.y1+o.h/2,u=[],c=0,l=0;l0)Math.abs(b[0].value-w.value)>=g&&(b=[],v.push(b));b.push(w)}var m=c+e.minNodeSpacing;if(!e.avoidOverlap){var x=v.length>0&&v[0].length>1,_=(Math.min(o.w,o.h)/2-m)/(v.length+x?1:0);m=Math.min(m,_)}for(var E=0,k=0;k1&&e.avoidOverlap){var A=Math.cos(T)-Math.cos(0),N=Math.sin(T)-Math.sin(0),O=Math.sqrt(m*m/(A*A+N*N));E=Math.max(O,E)}S.r=E,E+=m}if(e.equidistant){for(var L=0,P=0,I=0;I=t.numIter)&&(aa(r,t),r.temperature=r.temperature*t.coolingFactor,!(r.temperature=t.animationThreshold&&o(),X(e)):(ya(r,t),s())}()}else{for(;c;)c=a(u),u++;ya(r,t),s()}return this},Jo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},Jo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var ta=function(t,e,n){for(var r=n.eles.edges(),i=n.eles.nodes(),o={isCompound:t.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:t.width(),clientHeight:t.width(),boundingBox:ee(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()})},a=n.eles.components(),s={},u=0;u0){o.graphSet.push(x);for(u=0;ur.count?0:r.graph},na=function t(e,n,r,i){var o=i.graphSet[r];if(-10)var s=(c=r.nodeOverlap*a)*i/(g=Math.sqrt(i*i+o*o)),u=c*o/g;else{var c,l=fa(t,i,o),f=fa(e,-1*i,-1*o),h=f.x-l.x,d=f.y-l.y,p=h*h+d*d,g=Math.sqrt(p);s=(c=(t.nodeRepulsion+e.nodeRepulsion)/p)*h/g,u=c*d/g}t.isLocked||(t.offsetX-=s,t.offsetY-=u),e.isLocked||(e.offsetX+=s,e.offsetY+=u)}},la=function(t,e,n,r){if(n>0)var i=t.maxX-e.minX;else i=e.maxX-t.minX;if(r>0)var o=t.maxY-e.minY;else o=e.maxY-t.minY;return i>=0&&o>=0?Math.sqrt(i*i+o*o):0},fa=function(t,e,n){var r=t.positionX,i=t.positionY,o=t.height||1,a=t.width||1,s=n/e,u=o/a,c={};return 0===e&&0n?(c.x=r,c.y=i+o/2,c):0e&&-1*u<=s&&s<=u?(c.x=r-a/2,c.y=i-a*n/2/e,c):0=u)?(c.x=r+o*e/2/n,c.y=i+o/2,c):0>n&&(s<=-1*u||s>=u)?(c.x=r-o*e/2/n,c.y=i-o/2,c):c},ha=function(t,e){for(var n=0;n1){var p=e.gravity*f/d,g=e.gravity*h/d;l.offsetX+=p,l.offsetY+=g}}}}},pa=function(t,e){var n=[],r=0,i=-1;for(n.push.apply(n,t.graphSet[0]),i+=t.graphSet[0].length;r<=i;){var o=n[r++],a=t.idToIndex[o],s=t.layoutNodes[a],u=s.children;if(0n)var i={x:n*t/r,y:n*e/r};else i={x:t,y:e};return i},ba=function t(e,n){var r=e.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],o=!1;return(null==i.maxX||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,o=!0),(null==i.minX||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,o=!0),(null==i.minY||e.minY-i.padTopp&&(f+=d+e.componentSpacing,l=0,h=0,d=0)}}},wa={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(t){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function ma(t){this.options=G({},wa,t)}ma.prototype.run=function(){var t=this.options,e=t,n=t.cy,r=e.eles.nodes().not(":parent");e.sort&&(r=r.sort(e.sort));var i=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===i.h||0===i.w)r.layoutPositions(this,e,(function(t){return{x:i.x1,y:i.y1}}));else{var o=r.size(),a=Math.sqrt(o*i.h/i.w),s=Math.round(a),u=Math.round(i.w/i.h*a),c=function(t){if(null==t)return Math.min(s,u);Math.min(s,u)==s?s=t:u=t},l=function(t){if(null==t)return Math.max(s,u);Math.max(s,u)==s?s=t:u=t},f=e.rows,h=null!=e.cols?e.cols:e.columns;if(null!=f&&null!=h)s=f,u=h;else if(null!=f&&null==h)s=f,u=Math.ceil(o/s);else if(null==f&&null!=h)u=h,s=Math.ceil(o/u);else if(u*s>o){var d=c(),p=l();(d-1)*p>=o?c(d-1):(p-1)*d>=o&&l(p-1)}else for(;u*s=o?l(v+1):c(g+1)}var b=i.w/u,y=i.h/s;if(e.condense&&(b=0,y=0),e.avoidOverlap)for(var w=0;w=u&&(O=0,N++)},P={},I=0;I(r=pe(t,e,m[x],m[x+1],m[x+2],m[x+3])))return v(n,r),!0}else if("bezier"===o.edgeType||"multibezier"===o.edgeType||"self"===o.edgeType||"compound"===o.edgeType)for(m=o.allpts,x=0;x+5(r=de(t,e,m[x],m[x+1],m[x+2],m[x+3],m[x+4],m[x+5])))return v(n,r),!0;y=y||i.source,w=w||i.target;var _=a.getArrowWidth(u,l),E=[{name:"source",x:o.arrowStartX,y:o.arrowStartY,angle:o.srcArrowAngle},{name:"target",x:o.arrowEndX,y:o.arrowEndY,angle:o.tgtArrowAngle},{name:"mid-source",x:o.midX,y:o.midY,angle:o.midsrcArrowAngle},{name:"mid-target",x:o.midX,y:o.midY,angle:o.midtgtArrowAngle}];for(x=0;x0&&(b(y),b(w))}function w(t,e,n){return _t(t,e,n)}function m(n,r){var i,o=n._private,a=p;i=r?r+"-":"",n.boundingBox();var s=o.labelBounds[r||"main"],u=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&u){var c=o.rstyle,l=w(c,"labelX",r),f=w(c,"labelY",r),h=w(o.rscratch,"labelAngle",r),d=s.x1-a,g=s.x2+a,b=s.y1-a,y=s.y2+a;if(h){var m=Math.cos(h),x=Math.sin(h),_=function(t,e){return{x:(t-=l)*m-(e-=f)*x+l,y:t*x+e*m+f}},E=_(d,b),k=_(d,y),S=_(g,b),C=_(g,y),T=[E.x,E.y,S.x,S.y,C.x,C.y,k.x,k.y];if(ge(t,e,T))return v(n),!0}else if(ue(s,t,e))return v(n),!0}}n&&(u=u.interactive);for(var x=u.length-1;x>=0;x--){var _=u[x];_.isNode()?b(_)||m(_):y(_)||m(_)||m(_,"source")||m(_,"target")}return c},getAllInBox:function(t,e,n,r){for(var i,o,a=this.getCachedZSortedEles().interactive,s=[],u=Math.min(t,n),c=Math.max(t,n),l=Math.min(e,r),f=Math.max(e,r),h=ee({x1:t=u,y1:e=l,x2:n=c,y2:r=f}),d=0;d0?Math.max(t-e,0):Math.min(t+e,0)},x=m(y,v),_=m(w,b),E=!1;"auto"===l?c=Math.abs(x)>Math.abs(_)?"horizontal":"vertical":"upward"===l||"downward"===l?(c="vertical",E=!0):"leftward"!==l&&"rightward"!==l||(c="horizontal",E=!0);var k,S="vertical"===c,C=S?_:x,T=S?w:y,A=Wt(T),N=!1;(E&&(h||p)||!("downward"===l&&T<0||"upward"===l&&T>0||"leftward"===l&&T>0||"rightward"===l&&T<0)||(C=(A*=-1)*Math.abs(C),N=!0),h)?k=(d<0?1+d:d)*C:k=(d<0?C:0)+d*A;var O=function(t){return Math.abs(t)=Math.abs(C)},L=O(k),P=O(Math.abs(C)-Math.abs(k));if((L||P)&&!N)if(S){var I=Math.abs(T)<=o/2,j=Math.abs(y)<=a/2;if(I){var M=(r.x1+r.x2)/2,D=r.y1,R=r.y2;n.segpts=[M,D,M,R]}else if(j){var B=(r.y1+r.y2)/2,G=r.x1,H=r.x2;n.segpts=[G,B,H,B]}else n.segpts=[r.x1,r.y2]}else{var F=Math.abs(T)<=i/2,z=Math.abs(w)<=s/2;if(F){var Y=(r.y1+r.y2)/2,V=r.x1,q=r.x2;n.segpts=[V,Y,q,Y]}else if(z){var U=(r.x1+r.x2)/2,X=r.y1,W=r.y2;n.segpts=[U,X,U,W]}else n.segpts=[r.x2,r.y1]}else if(S){var $=r.y1+k+(u?o/2*A:0),K=r.x1,Z=r.x2;n.segpts=[K,$,Z,$]}else{var Q=r.x1+k+(u?i/2*A:0),J=r.y1,tt=r.y2;n.segpts=[Q,J,Q,tt]}},ja.tryToCorrectInvalidPoints=function(t,e){var n=t._private.rscratch;if("bezier"===n.edgeType){var r=e.srcPos,i=e.tgtPos,o=e.srcW,a=e.srcH,s=e.tgtW,u=e.tgtH,c=e.srcShape,l=e.tgtShape,f=!E(n.startX)||!E(n.startY),h=!E(n.arrowStartX)||!E(n.arrowStartY),d=!E(n.endX)||!E(n.endY),p=!E(n.arrowEndX)||!E(n.arrowEndY),g=3*(this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth),v=$t({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),b=vh.poolIndex()){var d=f;f=h,h=d}var p=s.srcPos=f.position(),g=s.tgtPos=h.position(),v=s.srcW=f.outerWidth(),b=s.srcH=f.outerHeight(),y=s.tgtW=h.outerWidth(),w=s.tgtH=h.outerHeight(),m=s.srcShape=n.nodeShapes[e.getNodeShape(f)],x=s.tgtShape=n.nodeShapes[e.getNodeShape(h)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var _=0;_0){var z=c,Y=Kt(z,qt(e)),V=Kt(z,qt(F)),q=Y;if(V2)Kt(z,{x:F[2],y:F[3]})0){var it=l,ot=Kt(it,qt(e)),at=Kt(it,qt(rt)),st=ot;if(at2)Kt(it,{x:rt[2],y:rt[3]})=l||w){f={cp:v,segment:y};break}}if(f)break}var m=f.cp,x=f.segment,_=(l-d)/x.length,E=x.t1-x.t0,k=c?x.t0+E*_:x.t1-E*_;k=te(0,k,1),e=Jt(m.p0,m.p1,m.p2,k),u=function(t,e,n,r){var i=te(0,r-.001,1),o=te(0,r+.001,1),a=Jt(t,e,n,i),s=Jt(t,e,n,o);return Fa(a,s)}(m.p0,m.p1,m.p2,k);break;case"straight":case"segments":case"haystack":for(var S,C,T,A,N=0,O=r.allpts.length,L=0;L+3=l));L+=2);var P=(l-C)/S;P=te(0,P,1),e=function(t,e,n,r){var i=e.x-t.x,o=e.y-t.y,a=$t(t,e),s=i/a,u=o/a;return n=null==n?0:n,r=null!=r?r:n*a,{x:t.x+s*r,y:t.y+u*r}}(T,A,P),u=Fa(T,A)}a("labelX",s,e.x),a("labelY",s,e.y),a("labelAutoAngle",s,u)}};u("source"),u("target"),this.applyLabelDimensions(t)}},Ga.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))},Ga.applyPrefixedLabelDimensions=function(t,e){var n=t._private,r=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,r),o=t.pstyle("line-height").pfValue,a=t.pstyle("text-wrap").strValue,s=_t(n.rscratch,"labelWrapCachedLines",e)||[],u="wrap"!==a?1:Math.max(s.length,1),c=i.height/u,l=c*o,f=i.width,h=i.height+(u-1)*(o-1)*c;Et(n.rstyle,"labelWidth",e,f),Et(n.rscratch,"labelWidth",e,f),Et(n.rstyle,"labelHeight",e,h),Et(n.rscratch,"labelHeight",e,h),Et(n.rscratch,"labelLineHeight",e,l)},Ga.getLabelText=function(t,e){var n=t._private,r=e?e+"-":"",i=t.pstyle(r+"label").strValue,o=t.pstyle("text-transform").value,a=function(t,r){return r?(Et(n.rscratch,t,e,r),r):_t(n.rscratch,t,e)};if(!i)return"";"none"==o||("uppercase"==o?i=i.toUpperCase():"lowercase"==o&&(i=i.toLowerCase()));var s=t.pstyle("text-wrap").value;if("wrap"===s){var u=a("labelKey");if(null!=u&&a("labelWrapKey")===u)return a("labelWrapCachedText");for(var c=i.split("\n"),l=t.pstyle("text-max-width").pfValue,f="anywhere"===t.pstyle("text-overflow-wrap").value,h=[],d=/[\s\u200b]+/,p=f?"":" ",g=0;gl){for(var w=v.split(d),m="",x=0;xk)break;S+=i[T],T===i.length-1&&(C=!0)}return C||(S+="…"),S}return i},Ga.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,n=t.pstyle("text-halign").strValue;if("auto"!==e)return e;if(!t.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},Ga.calculateLabelDimensions=function(t,e){var n=et(e,t._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var o=t.pstyle("font-style").strValue,a=1*t.pstyle("font-size").pfValue+"px",s=t.pstyle("font-family").strValue,u=t.pstyle("font-weight").strValue,c=this.labelCalcDiv;c||(c=this.labelCalcDiv=document.createElement("div"),document.body.appendChild(c));var l=c.style;return l.fontFamily=s,l.fontStyle=o,l.fontSize=a,l.fontWeight=u,l.position="absolute",l.left="-9999px",l.top="-9999px",l.zIndex="-1",l.visibility="hidden",l.pointerEvents="none",l.padding="0",l.lineHeight="1",l.whiteSpace="pre",c.textContent=e,r[n]={width:Math.ceil(c.clientWidth/1),height:Math.ceil(c.clientHeight/1)}},Ga.calculateLabelAngle=function(t,e){var n=t._private.rscratch,r=t.isEdge(),i=e?e+"-":"",o=t.pstyle(i+"text-rotation"),a=o.strValue;return"none"===a?0:r&&"autorotate"===a?n.labelAutoAngle:"autorotate"===a?0:o.pfValue},Ga.calculateLabelAngles=function(t){var e=this,n=t.isEdge(),r=t._private.rscratch;r.labelAngle=e.calculateLabelAngle(t),n&&(r.sourceLabelAngle=e.calculateLabelAngle(t,"source"),r.targetLabelAngle=e.calculateLabelAngle(t,"target"))};var za={},Ya=!1;za.getNodeShape=function(t){var e=t.pstyle("shape").value;if("cutrectangle"===e&&(t.width()<28||t.height()<28))return Ya||(pt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),Ya=!0),"rectangle";if(t.isParent())return"rectangle"===e||"roundrectangle"===e||"round-rectangle"===e||"cutrectangle"===e||"cut-rectangle"===e||"barrel"===e?e:"rectangle";if("polygon"===e){var n=t.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return e};var Va={registerCalculationListeners:function(){var t=this.cy,e=t.collection(),n=this,r=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(e.merge(t),n)for(var r=0;r=t.desktopTapThreshold2}var T=r(e);v&&(t.hoverData.tapholdCancelled=!0);i=!0,n(g,["mousemove","vmousemove","tapdrag"],e,{x:l[0],y:l[1]});var A=function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||a.emit({originalEvent:e,type:"boxstart",position:{x:l[0],y:l[1]}}),p[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()};if(3===t.hoverData.which){if(v){var N={originalEvent:e,type:"cxtdrag",position:{x:l[0],y:l[1]}};w?w.emit(N):a.emit(N),t.hoverData.cxtDragged=!0,t.hoverData.cxtOver&&g===t.hoverData.cxtOver||(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:e,type:"cxtdragout",position:{x:l[0],y:l[1]}}),t.hoverData.cxtOver=g,g&&g.emit({originalEvent:e,type:"cxtdragover",position:{x:l[0],y:l[1]}}))}}else if(t.hoverData.dragging){if(i=!0,a.panningEnabled()&&a.userPanningEnabled()){var O;if(t.hoverData.justStartedPan){var L=t.hoverData.mdownPos;O={x:(l[0]-L[0])*s,y:(l[1]-L[1])*s},t.hoverData.justStartedPan=!1}else O={x:m[0]*s,y:m[1]*s};a.panBy(O),t.hoverData.dragged=!0}l=t.projectIntoViewport(e.clientX,e.clientY)}else if(1!=p[4]||null!=w&&!w.pannable()){if(w&&w.pannable()&&w.active()&&w.unactivate(),w&&w.grabbed()||g==b||(b&&n(b,["mouseout","tapdragout"],e,{x:l[0],y:l[1]}),g&&n(g,["mouseover","tapdragover"],e,{x:l[0],y:l[1]}),t.hoverData.last=g),w)if(v){if(a.boxSelectionEnabled()&&T)w&&w.grabbed()&&(f(x),w.emit("freeon"),x.emit("free"),t.dragData.didDrag&&(w.emit("dragfreeon"),x.emit("dragfree"))),A();else if(w&&w.grabbed()&&t.nodeIsDraggable(w)){var P=!t.dragData.didDrag;P&&t.redrawHint("eles",!0),t.dragData.didDrag=!0;var I=a.collection();t.hoverData.draggingEles||c(x,{inDragLayer:!0});var j={x:0,y:0};if(E(m[0])&&E(m[1])&&(j.x+=m[0],j.y+=m[1],P)){var M=t.hoverData.dragDelta;M&&E(M[0])&&E(M[1])&&(j.x+=M[0],j.y+=M[1])}for(var D=0;D0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=c=o.collection()),u!=l||t.dragData.didDrag||t.hoverData.selecting||null!=u&&u._private.selectable&&(t.hoverData.dragging||("additive"===o.selectionType()||h?u.selected()?u.unselect(["tapunselect"]):u.select(["tapselect"]):h||(o.$(e).unmerge(u).unselect(["tapunselect"]),u.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var g=o.collection(t.getAllInBox(s[0],s[1],s[2],s[3]));t.redrawHint("select",!0),g.length>0&&t.redrawHint("eles",!0),o.emit({type:"boxend",originalEvent:i,position:{x:a[0],y:a[1]}});var v=function(t){return t.selectable()&&!t.selected()};"additive"===o.selectionType()||h||o.$(e).unmerge(g).unselect(),g.emit("box").stdFilter(v).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!s[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var b=l&&l.grabbed();f(c),b&&(l.emit("freeon"),c.emit("free"),t.dragData.didDrag&&(l.emit("dragfreeon"),c.emit("dragfree")))}}s[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null}}),!1);var w,m,x,_,k,S,C,T,A,N,O,L,P,I=function(e){if(!t.scrollingPage){var n=t.cy,r=n.zoom(),i=n.pan(),o=t.projectIntoViewport(e.clientX,e.clientY),a=[o[0]*r+i.x,o[1]*r+i.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||0!==t.selection[4])e.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;e.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout((function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()}),150),s=null!=e.deltaY?e.deltaY/-250:null!=e.wheelDeltaY?e.wheelDeltaY/1e3:e.wheelDelta/1e3,s*=t.wheelSensitivity,1===e.deltaMode&&(s*=33);var u=n.zoom()*Math.pow(10,s);"gesturechange"===e.type&&(u=t.gestureStartZoom*e.scale),n.zoom({level:u,renderedPosition:{x:a[0],y:a[1]}})}}};t.registerBinding(t.container,"wheel",I,!0),t.registerBinding(window,"scroll",(function(e){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout((function(){t.scrollingPage=!1}),250)}),!0),t.registerBinding(t.container,"gesturestart",(function(e){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||e.preventDefault()}),!0),t.registerBinding(t.container,"gesturechange",(function(e){t.hasTouchStarted||I(e)}),!0),t.registerBinding(t.container,"mouseout",(function(e){var n=t.projectIntoViewport(e.clientX,e.clientY);t.cy.emit({originalEvent:e,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),t.registerBinding(t.container,"mouseover",(function(e){var n=t.projectIntoViewport(e.clientX,e.clientY);t.cy.emit({originalEvent:e,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,M,D,R,B=function(t,e,n,r){return Math.sqrt((n-t)*(n-t)+(r-e)*(r-e))},G=function(t,e,n,r){return(n-t)*(n-t)+(r-e)*(r-e)};if(t.registerBinding(t.container,"touchstart",j=function(e){if(t.hasTouchStarted=!0,y(e)){d(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var r=t.cy,i=t.touchData.now,o=t.touchData.earlier;if(e.touches[0]){var a=t.projectIntoViewport(e.touches[0].clientX,e.touches[0].clientY);i[0]=a[0],i[1]=a[1]}if(e.touches[1]){a=t.projectIntoViewport(e.touches[1].clientX,e.touches[1].clientY);i[2]=a[0],i[3]=a[1]}if(e.touches[2]){a=t.projectIntoViewport(e.touches[2].clientX,e.touches[2].clientY);i[4]=a[0],i[5]=a[1]}if(e.touches[1]){t.touchData.singleTouchMoved=!0,f(t.dragData.touchDragEles);var u=t.findContainerClientCoords();A=u[0],N=u[1],O=u[2],L=u[3],w=e.touches[0].clientX-A,m=e.touches[0].clientY-N,x=e.touches[1].clientX-A,_=e.touches[1].clientY-N,P=0<=w&&w<=O&&0<=x&&x<=O&&0<=m&&m<=L&&0<=_&&_<=L;var h=r.pan(),p=r.zoom();k=B(w,m,x,_),S=G(w,m,x,_),T=[((C=[(w+x)/2,(m+_)/2])[0]-h.x)/p,(C[1]-h.y)/p];if(S<4e4&&!e.touches[2]){var g=t.findNearestElement(i[0],i[1],!0,!0),v=t.findNearestElement(i[2],i[3],!0,!0);return g&&g.isNode()?(g.activate().emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start=g):v&&v.isNode()?(v.activate().emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start=v):r.emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,void t.redraw()}}if(e.touches[2])r.boxSelectionEnabled()&&e.preventDefault();else if(e.touches[1]);else if(e.touches[0]){var b=t.findNearestElements(i[0],i[1],!0,!0),E=b[0];if(null!=E&&(E.activate(),t.touchData.start=E,t.touchData.starts=b,t.nodeIsGrabbable(E))){var I=t.dragData.touchDragEles=r.collection(),j=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),E.selected()?(j=r.$((function(e){return e.selected()&&t.nodeIsGrabbable(e)})),c(j,{addToList:I})):l(E,{addToList:I}),s(E);var M=function(t){return{originalEvent:e,type:t,position:{x:i[0],y:i[1]}}};E.emit(M("grabon")),j?j.forEach((function(t){t.emit(M("grab"))})):E.emit(M("grab"))}n(E,["touchstart","tapstart","vmousedown"],e,{x:i[0],y:i[1]}),null==E&&(t.data.bgActivePosistion={x:a[0],y:a[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout((function(){!1!==t.touchData.singleTouchMoved||t.pinching||t.touchData.selecting||n(t.touchData.start,["taphold"],e,{x:i[0],y:i[1]})}),t.tapholdDuration)}if(e.touches.length>=1){for(var D=t.touchData.startPosition=[],R=0;R=t.touchTapThreshold2}if(r&&t.touchData.cxt){e.preventDefault();var L=e.touches[0].clientX-A,I=e.touches[0].clientY-N,j=e.touches[1].clientX-A,M=e.touches[1].clientY-N,D=G(L,I,j,M);if(D/S>=2.25||D>=22500){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var R={originalEvent:e,type:"cxttapend",position:{x:s[0],y:s[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(R),t.touchData.start=null):a.emit(R)}}if(r&&t.touchData.cxt){R={originalEvent:e,type:"cxtdrag",position:{x:s[0],y:s[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(R):a.emit(R),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var H=t.findNearestElement(s[0],s[1],!0,!0);t.touchData.cxtOver&&H===t.touchData.cxtOver||(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:e,type:"cxtdragout",position:{x:s[0],y:s[1]}}),t.touchData.cxtOver=H,H&&H.emit({originalEvent:e,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(r&&e.touches[2]&&a.boxSelectionEnabled())e.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||a.emit({originalEvent:e,type:"boxstart",position:{x:s[0],y:s[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),t.redrawHint("select",!0),t.redraw();else if(r&&e.touches[1]&&!t.touchData.didSelect&&a.zoomingEnabled()&&a.panningEnabled()&&a.userZoomingEnabled()&&a.userPanningEnabled()){if(e.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),tt=t.dragData.touchDragEles){t.redrawHint("drag",!0);for(var F=0;F0&&!t.hoverData.draggingEles&&!t.swipePanning&&null!=t.data.bgActivePosistion&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},!1),t.registerBinding(window,"touchcancel",D=function(e){var n=t.touchData.start;t.touchData.capture=!1,n&&n.unactivate()}),t.registerBinding(window,"touchend",R=function(r){var i=t.touchData.start;if(t.touchData.capture){0===r.touches.length&&(t.touchData.capture=!1),r.preventDefault();var o=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var a,s=t.cy,u=s.zoom(),c=t.touchData.now,l=t.touchData.earlier;if(r.touches[0]){var h=t.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=h[0],c[1]=h[1]}if(r.touches[1]){h=t.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);c[2]=h[0],c[3]=h[1]}if(r.touches[2]){h=t.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);c[4]=h[0],c[5]=h[1]}if(i&&i.unactivate(),t.touchData.cxt){if(a={originalEvent:r,type:"cxttapend",position:{x:c[0],y:c[1]}},i?i.emit(a):s.emit(a),!t.touchData.cxtDragged){var d={originalEvent:r,type:"cxttap",position:{x:c[0],y:c[1]}};i?i.emit(d):s.emit(d)}return t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,void t.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var p=s.collection(t.getAllInBox(o[0],o[1],o[2],o[3]));o[0]=void 0,o[1]=void 0,o[2]=void 0,o[3]=void 0,o[4]=0,t.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:r,position:{x:c[0],y:c[1]}});p.emit("box").stdFilter((function(t){return t.selectable()&&!t.selected()})).select().emit("boxselect"),p.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(null!=i&&i.unactivate(),r.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var g=t.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;f(g),t.redrawHint("drag",!0),t.redrawHint("eles",!0),v&&(i.emit("freeon"),g.emit("free"),t.dragData.didDrag&&(i.emit("dragfreeon"),g.emit("dragfree"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]}),i.unactivate(),t.touchData.start=null}else{var b=t.findNearestElement(c[0],c[1],!0,!0);n(b,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]})}var y=t.touchData.startPosition[0]-c[0],w=y*y,m=t.touchData.startPosition[1]-c[1],x=(w+m*m)*u*u;t.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),n(i,["tap","vclick"],r,{x:c[0],y:c[1]})),null!=i&&!t.dragData.didDrag&&i._private.selectable&&x2){for(var A=[c[0],c[1]],N=Math.pow(A[0]-t,2)+Math.pow(A[1]-e,2),O=1;O0)return g[0]}return null},h=Object.keys(l),d=0;d0?u:le(i,o,t,e,n,r,a)},checkPoint:function(t,e,n,r,i,o,a){var s=Ae(r,i),u=2*s;if(ve(t,e,this.points,o,a,r,i-u,[0,-1],n))return!0;if(ve(t,e,this.points,o,a,r-u,i,[0,-1],n))return!0;var c=r/2+2*n,l=i/2+2*n;return!!ge(t,e,[o-c,a-l,o-c,a,o+c,a,o+c,a-l])||(!!we(t,e,u,u,o+r/2-s,a+i/2-s,n)||!!we(t,e,u,u,o-r/2+s,a+i/2-s,n))}}},$a.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",Se(3,0)),this.generateRoundPolygon("round-triangle",Se(3,0)),this.generatePolygon("rectangle",Se(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",Se(5,0)),this.generateRoundPolygon("round-pentagon",Se(5,0)),this.generatePolygon("hexagon",Se(6,0)),this.generateRoundPolygon("round-hexagon",Se(6,0)),this.generatePolygon("heptagon",Se(7,0)),this.generateRoundPolygon("round-heptagon",Se(7,0)),this.generatePolygon("octagon",Se(8,0)),this.generateRoundPolygon("round-octagon",Se(8,0));var r=new Array(20),i=Te(5,0),o=Te(5,Math.PI/5),a=.5*(3-Math.sqrt(5));a*=1.57;for(var s=0;s=t.deqFastCost*g)break}else if(i){if(d>=t.deqCost*u||d>=t.deqAvgCost*s)break}else if(p>=t.deqNoDrawCost*(1e3/60))break;var v=t.deq(e,f,l);if(!(v.length>0))break;for(var b=0;b0&&(t.onDeqd(e,c),!i&&t.shouldRedraw(e,c,f,l)&&r())}),o(e))}}},es=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ct;s(this,t),this.idsByKey=new kt,this.keyForId=new kt,this.cachesByLvl=new kt,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=n}return c(t,[{key:"getIdsFor",value:function(t){null==t&&ht("Can not get id list for null key");var e=this.idsByKey,n=this.idsByKey.get(t);return n||(n=new Ct,e.set(t,n)),n}},{key:"addIdForKey",value:function(t,e){null!=t&&this.getIdsFor(t).add(e)}},{key:"deleteIdForKey",value:function(t,e){null!=t&&this.getIdsFor(t).delete(e)}},{key:"getNumberOfIdsForKey",value:function(t){return null==t?0:this.getIdsFor(t).size}},{key:"updateKeyMappingFor",value:function(t){var e=t.id(),n=this.keyForId.get(e),r=this.getKey(t);this.deleteIdForKey(n,e),this.addIdForKey(r,e),this.keyForId.set(e,r)}},{key:"deleteKeyMappingFor",value:function(t){var e=t.id(),n=this.keyForId.get(e);this.deleteIdForKey(n,e),this.keyForId.delete(e)}},{key:"keyHasChangedFor",value:function(t){var e=t.id();return this.keyForId.get(e)!==this.getKey(t)}},{key:"isInvalid",value:function(t){return this.keyHasChangedFor(t)||this.doesEleInvalidateKey(t)}},{key:"getCachesAt",value:function(t){var e=this.cachesByLvl,n=this.lvls,r=e.get(t);return r||(r=new kt,e.set(t,r),n.push(t)),r}},{key:"getCache",value:function(t,e){return this.getCachesAt(e).get(t)}},{key:"get",value:function(t,e){var n=this.getKey(t),r=this.getCache(n,e);return null!=r&&this.updateKeyMappingFor(t),r}},{key:"getForCachedKey",value:function(t,e){var n=this.keyForId.get(t.id());return this.getCache(n,e)}},{key:"hasCache",value:function(t,e){return this.getCachesAt(e).has(t)}},{key:"has",value:function(t,e){var n=this.getKey(t);return this.hasCache(n,e)}},{key:"setCache",value:function(t,e,n){n.key=t,this.getCachesAt(e).set(t,n)}},{key:"set",value:function(t,e,n){var r=this.getKey(t);this.setCache(r,e,n),this.updateKeyMappingFor(t)}},{key:"deleteCache",value:function(t,e){this.getCachesAt(e).delete(t)}},{key:"delete",value:function(t,e){var n=this.getKey(t);this.deleteCache(n,e)}},{key:"invalidateKey",value:function(t){var e=this;this.lvls.forEach((function(n){return e.deleteCache(t,n)}))}},{key:"invalidate",value:function(t){var e=t.id(),n=this.keyForId.get(e);this.deleteKeyMappingFor(t);var r=this.doesEleInvalidateKey(t);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),t}(),ns={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},rs=wt({getKey:null,doesEleInvalidateKey:ct,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ut,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),is=function(t,e){this.renderer=t,this.onDequeues=[];var n=rs(e);G(this,n),this.lookup=new es(n.getKey,n.doesEleInvalidateKey),this.setupDequeueing()},os=is.prototype;os.reasons=ns,os.getTextureQueue=function(t){return this.eleImgCaches=this.eleImgCaches||{},this.eleImgCaches[t]=this.eleImgCaches[t]||[]},os.getRetiredTextureQueue=function(t){var e=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return e[t]=e[t]||[]},os.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new o((function(t,e){return e.reqs-t.reqs}))},os.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},os.getElement=function(t,e,n,r,i){var o=this,a=this.renderer,s=a.cy.zoom(),u=this.lookup;if(0===e.w||0===e.h||isNaN(e.w)||isNaN(e.h)||!t.visible())return null;if(!o.allowEdgeTxrCaching&&t.isEdge()||!o.allowParentTxrCaching&&t.isParent())return null;if(null==r&&(r=Math.ceil(Xt(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var c=Math.pow(2,r),l=e.h*c,f=e.w*c,h=a.eleTextBiggerThanMin(t,c);if(!this.isVisible(t,h))return null;var d,p=u.get(t,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(d=l<=25?25:l<=50?50:50*Math.ceil(l/50),l>1024||f>1024)return null;var g=o.getTextureQueue(d),v=g[g.length-2],b=function(){return o.recycleTexture(d,f)||o.addTexture(d,f)};v||(v=g[g.length-1]),v||(v=b()),v.width-v.usedWidthr;T--)S=o.getElement(t,e,n,T,ns.downscale);C()}else{var A;if(!m&&!x&&!_)for(var N=r-1;N>=-4;N--){var O=u.get(t,N);if(O){A=O;break}}if(w(A))return o.queueElement(t,r),A;v.context.translate(v.usedWidth,0),v.context.scale(c,c),this.drawElement(v.context,t,e,h,!1),v.context.scale(1/c,1/c),v.context.translate(-v.usedWidth,0)}return p={x:v.usedWidth,texture:v,level:r,scale:c,width:f,height:l,scaledLabelShown:h},v.usedWidth+=Math.ceil(f+8),v.eleCaches.push(p),u.set(t,r,p),o.checkTextureFullness(v),p},os.invalidateElements=function(t){for(var e=0;e=.2*t.width&&this.retireTexture(t)},os.checkTextureFullness=function(t){var e=this.getTextureQueue(t.height);t.usedWidth/t.width>.8&&t.fullnessChecks>=10?mt(e,t):t.fullnessChecks++},os.retireTexture=function(t){var e=t.height,n=this.getTextureQueue(e),r=this.lookup;mt(n,t),t.retired=!0;for(var i=t.eleCaches,o=0;o=e)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,xt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),mt(r,o),n.push(o),o}},os.queueElement=function(t,e){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(t),o=r[i];if(o)o.level=Math.max(o.level,e),o.eles.merge(t),o.reqs++,n.updateItem(o);else{var a={eles:t.spawn().merge(t),level:e,reqs:1,key:i};n.push(a),r[i]=a}},os.dequeue=function(t){for(var e=this.getElementQueue(),n=this.getElementKeyToQueue(),r=[],i=this.lookup,o=0;o<1&&e.size()>0;o++){var a=e.pop(),s=a.key,u=a.eles[0],c=i.hasCache(u,a.level);if(n[s]=null,!c){r.push(a);var l=this.getBoundingBox(u);this.getElement(u,l,t,a.level,ns.dequeue)}}return r},os.removeFromQueue=function(t){var e=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(t),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=st,e.updateItem(i),e.pop(),n[r]=null):i.eles.unmerge(t))},os.onDequeue=function(t){this.onDequeues.push(t)},os.offDequeue=function(t){mt(this.onDequeues,t)},os.setupDequeueing=ts({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(t,e,n){return t.dequeue(e,n)},onDeqd:function(t,e){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,t);var a,s,u=r.layersByLevel,c=Math.pow(2,n),l=u[n]=u[n]||[];if(r.levelIsComplete(n,t))return l;!function(){var e=function(e){if(r.validateLayersElesOrdering(e,t),r.levelIsComplete(e,t))return s=u[e],!0},i=function(t){if(!s)for(var r=n+t;-4<=r&&r<=2&&!e(r);r+=t);};i(1),i(-1);for(var o=l.length-1;o>=0;o--){var a=l[o];a.invalid&&mt(l,a)}}();var f=function(e){var i=(e=e||{}).after;if(function(){if(!a){a=ee();for(var e=0;e16e6)return null;var o=r.makeLayer(a,n);if(null!=i){var s=l.indexOf(i)+1;l.splice(s,0,o)}else(void 0===e.insert||e.insert)&&l.unshift(o);return o};if(r.skipping&&!o)return null;for(var h=null,d=t.length/1,p=!o,g=0;g=d||!ce(h.bb,v.boundingBox()))&&!(h=f({insert:!0,after:h})))return null;s||p?r.queueLayer(h,v):r.drawEleInLayer(h,v,n,e),h.eles.push(v),y[n]=h}}return s||(p?null:l)},ss.getEleLevelForLayerLevel=function(t,e){return t},ss.drawEleInLayer=function(t,e,n,r){var i=this.renderer,o=t.context,a=e.boundingBox();0!==a.w&&0!==a.h&&e.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(o,!1),i.drawCachedElement(o,e,null,null,n,!0),i.setImgSmoothing(o,!0))},ss.levelIsComplete=function(t,e){var n=this.layersByLevel[t];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(o.invalid)return!1;r+=o.eles.length}return r===e.length},ss.validateLayersElesOrdering=function(t,e){var n=this.layersByLevel[t];if(n)for(var r=0;r0){t=!0;break}}return t},ss.invalidateElements=function(t){var e=this;0!==t.length&&(e.lastInvalidationTime=W(),0!==t.length&&e.haveLayers()&&e.updateElementsInLayers(t,(function(t,n,r){e.invalidateLayer(t)})))},ss.invalidateLayer=function(t){if(this.lastInvalidationTime=W(),!t.invalid){var e=t.level,n=t.eles,r=this.layersByLevel[e];mt(r,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],a=this,s=e._private.rscratch;if((!o||e.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var u;n&&(u=n,t.translate(-u.x1,-u.y1));var c=o?e.pstyle("opacity").value:1,l=e.pstyle("line-style").value,f=e.pstyle("width").pfValue,h=e.pstyle("line-cap").value,d=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;t.lineWidth=f,t.lineCap=h,a.eleStrokeStyle(t,e,n),a.drawEdgePath(e,t,s.allpts,l),t.lineCap="butt"},p=function(){i&&a.drawEdgeOverlay(t,e)},g=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;a.drawArrowheads(t,e,n)},v=function(){a.drawElementText(t,e,null,r)};t.lineJoin="round";var b="yes"===e.pstyle("ghost").value;if(b){var y=e.pstyle("ghost-offset-x").pfValue,w=e.pstyle("ghost-offset-y").pfValue,m=e.pstyle("ghost-opacity").value,x=c*m;t.translate(y,w),d(x),g(x),t.translate(-y,-w)}d(),g(),p(),v(),n&&t.translate(u.x1,u.y1)}},drawEdgeOverlay:function(t,e){if(e.visible()){var n=e.pstyle("overlay-opacity").value;if(0!==n){var r=this,i=r.usePaths(),o=e._private.rscratch,a=2*e.pstyle("overlay-padding").pfValue,s=e.pstyle("overlay-color").value;t.lineWidth=a,"self"!==o.edgeType||i?t.lineCap="round":t.lineCap="butt",r.colorStrokeStyle(t,s[0],s[1],s[2],n),r.drawEdgePath(e,t,o.allpts,"solid")}}},drawEdgePath:function(t,e,n,r){var i,o=t._private.rscratch,a=e,s=!1,u=this.usePaths(),c=t.pstyle("line-dash-pattern").pfValue,l=t.pstyle("line-dash-offset").pfValue;if(u){var f=n.join("$");o.pathCacheKey&&o.pathCacheKey===f?(i=e=o.pathCache,s=!0):(i=e=new Path2D,o.pathCacheKey=f,o.pathCache=i)}if(a.setLineDash)switch(r){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(c),a.lineDashOffset=l;break;case"solid":a.setLineDash([])}if(!s&&!o.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(n[0],n[1]),o.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+35&&void 0!==arguments[5]?arguments[5]:5;t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+r-o,n),t.quadraticCurveTo(e+r,n,e+r,n+o),t.lineTo(e+r,n+i-o),t.quadraticCurveTo(e+r,n+i,e+r-o,n+i),t.lineTo(e+o,n+i),t.quadraticCurveTo(e,n+i,e,n+i-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath(),t.fill()}Cs.eleTextBiggerThanMin=function(t,e){if(!e){var n=t.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(Xt(n*r));e=Math.pow(2,i)}return!(t.pstyle("font-size").pfValue*e5&&void 0!==arguments[5])||arguments[5],a=this;if(null==r){if(o&&!a.eleTextBiggerThanMin(e))return}else if(!1===r)return;if(e.isNode()){var s=e.pstyle("label");if(!s||!s.value)return;var u=a.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var c=e.element()._private.rscratch.badLine,l=e.pstyle("label"),f=e.pstyle("source-label"),h=e.pstyle("target-label");if(c||(!l||!l.value)&&(!f||!f.value)&&(!h||!h.value))return;t.textAlign="center",t.textBaseline="bottom"}var d,p=!n;n&&(d=n,t.translate(-d.x1,-d.y1)),null==i?(a.drawText(t,e,null,p,o),e.isEdge()&&(a.drawText(t,e,"source",p,o),a.drawText(t,e,"target",p,o))):a.drawText(t,e,i,p,o),n&&t.translate(d.x1,d.y1)},Cs.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",o=e.pstyle("font-family").strValue,a=e.pstyle("font-weight").strValue,s=n?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*s,c=e.pstyle("color").value,l=e.pstyle("text-outline-color").value;t.font=r+" "+a+" "+i+" "+o,t.lineJoin="round",this.colorFillStyle(t,c[0],c[1],c[2],s),this.colorStrokeStyle(t,l[0],l[1],l[2],u)},Cs.getTextAngle=function(t,e){var n=t._private.rscratch,r=e?e+"-":"",i=t.pstyle(r+"text-rotation"),o=_t(n,"labelAngle",e);return"autorotate"===i.strValue?t.isEdge()?o:0:"none"===i.strValue?0:i.pfValue},Cs.drawText=function(t,e,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e._private,a=o.rscratch,s=i?e.effectiveOpacity():1;if(!i||0!==s&&0!==e.pstyle("text-opacity").value){"main"===n&&(n=null);var u,c,l=_t(a,"labelX",n),f=_t(a,"labelY",n),h=this.getLabelText(e,n);if(null!=h&&""!==h&&!isNaN(l)&&!isNaN(f)){this.setupTextStyle(t,e,i);var d,p=n?n+"-":"",g=_t(a,"labelWidth",n),v=_t(a,"labelHeight",n),b=e.pstyle(p+"text-margin-x").pfValue,y=e.pstyle(p+"text-margin-y").pfValue,w=e.isEdge(),m=e.pstyle("text-halign").value,x=e.pstyle("text-valign").value;switch(w&&(m="center",x="center"),l+=b,f+=y,0!==(d=r?this.getTextAngle(e,n):0)&&(u=l,c=f,t.translate(u,c),t.rotate(d),l=0,f=0),x){case"top":break;case"center":f+=v/2;break;case"bottom":f+=v}var _=e.pstyle("text-background-opacity").value,E=e.pstyle("text-border-opacity").value,k=e.pstyle("text-border-width").pfValue,S=e.pstyle("text-background-padding").pfValue;if(_>0||k>0&&E>0){var C=l-S;switch(m){case"left":C-=g;break;case"center":C-=g/2}var T=f-v-S,A=g+2*S,N=v+2*S;if(_>0){var O=t.fillStyle,L=e.pstyle("text-background-color").value;t.fillStyle="rgba("+L[0]+","+L[1]+","+L[2]+","+_*s+")";var P=e.pstyle("text-background-shape").strValue;0===P.indexOf("round")?Ts(t,C,T,A,N,2):t.fillRect(C,T,A,N),t.fillStyle=O}if(k>0&&E>0){var I=t.strokeStyle,j=t.lineWidth,M=e.pstyle("text-border-color").value,D=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+M[0]+","+M[1]+","+M[2]+","+E*s+")",t.lineWidth=k,t.setLineDash)switch(D){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=k/4,t.setLineDash([]);break;case"solid":t.setLineDash([])}if(t.strokeRect(C,T,A,N),"double"===D){var R=k/2;t.strokeRect(C+R,T+R,A-2*R,N-2*R)}t.setLineDash&&t.setLineDash([]),t.lineWidth=j,t.strokeStyle=I}}var B=2*e.pstyle("text-outline-width").pfValue;if(B>0&&(t.lineWidth=B),"wrap"===e.pstyle("text-wrap").value){var G=_t(a,"labelWrapCachedLines",n),H=_t(a,"labelLineHeight",n),F=g/2,z=this.getLabelJustification(e);switch("auto"===z||("left"===m?"left"===z?l+=-g:"center"===z&&(l+=-F):"center"===m?"left"===z?l+=-F:"right"===z&&(l+=F):"right"===m&&("center"===z?l+=F:"right"===z&&(l+=g))),x){case"top":f-=(G.length-1)*H;break;case"center":case"bottom":f-=(G.length-1)*H}for(var Y=0;Y0&&t.strokeText(G[Y],l,f),t.fillText(G[Y],l,f),f+=H}else B>0&&t.strokeText(h,l,f),t.fillText(h,l,f);0!==d&&(t.rotate(-d),t.translate(-u,-c))}}};var As={drawNode:function(t,e,n){var r,i,o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=this,c=e._private,l=c.rscratch,f=e.position();if(E(f.x)&&E(f.y)&&(!s||e.visible())){var h,d,p=s?e.effectiveOpacity():1,g=u.usePaths(),v=!1,b=e.padding();r=e.width()+2*b,i=e.height()+2*b,n&&(d=n,t.translate(-d.x1,-d.y1));for(var y=e.pstyle("background-image"),w=y.value,m=new Array(w.length),x=new Array(w.length),_=0,k=0;k0&&void 0!==arguments[0]?arguments[0]:O;u.eleFillStyle(t,e,n)},M=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:I;u.colorStrokeStyle(t,L[0],L[1],L[2],e)},D=e.pstyle("shape").strValue,R=e.pstyle("shape-polygon-points").pfValue;if(g){t.translate(f.x,f.y);var B=u.nodePathCache=u.nodePathCache||[],G=nt("polygon"===D?D+","+R.join(","):D,""+i,""+r),H=B[G];null!=H?(h=H,v=!0,l.pathCache=h):(h=new Path2D,B[G]=l.pathCache=h)}var F=function(){if(!v){var n=f;g&&(n={x:0,y:0}),u.nodeShapes[u.getNodeShape(e)].draw(h||t,n.x,n.y,r,i)}g?t.fill(h):t.fill()},z=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=c.backgrounding,i=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;u.hasPie(e)&&(u.drawPie(t,e,o),n&&(g||u.nodeShapes[u.getNodeShape(e)].draw(t,f.x,f.y,r,i)))},V=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,n=(A>0?A:-A)*e,r=A>0?0:255;0!==A&&(u.colorFillStyle(t,r,r,r,n),g?t.fill(h):t.fill())},q=function(){if(N>0){if(t.lineWidth=N,t.lineCap="butt",t.setLineDash)switch(P){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([])}if(g?t.stroke(h):t.stroke(),"double"===P){t.lineWidth=N/3;var e=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",g?t.stroke(h):t.stroke(),t.globalCompositeOperation=e}t.setLineDash&&t.setLineDash([])}},U=function(){a&&u.drawNodeOverlay(t,e,f,r,i)},X=function(){u.drawElementText(t,e,null,o)},W="yes"===e.pstyle("ghost").value;if(W){var $=e.pstyle("ghost-offset-x").pfValue,K=e.pstyle("ghost-offset-y").pfValue,Z=e.pstyle("ghost-opacity").value,Q=Z*p;t.translate($,K),j(Z*O),F(),z(Q),Y(0!==A||0!==N),V(Q),M(Z*I),q(),t.translate(-$,-K)}j(),F(),z(),Y(0!==A||0!==N),V(),M(),q(),g&&t.translate(-f.x,-f.y),X(),U(),n&&t.translate(d.x1,d.y1)}},drawNodeOverlay:function(t,e,n,r,i){if(e.visible()){var o=e.pstyle("overlay-padding").pfValue,a=e.pstyle("overlay-opacity").value,s=e.pstyle("overlay-color").value;if(a>0){if(n=n||e.position(),null==r||null==i){var u=e.padding();r=e.width()+2*u,i=e.height()+2*u}this.colorFillStyle(t,s[0],s[1],s[2],a),this.nodeShapes.roundrectangle.draw(t,n.x,n.y,r+2*o,i+2*o),t.fill()}}},hasPie:function(t){return(t=t[0])._private.hasPie},drawPie:function(t,e,n,r){e=e[0],r=r||e.position();var i=e.cy().style(),o=e.pstyle("pie-size"),a=r.x,s=r.y,u=e.width(),c=e.height(),l=Math.min(u,c)/2,f=0;this.usePaths()&&(a=0,s=0),"%"===o.units?l*=o.pfValue:void 0!==o.pfValue&&(l=o.pfValue/2);for(var h=1;h<=i.pieBackgroundN;h++){var d=e.pstyle("pie-"+h+"-background-size").value,p=e.pstyle("pie-"+h+"-background-color").value,g=e.pstyle("pie-"+h+"-background-opacity").value*n,v=d/100;v+f>1&&(v=1-f);var b=1.5*Math.PI+2*Math.PI*f,y=b+2*Math.PI*v;0===d||f>=1||f+v>1||(t.beginPath(),t.moveTo(a,s),t.arc(a,s,l,b,y),t.closePath(),this.colorFillStyle(t,p[0],p[1],p[2],g),t.fill(),f+=v)}}},Ns={};Ns.getPixelRatio=function(){var t=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var e=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/e},Ns.paintCache=function(t){for(var e,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;ia.minMbLowQualFrames&&(a.motionBlurPxRatio=a.mbPxRBlurry)),a.clearingMotionBlur&&(a.motionBlurPxRatio=1),a.textureDrawLastFrame&&!f&&(l[a.NODE]=!0,l[a.SELECT_BOX]=!0);var y=u.style(),w=u.zoom(),m=void 0!==i?i:w,x=u.pan(),_={x:x.x,y:x.y},E={zoom:w,pan:{x:x.x,y:x.y}},k=a.prevViewport;void 0===k||E.zoom!==k.zoom||E.pan.x!==k.pan.x||E.pan.y!==k.pan.y||g&&!p||(a.motionBlurPxRatio=1),o&&(_=o),m*=s,_.x*=s,_.y*=s;var S=a.getCachedZSortedEles();function C(t,e,n,r,i){var o=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",a.colorFillStyle(t,255,255,255,a.motionBlurTransparency),t.fillRect(e,n,r,i),t.globalCompositeOperation=o}function T(t,r){var s,u,l,f;a.clearingMotionBlur||t!==c.bufferContexts[a.MOTIONBLUR_BUFFER_NODE]&&t!==c.bufferContexts[a.MOTIONBLUR_BUFFER_DRAG]?(s=_,u=m,l=a.canvasWidth,f=a.canvasHeight):(s={x:x.x*d,y:x.y*d},u=w*d,l=a.canvasWidth*d,f=a.canvasHeight*d),t.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(t,0,0,l,f):e||void 0!==r&&!r||t.clearRect(0,0,l,f),n||(t.translate(s.x,s.y),t.scale(u,u)),o&&t.translate(o.x,o.y),i&&t.scale(i,i)}if(f||(a.textureDrawLastFrame=!1),f){if(a.textureDrawLastFrame=!0,!a.textureCache){a.textureCache={},a.textureCache.bb=u.mutableElements().boundingBox(),a.textureCache.texture=a.data.bufferCanvases[a.TEXTURE_BUFFER];var A=a.data.bufferContexts[a.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,a.canvasWidth*a.textureMult,a.canvasHeight*a.textureMult),a.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*a.textureMult}),(E=a.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:a.canvasWidth,height:a.canvasHeight}).mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}l[a.DRAG]=!1,l[a.NODE]=!1;var N=c.contexts[a.NODE],O=a.textureCache.texture;E=a.textureCache.viewport;N.setTransform(1,0,0,1,0,0),h?C(N,0,0,E.width,E.height):N.clearRect(0,0,E.width,E.height);var L=y.core("outside-texture-bg-color").value,P=y.core("outside-texture-bg-opacity").value;a.colorFillStyle(N,L[0],L[1],L[2],P),N.fillRect(0,0,E.width,E.height);w=u.zoom();T(N,!1),N.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/s,E.height/E.zoom/s),N.drawImage(O,E.mpan.x,E.mpan.y,E.width/E.zoom/s,E.height/E.zoom/s)}else a.textureOnViewport&&!e&&(a.textureCache=null);var I=u.extent(),j=a.pinching||a.hoverData.dragging||a.swipePanning||a.data.wheelZooming||a.hoverData.draggingEles||a.cy.animated(),M=a.hideEdgesOnViewport&&j,D=[];if(D[a.NODE]=!l[a.NODE]&&h&&!a.clearedForMotionBlur[a.NODE]||a.clearingMotionBlur,D[a.NODE]&&(a.clearedForMotionBlur[a.NODE]=!0),D[a.DRAG]=!l[a.DRAG]&&h&&!a.clearedForMotionBlur[a.DRAG]||a.clearingMotionBlur,D[a.DRAG]&&(a.clearedForMotionBlur[a.DRAG]=!0),l[a.NODE]||n||r||D[a.NODE]){var R=h&&!D[a.NODE]&&1!==d;T(N=e||(R?a.data.bufferContexts[a.MOTIONBLUR_BUFFER_NODE]:c.contexts[a.NODE]),h&&!R?"motionBlur":void 0),M?a.drawCachedNodes(N,S.nondrag,s,I):a.drawLayeredElements(N,S.nondrag,s,I),a.debug&&a.drawDebugPoints(N,S.nondrag),n||h||(l[a.NODE]=!1)}if(!r&&(l[a.DRAG]||n||D[a.DRAG])){R=h&&!D[a.DRAG]&&1!==d;T(N=e||(R?a.data.bufferContexts[a.MOTIONBLUR_BUFFER_DRAG]:c.contexts[a.DRAG]),h&&!R?"motionBlur":void 0),M?a.drawCachedNodes(N,S.drag,s,I):a.drawCachedElements(N,S.drag,s,I),a.debug&&a.drawDebugPoints(N,S.drag),n||h||(l[a.DRAG]=!1)}if(a.showFps||!r&&l[a.SELECT_BOX]&&!n){if(T(N=e||c.contexts[a.SELECT_BOX]),1==a.selection[4]&&(a.hoverData.selecting||a.touchData.selecting)){w=a.cy.zoom();var B=y.core("selection-box-border-width").value/w;N.lineWidth=B,N.fillStyle="rgba("+y.core("selection-box-color").value[0]+","+y.core("selection-box-color").value[1]+","+y.core("selection-box-color").value[2]+","+y.core("selection-box-opacity").value+")",N.fillRect(a.selection[0],a.selection[1],a.selection[2]-a.selection[0],a.selection[3]-a.selection[1]),B>0&&(N.strokeStyle="rgba("+y.core("selection-box-border-color").value[0]+","+y.core("selection-box-border-color").value[1]+","+y.core("selection-box-border-color").value[2]+","+y.core("selection-box-opacity").value+")",N.strokeRect(a.selection[0],a.selection[1],a.selection[2]-a.selection[0],a.selection[3]-a.selection[1]))}if(c.bgActivePosistion&&!a.hoverData.selecting){w=a.cy.zoom();var G=c.bgActivePosistion;N.fillStyle="rgba("+y.core("active-bg-color").value[0]+","+y.core("active-bg-color").value[1]+","+y.core("active-bg-color").value[2]+","+y.core("active-bg-opacity").value+")",N.beginPath(),N.arc(G.x,G.y,y.core("active-bg-size").pfValue/w,0,2*Math.PI),N.fill()}var H=a.lastRedrawTime;if(a.showFps&&H){H=Math.round(H);var F=Math.round(1e3/H);N.setTransform(1,0,0,1,0,0),N.fillStyle="rgba(255, 0, 0, 0.75)",N.strokeStyle="rgba(255, 0, 0, 0.75)",N.lineWidth=1,N.fillText("1 frame = "+H+" ms = "+F+" fps",0,20);N.strokeRect(0,30,250,20),N.fillRect(0,30,250*Math.min(F/60,1),20)}n||(l[a.SELECT_BOX]=!1)}if(h&&1!==d){var z=c.contexts[a.NODE],Y=a.data.bufferCanvases[a.MOTIONBLUR_BUFFER_NODE],V=c.contexts[a.DRAG],q=a.data.bufferCanvases[a.MOTIONBLUR_BUFFER_DRAG],U=function(t,e,n){t.setTransform(1,0,0,1,0,0),n||!b?t.clearRect(0,0,a.canvasWidth,a.canvasHeight):C(t,0,0,a.canvasWidth,a.canvasHeight);var r=d;t.drawImage(e,0,0,a.canvasWidth*r,a.canvasHeight*r,0,0,a.canvasWidth,a.canvasHeight)};(l[a.NODE]||D[a.NODE])&&(U(z,Y,D[a.NODE]),l[a.NODE]=!1),(l[a.DRAG]||D[a.DRAG])&&(U(V,q,D[a.DRAG]),l[a.DRAG]=!1)}a.prevViewport=E,a.clearingMotionBlur&&(a.clearingMotionBlur=!1,a.motionBlurCleared=!0,a.motionBlur=!0),h&&(a.motionBlurTimeout=setTimeout((function(){a.motionBlurTimeout=null,a.clearedForMotionBlur[a.NODE]=!1,a.clearedForMotionBlur[a.DRAG]=!1,a.motionBlur=!1,a.clearingMotionBlur=!f,a.mbFrames=0,l[a.NODE]=!0,l[a.DRAG]=!0,a.redraw()}),100)),e||u.emit("render")};for(var Os={drawPolygonPath:function(t,e,n,r,i,o){var a=r/2,s=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+a*o[0],n+s*o[1]);for(var u=1;u0&&o>0){h.clearRect(0,0,i,o),h.globalCompositeOperation="source-over";var d=this.getCachedZSortedEles();if(t.full)h.translate(-n.x1*u,-n.y1*u),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(n.x1*u,n.y1*u);else{var p=e.pan(),g={x:p.x*u,y:p.y*u};u*=e.zoom(),h.translate(g.x,g.y),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(-g.x,-g.y)}t.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=t.bg,h.rect(0,0,i,o),h.fill())}return f},Rs.png=function(t){return Gs(t,this.bufferCanvasImage(t),"image/png")},Rs.jpg=function(t){return Gs(t,this.bufferCanvasImage(t),"image/jpeg")};var Hs={nodeShapeImpl:function(t,e,n,r,i,o,a){switch(t){case"ellipse":return this.drawEllipsePath(e,n,r,i,o);case"polygon":return this.drawPolygonPath(e,n,r,i,o,a);case"round-polygon":return this.drawRoundPolygonPath(e,n,r,i,o,a);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,n,r,i,o);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,n,r,i,o);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,n,r,i,o);case"barrel":return this.drawBarrelPath(e,n,r,i,o)}}},Fs=Ys,zs=Ys.prototype;function Ys(t){var e=this;e.data={canvases:new Array(zs.CANVAS_LAYERS),contexts:new Array(zs.CANVAS_LAYERS),canvasNeedsRedraw:new Array(zs.CANVAS_LAYERS),bufferCanvases:new Array(zs.BUFFER_COUNT),bufferContexts:new Array(zs.CANVAS_LAYERS)};e.data.canvasContainer=document.createElement("div");var n=e.data.canvasContainer.style;e.data.canvasContainer.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",n.position="relative",n.zIndex="0",n.overflow="hidden";var r=t.cy.container();r.appendChild(e.data.canvasContainer),r.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)";var i={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};d&&d.userAgent.match(/msie|trident|edge/i)&&(i["-ms-touch-action"]="none",i["touch-action"]="none");for(var o=0;o=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(137),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(20))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,n){this.source=t,this.target=e,this.type=n};e.PowerEdge=r;var i=function(){function t(t,e,n,r){var i=this;if(this.linkAccessor=n,this.modules=new Array(t),this.roots=[],r)this.initModulesFromGroup(r);else{this.roots.push(new s);for(var a=0;a=this.R))return this.merge(e.a,e.b,t),!0}},t.prototype.nEdges=function(t,e){var n=t.incoming.intersection(e.incoming),r=t.outgoing.intersection(e.outgoing);return this.R-n.count()-r.count()},t.prototype.getGroupHierarchy=function(t){var e=this,n=[];return function t(e,n,r){e.forAll((function(e){if(e.isLeaf())n.leaves||(n.leaves=[]),n.leaves.push(e.id);else{var i=n;if(e.gid=r.length,!e.isIsland()||e.isPredefined()){if(i={id:e.gid},e.isPredefined())for(var o in e.definition)i[o]=e.definition[o];n.groups||(n.groups=[]),n.groups.push(e.gid),r.push(i)}t(e.children,i,r)}}))}(this.roots[0],{},n),this.allEdges().forEach((function(i){var o=e.modules[i.source],a=e.modules[i.target];t.push(new r(void 0===o.gid?i.source:n[o.gid],void 0===a.gid?i.target:n[a.gid],i.type))})),n},t.prototype.allEdges=function(){var e=[];return t.getEdges(this.roots[0],e),e},t.getEdges=function(e,n){e.forAll((function(e){e.getEdges(n),t.getEdges(e.children,n)}))},t}();e.Configuration=i;var o=function(){function t(t,e,n,r,i){void 0===e&&(e=new u),void 0===n&&(n=new u),void 0===r&&(r=new s),this.id=t,this.outgoing=e,this.incoming=n,this.children=r,this.definition=i}return t.prototype.getEdges=function(t){var e=this;this.outgoing.forAll((function(n,i){n.forAll((function(n){t.push(new r(e.id,n.id,i))}))}))},t.prototype.isLeaf=function(){return 0===this.children.count()},t.prototype.isIsland=function(){return 0===this.outgoing.count()&&0===this.incoming.count()},t.prototype.isPredefined=function(){return void 0!==this.definition},t}();function a(t,e){var n={};for(var r in t)r in e&&(n[r]=t[r]);return n}e.Module=o;var s=function(){function t(){this.table={}}return t.prototype.count=function(){return Object.keys(this.table).length},t.prototype.intersection=function(e){var n=new t;return n.table=a(this.table,e.table),n},t.prototype.intersectionCount=function(t){return this.intersection(t).count()},t.prototype.contains=function(t){return t in this.table},t.prototype.add=function(t){this.table[t.id]=t},t.prototype.remove=function(t){delete this.table[t.id]},t.prototype.forAll=function(t){for(var e in this.table)t(this.table[e])},t.prototype.modules=function(){var t=[];return this.forAll((function(e){e.isPredefined()||t.push(e)})),t},t}();e.ModuleSet=s;var u=function(){function t(){this.sets={},this.n=0}return t.prototype.count=function(){return this.n},t.prototype.contains=function(t){var e=!1;return this.forAllModules((function(n){e||n.id!=t||(e=!0)})),e},t.prototype.add=function(t,e){(t in this.sets?this.sets[t]:this.sets[t]=new s).add(e),++this.n},t.prototype.remove=function(t,e){var n=this.sets[t];n.remove(e),0===n.count()&&delete this.sets[t],--this.n},t.prototype.forAll=function(t){for(var e in this.sets)t(this.sets[e],Number(e))},t.prototype.forAllModules=function(t){this.forAll((function(e,n){return e.forAll(t)}))},t.prototype.intersection=function(e){var n=new t;return this.forAll((function(t,r){if(r in e.sets){var i=t.intersection(e.sets[r]),o=i.count();o>0&&(n.sets[r]=i,n.n+=o)}})),n},t}();e.LinkSets=u,e.getGroups=function(t,e,n,r){for(var o=t.length,a=new i(o,e,n,r);a.greedyMerge(););var s=[],u=a.getGroupHierarchy(s);return s.forEach((function(e){var n=function(n){var r=e[n];"number"==typeof r&&(e[n]=t[r])};n("source"),n("target")})),{groups:u,powerEdges:s}}},function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(){this.findIter=function(t){for(var e=this._root,n=this.iterator();null!==e;){var r=this._comparator(t,e.data);if(0===r)return n._cursor=e,n;n._ancestors.push(e),e=e.get_child(r>0)}return null}}return t.prototype.clear=function(){this._root=null,this.size=0},t.prototype.find=function(t){for(var e=this._root;null!==e;){var n=this._comparator(t,e.data);if(0===n)return e.data;e=e.get_child(n>0)}return null},t.prototype.lowerBound=function(t){return this._bound(t,this._comparator)},t.prototype.upperBound=function(t){var e=this._comparator;return this._bound(t,(function(t,n){return e(n,t)}))},t.prototype.min=function(){var t=this._root;if(null===t)return null;for(;null!==t.left;)t=t.left;return t.data},t.prototype.max=function(){var t=this._root;if(null===t)return null;for(;null!==t.right;)t=t.right;return t.data},t.prototype.iterator=function(){return new a(this)},t.prototype.each=function(t){for(var e,n=this.iterator();null!==(e=n.next());)t(e)},t.prototype.reach=function(t){for(var e,n=this.iterator();null!==(e=n.prev());)t(e)},t.prototype._bound=function(t,e){for(var n=this._root,r=this.iterator();null!==n;){var i=this._comparator(t,n.data);if(0===i)return r._cursor=n,r;r._ancestors.push(n),n=n.get_child(i>0)}for(var o=r._ancestors.length-1;o>=0;--o)if(e(t,(n=r._ancestors[o]).data)>0)return r._cursor=n,r._ancestors.length=o,r;return r._ancestors.length=0,r},t}();e.TreeBase=o;var a=function(){function t(t){this._tree=t,this._ancestors=[],this._cursor=null}return t.prototype.data=function(){return null!==this._cursor?this._cursor.data:null},t.prototype.next=function(){if(null===this._cursor){var t=this._tree._root;null!==t&&this._minNode(t)}else{var e;if(null===this._cursor.right)do{if(e=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.right===e);else this._ancestors.push(this._cursor),this._minNode(this._cursor.right)}return null!==this._cursor?this._cursor.data:null},t.prototype.prev=function(){if(null===this._cursor){var t=this._tree._root;null!==t&&this._maxNode(t)}else{var e;if(null===this._cursor.left)do{if(e=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.left===e);else this._ancestors.push(this._cursor),this._maxNode(this._cursor.left)}return null!==this._cursor?this._cursor.data:null},t.prototype._minNode=function(t){for(;null!==t.left;)this._ancestors.push(t),t=t.left;this._cursor=t},t.prototype._maxNode=function(t){for(;null!==t.right;)this._ancestors.push(t),t=t.right;this._cursor=t},t}();e.Iterator=a;var s=function(){function t(t){this.data=t,this.left=null,this.right=null,this.red=!0}return t.prototype.get_child=function(t){return t?this.right:this.left},t.prototype.set_child=function(t,e){t?this.right=e:this.left=e},t}(),u=function(t){function e(e){var n=t.call(this)||this;return n._root=null,n._comparator=e,n.size=0,n}return i(e,t),e.prototype.insert=function(t){var n=!1;if(null===this._root)this._root=new s(t),n=!0,this.size++;else{var r=new s(void 0),i=!1,o=!1,a=null,u=r,c=null,l=this._root;for(u.right=this._root;;){if(null===l?(l=new s(t),c.set_child(i,l),n=!0,this.size++):e.is_red(l.left)&&e.is_red(l.right)&&(l.red=!0,l.left.red=!1,l.right.red=!1),e.is_red(l)&&e.is_red(c)){var f=u.right===a;l===c.get_child(o)?u.set_child(f,e.single_rotate(a,!o)):u.set_child(f,e.double_rotate(a,!o))}var h=this._comparator(l.data,t);if(0===h)break;o=i,i=h<0,null!==a&&(u=a),a=c,c=l,l=l.get_child(i)}this._root=r.right}return this._root.red=!1,n},e.prototype.remove=function(t){if(null===this._root)return!1;var n=new s(void 0),r=n;r.right=this._root;for(var i=null,o=null,a=null,u=!0;null!==r.get_child(u);){var c=u;o=i,i=r,r=r.get_child(u);var l=this._comparator(t,r.data);if(u=l>0,0===l&&(a=r),!e.is_red(r)&&!e.is_red(r.get_child(u)))if(e.is_red(r.get_child(!u))){var f=e.single_rotate(r,u);i.set_child(c,f),i=f}else if(!e.is_red(r.get_child(!u))){var h=i.get_child(!c);if(null!==h)if(e.is_red(h.get_child(!c))||e.is_red(h.get_child(c))){var d=o.right===i;e.is_red(h.get_child(c))?o.set_child(d,e.double_rotate(i,c)):e.is_red(h.get_child(!c))&&o.set_child(d,e.single_rotate(i,c));var p=o.get_child(d);p.red=!0,r.red=!0,p.left.red=!1,p.right.red=!1}else i.red=!1,h.red=!0,r.red=!0}}return null!==a&&(a.data=r.data,i.set_child(i.right===r,r.get_child(null===r.left)),this.size--),this._root=n.right,null!==this._root&&(this._root.red=!1),null!==a},e.is_red=function(t){return null!==t&&t.red},e.single_rotate=function(t,e){var n=t.get_child(!e);return t.set_child(!e,n.get_child(e)),n.set_child(e,t),t.red=!0,n.red=!1,n},e.double_rotate=function(t,n){return t.set_child(!n,e.single_rotate(t.get_child(!n),!n)),e.single_rotate(t,n)},e}(o);e.RBTree=u},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.elem=t,this.subheaps=[]}return t.prototype.toString=function(t){for(var e="",n=!1,r=0;r0}function f(t,e,n){return c(t,e,n)<0}function h(t,e){var n,r,i,o,a=e.length-1;if(f(t,e[1],e[0])&&!l(t,e[a-1],e[0]))return 0;for(n=0,r=a;;){if(r-n==1)return l(t,e[n],e[r])?n:r;if((o=f(t,e[(i=Math.floor((n+r)/2))+1],e[i]))&&!l(t,e[i-1],e[i]))return i;l(t,e[n+1],e[n])?o||l(t,e[n],e[i])?r=i:n=i:o&&f(t,e[n],e[i])?r=i:n=i}}function d(t,e){var n,r,i,o,a=e.length-1;if(l(t,e[a-1],e[0])&&!f(t,e[1],e[0]))return 0;for(n=0,r=a;;){if(r-n==1)return f(t,e[n],e[r])?n:r;if(o=f(t,e[(i=Math.floor((n+r)/2))+1],e[i]),l(t,e[i-1],e[i])&&!o)return i;f(t,e[n+1],e[n])?o?f(t,e[n],e[i])?r=i:n=i:r=i:o?n=i:l(t,e[n],e[i])?r=i:n=i}}function p(t,e,n,r,i,o){var a,s;s=r(t[a=n(e[0],t)],e);for(var u=!1;!u;){for(u=!0;a===t.length-1&&(a=0),!i(e[s],t[a],t[a+1]);)++a;for(;0===s&&(s=e.length-1),!o(t[a],e[s],e[s-1]);)--s,u=!1}return{t1:a,t2:s}}function g(t,e){return p(t,e,h,d,l,f)}e.PolyPoint=u,e.isLeft=c,e.ConvexHull=function(t){var e,n=t.slice(0).sort((function(t,e){return t.x!==e.x?e.x-t.x:e.y-t.y})),r=t.length,i=n[0].x;for(e=1;e=0&&n[e].x===l;e--);for(s=e+1,e=o;++e<=s;)if(!(c(n[0],n[s],n[e])>=0&&e1&&!(c(a[a.length-2],a[a.length-1],n[e])>0);)a.length-=1;0!=e&&a.push(n[e])}u!=s&&a.push(n[u]);var f=a.length;for(e=s;--e>=o;)if(!(c(n[u],n[o],n[e])>=0&&e>o)){for(;a.length>f&&!(c(a[a.length-2],a[a.length-1],n[e])>0);)a.length-=1;0!=e&&a.push(n[e])}}return a},e.clockwiseRadialSweep=function(t,e,n){e.slice(0).sort((function(e,n){return Math.atan2(e.y-t.y,e.x-t.x)-Math.atan2(n.y-t.y,n.x-t.x)})).forEach(n)},e.tangent_PolyPolyC=p,e.LRtangent_PolyPolyC=function(t,e){var n=g(e,t);return{t1:n.t2,t2:n.t1}},e.RLtangent_PolyPolyC=g,e.LLtangent_PolyPolyC=function(t,e){return p(t,e,d,d,f,f)},e.RRtangent_PolyPolyC=function(t,e){return p(t,e,h,h,l,l)};var v=function(t,e){this.t1=t,this.t2=e};e.BiTangent=v;var b=function(){};e.BiTangents=b;var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(a);e.TVGPoint=y;var w=function(t,e,n,r){this.id=t,this.polyid=e,this.polyvertid=n,this.p=r,r.vv=this};e.VisibilityVertex=w;var m=function(){function t(t,e){this.source=t,this.target=e}return t.prototype.length=function(){var t=this.source.p.x-this.target.p.x,e=this.source.p.y-this.target.p.y;return Math.sqrt(t*t+e*e)},t}();e.VisibilityEdge=m;var x=function(){function t(t,e){if(this.P=t,this.V=[],this.E=[],e)this.V=e.V.slice(0),this.E=e.E.slice(0);else{for(var n=t.length,r=0;r0&&this.E.push(new m(i[o-1].vv,s))}i.length>1&&this.E.push(new m(i[0].vv,i[i.length-1].vv))}for(r=0;r0)return!0;return!1},t}();function _(t,e){for(var n=[],r=1,i=e.length;r=0&&g>=0&&y<0&&w>=0&&m>=0&&x<0?i.ll=new v(o,a):p<=0&&g<=0&&y>0&&w<=0&&m<=0&&x>0?i.rr=new v(o,a):p<=0&&g>0&&y<=0&&w>=0&&m<0&&x>=0?i.rl=new v(o,a):p>=0&&g<0&&y>=0&&w<=0&&m>0&&x<=0&&(i.lr=new v(o,a))}return i}function k(t,e){return!t.every((function(t){return!function(t,e){for(var n=1,r=e.length;n0)return!0}return!1}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=10,i=(1+Math.sqrt(5))/2,o=1e-4;e.applyPacking=function(t,e,n,a,s,u){void 0===s&&(s=1),void 0===u&&(u=!0);var c=e,l=n,f=(s=void 0!==s?s:1,a=void 0!==a?a:0,0),h=0,d=0,p=0,g=[];function v(t,e){g=[],f=0,h=0,p=0;for(var n=0;n=t.height&&g[i].x+g[i].width+t.width+r-e<=o){n=g[i];break}g.push(t),void 0!==n?(t.x=n.x+n.width+r,t.y=n.bottom,t.space_left=t.height,t.bottom=t.y,n.space_left-=t.height+r,n.bottom+=t.height+r):(t.y=p,p+=t.height+r,t.x=0,t.bottom=t.y,t.space_left=t.height),t.y+t.height-h>-o&&(h=t.y+t.height-0),t.x+t.width-f>-o&&(f=t.x+t.width-0)}0!=t.length&&(function(t){t.forEach((function(t){var e,n,r,i,o;e=t,n=Number.MAX_VALUE,r=Number.MAX_VALUE,i=0,o=0,e.array.forEach((function(t){var e=void 0!==t.width?t.width:a,s=void 0!==t.height?t.height:a;e/=2,s/=2,i=Math.max(t.x+e,i),n=Math.min(t.x-e,n),o=Math.max(t.y+s,o),r=Math.min(t.y-s,r)})),e.width=i-n,e.height=o-r}))}(t),function(t,e){var n=Number.POSITIVE_INFINITY,a=0;t.sort((function(t,e){return e.height-t.height})),d=t.reduce((function(t,e){return t.widthd||g>o;){if(1!=h){var b=u-(u-s)/i;l=v(t,b)}if(0!=h){var y=s+(u-s)/i;f=v(t,y)}if(p=Math.abs(b-y),g=Math.abs(l-f),lf?(s=b,b=y,l=f,h=1):(u=y,y=b,f=l,h=0),c++>100)break}v(t,a)}(t),u&&function(t){t.forEach((function(t){var e={x:0,y:0};t.array.forEach((function(t){e.x+=t.x,e.y+=t.y})),e.x/=t.array.length,e.y/=t.array.length;var n=e.x-t.width/2,r=e.y-t.height/2,i=t.x-n+c/2-f/2,o=t.y-r+l/2-h/2;t.array.forEach((function(t){t.x+=i,t.y+=o}))}))}(t))},e.separateGraphs=function(t,e){for(var n={},r={},i=[],o=0,a=0;a=o.length?(this.length=r.length,this.si=r.si,this.ti=r.ti,this.reversed=!1):(this.length=o.length,this.si=o.si,this.ti=n.length-o.ti-o.length,this.reversed=!0)}return t.findMatch=function(t,e){for(var n=t.length,r=e.length,i={length:0,si:-1,ti:-1},o=new Array(n),a=0;ai.length&&(i.length=u,i.si=a-u+1,i.ti=s-u+1)}else o[a][s]=0}return i},t.prototype.getSequence=function(){return this.length>=0?this.s.slice(this.si,this.si+this.length):[]},t}();e.LongestCommonSubsequence=u;var c=function(){function t(t,e,n){var i=this;void 0===n&&(n=12),this.originalnodes=t,this.groupPadding=n,this.leaves=null,this.nodes=t.map((function(t,n){return new a(n,e.getBounds(t),e.getChildren(t))})),this.leaves=this.nodes.filter((function(t){return t.leaf})),this.groups=this.nodes.filter((function(t){return!t.leaf})),this.cols=this.getGridLines("x"),this.rows=this.getGridLines("y"),this.groups.forEach((function(t){return t.children.forEach((function(e){return i.nodes[e].parent=t}))})),this.root={children:[]},this.nodes.forEach((function(t){void 0===t.parent&&(t.parent=i.root,i.root.children.push(t.id)),t.ports=[]})),this.backToFront=this.nodes.slice(0),this.backToFront.sort((function(t,e){return i.getDepth(t)-i.getDepth(e)})),this.backToFront.slice(0).reverse().filter((function(t){return!t.leaf})).forEach((function(t){var e=r.Rectangle.empty();t.children.forEach((function(t){return e=e.union(i.nodes[t].rect)})),t.rect=e.inflate(i.groupPadding)}));var o=this.midPoints(this.cols.map((function(t){return t.pos}))),u=this.midPoints(this.rows.map((function(t){return t.pos}))),c=o[0],l=o[o.length-1],f=u[0],h=u[u.length-1],d=this.rows.map((function(t){return{x1:c,x2:l,y1:t.pos,y2:t.pos}})).concat(u.map((function(t){return{x1:c,x2:l,y1:t,y2:t}}))),p=this.cols.map((function(t){return{x1:t.pos,x2:t.pos,y1:f,y2:h}})).concat(o.map((function(t){return{x1:t,x2:t,y1:f,y2:h}}))),g=d.concat(p);g.forEach((function(t){return t.verts=[]})),this.verts=[],this.edges=[],d.forEach((function(t){return p.forEach((function(e){var n=new s(i.verts.length,e.x1,t.y1);t.verts.push(n),e.verts.push(n),i.verts.push(n);for(var r=i.backToFront.length;r-- >0;){var o=i.backToFront[r],a=o.rect,u=Math.abs(n.x-a.cx()),c=Math.abs(n.y-a.cy());if(u0;){var r=n.filter((function(e){return e.rect["overlap"+t.toUpperCase()](n[0].rect)})),i={nodes:r,pos:this.avg(r.map((function(e){return e.rect["c"+t]()})))};e.push(i),i.nodes.forEach((function(t){return n.splice(n.indexOf(t),1)}))}return e.sort((function(t,e){return t.pos-e.pos})),e},t.prototype.getDepth=function(t){for(var e=0;t.parent!==this.root;)e++,t=t.parent;return e},t.prototype.midPoints=function(t){for(var e=t[1]-t[0],n=[t[0]-e/2],r=1;r.1)&&(c={pos:f[0][e],segments:[]},u.push(c)),c.segments.push(f)}return u},t.nudgeSegs=function(t,e,n,r,o,a){var s=r.length;if(!(s<=1)){for(var u=r.map((function(e){return new i.Variable(e[0][t])})),c=[],l=0;l=0&&c.push(new i.Constraint(u[v],u[b],a))}new i.Solver(u,c).solve(),u.forEach((function(e,i){var o=r[i],a=e.position();o[0][t]=o[1][t]=a;var s=n[o.edgeid];o.i>0&&(s[o.i-1][1][t]=a),o.iMath.PI||i<-Math.PI)&&(i=r-n),i},t.isLeft=function(t,e,n){return(e.x-t.x)*(n.y-t.y)-(e.y-t.y)*(n.x-t.x)<=0},t.getOrder=function(t){for(var e={},n=0;n=c.length||f.ti+f.length>=l.length)?n.push({l:r,r:i}):(f.si+f.length>=c.length||f.ti+f.length>=l.length?(o=c[f.si+1],s=c[f.si-1],a=l[f.ti-1]):(o=c[f.si+f.length-2],a=c[f.si+f.length],s=l[f.ti+f.length]),t.isLeft(o,a,s)?n.push({l:i,r:r}):n.push({l:r,r:i})))}return t.getOrder(n)},t.makeSegments=function(t){function e(t){return{x:t.x,y:t.y}}for(var n=function(t,e,n){return Math.abs((e.x-t.x)*(n.y-t.y)-(e.y-t.y)*(n.x-t.x))<.001},r=[],i=e(t[0]),o=1;o1&&l>1?1e3:0})).reverse().map((function(t){return n.verts[t]}));return l.push(this.nodes[i.id].ports[0]),l.filter((function(t,e){return!(e0&&t.node===i&&l[e-1].node===i)}))},t.getRoutePath=function(e,n,r,i){var o={routepath:"M "+e[0][0].x+" "+e[0][0].y+" ",arrowpath:""};if(e.length>1)for(var a=0;a0?s-=c/Math.abs(c)*n:u-=l/Math.abs(l)*n,o.routepath+="L "+s+" "+u+" ";var f=e[a+1],h=f[0].x,d=f[0].y;c=f[1].x-h,l=f[1].y-d;var p,g,v=t.angleBetween2Lines(m,f)<0?1:0;Math.abs(c)>0?(p=h+c/Math.abs(c)*n,g=d):(p=h,g=d+l/Math.abs(l)*n);var b=Math.abs(p-s),y=Math.abs(g-u);o.routepath+="A "+b+" "+y+" 0 0 "+v+" "+p+" "+g+" "}else{var w=[s,u];Math.abs(c)>0?(x=[s-=c/Math.abs(c)*i,u+r],_=[s,u-r]):(x=[s+r,u-=l/Math.abs(l)*i],_=[s-r,u]),o.routepath+="L "+s+" "+u+" ",i>0&&(o.arrowpath="M "+w[0]+" "+w[1]+" L "+x[0]+" "+x[1]+" L "+_[0]+" "+_[1])}}else{var m,x,_;s=(m=e[0])[1].x,u=m[1].y,c=s-m[0].x,l=u-m[0].y,w=[s,u];Math.abs(c)>0?(x=[s-=c/Math.abs(c)*i,u+r],_=[s,u-r]):(x=[s+r,u-=l/Math.abs(l)*i],_=[s-r,u]),o.routepath+="L "+s+" "+u+" ",i>0&&(o.arrowpath="M "+w[0]+" "+w[1]+" L "+x[0]+" "+x[1]+" L "+_[0]+" "+_[1])}return o},t}();e.GridRouter=c},function(t,e,n){var r=n(30),i=n(53),o=n(35),a=n(188),s=n(194),u=n(84),c=n(85),l=n(197),f=n(198),h=n(89),d=n(199),p=n(18),g=n(203),v=n(204),b=n(94),y=n(1),w=n(16),m=n(208),x=n(4),_=n(210),E=n(10),k={};k["[object Arguments]"]=k["[object Array]"]=k["[object ArrayBuffer]"]=k["[object DataView]"]=k["[object Boolean]"]=k["[object Date]"]=k["[object Float32Array]"]=k["[object Float64Array]"]=k["[object Int8Array]"]=k["[object Int16Array]"]=k["[object Int32Array]"]=k["[object Map]"]=k["[object Number]"]=k["[object Object]"]=k["[object RegExp]"]=k["[object Set]"]=k["[object String]"]=k["[object Symbol]"]=k["[object Uint8Array]"]=k["[object Uint8ClampedArray]"]=k["[object Uint16Array]"]=k["[object Uint32Array]"]=!0,k["[object Error]"]=k["[object Function]"]=k["[object WeakMap]"]=!1,t.exports=function t(e,n,S,C,T,A){var N,O=1&n,L=2&n,P=4&n;if(S&&(N=T?S(e,C,T,A):S(e)),void 0!==N)return N;if(!x(e))return e;var I=y(e);if(I){if(N=g(e),!O)return c(e,N)}else{var j=p(e),M="[object Function]"==j||"[object GeneratorFunction]"==j;if(w(e))return u(e,O);if("[object Object]"==j||"[object Arguments]"==j||M&&!T){if(N=L||M?{}:b(e),!O)return L?f(e,s(N,e)):l(e,a(N,e))}else{if(!k[j])return T?e:{};N=v(e,j,O)}}A||(A=new r);var D=A.get(e);if(D)return D;A.set(e,N),_(e)?e.forEach((function(r){N.add(t(r,n,S,r,e,A))})):m(e)&&e.forEach((function(r,i){N.set(i,t(r,n,S,i,e,A))}));var R=P?L?d:h:L?keysIn:E,B=I?void 0:R(e);return i(B||e,(function(r,i){B&&(r=e[i=r]),o(N,i,t(r,n,S,i,e,A))})),N}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(20))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(11),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(189),i=n(25),o=n(1),a=n(16),s=n(37),u=n(26),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),l=!n&&i(t),f=!n&&!l&&a(t),h=!n&&!l&&!f&&u(t),d=n||l||f||h,p=d?r(t.length,String):[],g=p.length;for(var v in t)!e&&!c.call(t,v)||d&&("length"==v||f&&("offset"==v||"parent"==v)||h&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||s(v,g))||p.push(v);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(6),i=e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(28)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var h=u.get(t);if(h&&u.get(e))return h==e;var d=-1,p=!0,g=2&n?new r:void 0;for(u.set(t,e),u.set(e,t);++d0&&(o=u.removeMin(),(a=s[o]).distance!==Number.POSITIVE_INFINITY);)r(o).forEach(c);return s}(t,String(e),n||o,r||function(e){return t.outEdges(e)})};var o=r.constant(1)},function(t,e,n){var r=n(3);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,o=i.length;return n[t]=o,i.push({key:t,priority:e}),this._decrease(o),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority0&&(this.props.setProps({generateImage:{}}),this._cy&&this.handleImageGeneration(x.type,x.options,x.action,x.filename)),this.cyResponsiveClass&&this.cyResponsiveClass.toggle(_),o.default.createElement(s.default,{id:e,cy:this.handleCy,className:r,style:n,elements:s.default.normalizeElements(i),stylesheet:a,layout:u,pan:c,zoom:l,panningEnabled:f,userPanningEnabled:h,minZoom:d,maxZoom:p,zoomingEnabled:g,userZoomingEnabled:v,boxSelectionEnabled:b,autoungrabify:y,autolock:w,autounselectify:m})}}]),e}(i.Component);f.propTypes={id:a.default.string,className:a.default.string,style:a.default.object,setProps:a.default.func,elements:a.default.oneOfType([a.default.arrayOf(a.default.shape({group:a.default.string,data:a.default.shape({id:a.default.string,label:a.default.string,parent:a.default.string,source:a.default.string,target:a.default.string}),position:a.default.shape({x:a.default.number,y:a.default.number}),selected:a.default.bool,selectable:a.default.bool,locked:a.default.bool,grabbable:a.default.bool,classes:a.default.string})),a.default.exact({nodes:a.default.array,edges:a.default.array})]),stylesheet:a.default.arrayOf(a.default.exact({selector:a.default.string.isRequired,style:a.default.object.isRequired})),layout:a.default.shape({name:a.default.oneOf(["random","preset","circle","concentric","grid","breadthfirst","cose","close-bilkent","cola","euler","spread","dagre","klay"]).isRequired,fit:a.default.bool,padding:a.default.number,animate:a.default.bool,animationDuration:a.default.number,boundingBox:a.default.object}),pan:a.default.exact({x:a.default.number,y:a.default.number}),zoom:a.default.number,panningEnabled:a.default.bool,userPanningEnabled:a.default.bool,minZoom:a.default.number,maxZoom:a.default.number,zoomingEnabled:a.default.bool,userZoomingEnabled:a.default.bool,boxSelectionEnabled:a.default.bool,autoungrabify:a.default.bool,autolock:a.default.bool,autounselectify:a.default.bool,autoRefreshLayout:a.default.bool,tapNode:a.default.exact({edgesData:a.default.object,renderedPosition:a.default.object,timeStamp:a.default.number,classes:a.default.string,data:a.default.object,grabbable:a.default.bool,group:a.default.string,locked:a.default.bool,position:a.default.object,selectable:a.default.bool,selected:a.default.bool,style:a.default.object,ancestorsData:a.default.object,childrenData:a.default.object,descendantsData:a.default.object,parentData:a.default.object,siblingsData:a.default.object,isParent:a.default.bool,isChildless:a.default.bool,isChild:a.default.bool,isOrphan:a.default.bool,relativePosition:a.default.object}),tapNodeData:a.default.object,tapEdge:a.default.exact({isLoop:a.default.bool,isSimple:a.default.bool,midpoint:a.default.object,sourceData:a.default.object,sourceEndpoint:a.default.object,targetData:a.default.object,targetEndpoint:a.default.object,timeStamp:a.default.number,classes:a.default.string,data:a.default.object,grabbable:a.default.bool,group:a.default.string,locked:a.default.bool,selectable:a.default.bool,selected:a.default.bool,style:a.default.object}),tapEdgeData:a.default.object,mouseoverNodeData:a.default.object,mouseoverEdgeData:a.default.object,selectedNodeData:a.default.array,selectedEdgeData:a.default.array,generateImage:a.default.exact({type:a.default.oneOf(["svg","png","jpg","jpeg"]).isRequired,options:a.default.object,action:a.default.oneOf(["store","download","both"]),filename:a.default.string}),imageData:a.default.string,responsive:a.default.bool},f.defaultProps={style:{width:"600px",height:"600px"},layout:{name:"grid"},pan:{x:0,y:0},zoom:1,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:!0,userZoomingEnabled:!0,panningEnabled:!0,userPanningEnabled:!0,boxSelectionEnabled:!1,autolock:!1,autoungrabify:!1,autounselectify:!1,autoRefreshLayout:!0,generateImage:{},imageData:null,responsive:!1,elements:[]},e.default=f},function(t,e,n){"use strict";var r=n(134);function i(){}function o(){}o.resetWarningCache=i,t.exports=function(){function t(t,e,n,i,o,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function e(){return t}t.isRequired=t;var n={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:o,resetWarningCache:i};return n.PropTypes=n,n}},function(t,e,n){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,e,n){window,t.exports=function(t,e,n,r){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r({}),o=function(t,e){return null==t||null==e};e.hashDiff=function(t,e){return o(t,e)||t.hash()!==e.hash()},e.shallowObjDiff=function(t,e){if(o(t,e)&&(null!=t||null!=e))return!0;if(t===e)return!1;if((void 0===t?"undefined":r(t))!==i||(void 0===e?"undefined":r(e))!==i)return t!==e;var n=Object.keys(t),a=Object.keys(e),s=function(n){return t[n]!==e[n]};return n.length!==a.length||!(!n.some(s)&&!a.some(s))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.get=function(t,e){return null!=t?t[e]:null},e.toJson=function(t){return t},e.forEach=function(t,e){return t.forEach(e)}},function(t,e,n){"use strict";t.exports=n(3).default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0&&t.remove(u),s.length>0&&t.add(s),c.forEach((function(e){var n=e.ele1,o=e.ele2;return l(t,n,o,r,i,a)}))},l=function(t,e,n,r,i,o){var a=i(i(n,"data"),"id"),s=t.getElementById(a),u={};["data","position","selected","selectable","locked","grabbable","classes"].forEach((function(t){var a=i(n,t);o(a,i(e,t))&&(u[t]=r(a))}));var c=i(n,"scratch");o(c,i(e,"scratch"))&&s.scratch(r(c)),Object.keys(u).length>0&&s.json(u)}}])}(n(68),n(136),n(69),n(70))},function(t,e){t.exports=window.ReactDOM},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i,o,a,s,u=1,c={},l=!1,f=t.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(t);h=h&&h.setTimeout?h:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},r=function(t){o.port2.postMessage(t)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(t){var e=f.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):r=function(t){setTimeout(p,0,t)}:(a="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(a)&&p(+e.data.slice(a.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),r=function(e){t.postMessage(a+e,"*")}),h.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n=e||n<0||v&&t-c>=o}function x(){var t=d();if(m(t))return _(t);s=setTimeout(x,function(t){var n=e-(t-u);return v?h(n,o-(t-c)):n}(t))}function _(t){return s=void 0,b&&r?y(t):(r=i=void 0,a)}function E(){var t=d(),n=m(t);if(r=arguments,i=this,u=t,n){if(void 0===s)return w(u);if(v)return s=setTimeout(x,e),y(u)}return void 0===s&&(s=setTimeout(x,e)),a}return e=g(e)||0,p(n)&&(l=!!n.leading,o=(v="maxWait"in n)?f(g(n.maxWait)||0,e):o,b="trailing"in n?!!n.trailing:b),E.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=u=i=s=void 0},E.flush=function(){return void 0===s?a:_(d())},E}}).call(this,n(20))},function(t,e,n){t.exports=n(141)},function(t,e,n){var r,i,o;(function(){var n,a,s,u,c,l,f,h,d,p,g,v,b,y,w;s=Math.floor,p=Math.min,a=function(t,e){return te?1:0},d=function(t,e,n,r,i){var o;if(null==n&&(n=0),null==i&&(i=a),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=t.length);nn;0<=n?e++:e--)c.push(e);return c}.apply(this).reverse()).length;rg;0<=g?++l:--l)v.push(c(t,n));return v},y=function(t,e,n,r){var i,o,s;for(null==r&&(r=a),i=t[n];n>e&&r(i,o=t[s=n-1>>1])<0;)t[n]=o,n=s;return t[n]=i},w=function(t,e,n){var r,i,o,s,u;for(null==n&&(n=a),i=t.length,u=e,o=t[e],r=2*e+1;r1e-4&&Math.abs(s.v)>1e-4;);return o?function(t){return c[t*(c.length-1)|0]}:l}}(),uo=function(t,e,n,r){var i=function(t,e,n,r){var i=4,o=.001,a=1e-7,s=10,u=11,c=1/(u-1),l="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var f=0;f<4;++f)if("number"!=typeof arguments[f]||isNaN(arguments[f])||!isFinite(arguments[f]))return!1;t=Math.min(t,1),n=Math.min(n,1),t=Math.max(t,0),n=Math.max(n,0);var h=l?new Float32Array(u):new Array(u);function d(t,e){return 1-3*e+3*t}function p(t,e){return 3*e-6*t}function g(t){return 3*t}function v(t,e,n){return((d(e,n)*t+p(e,n))*t+g(e))*t}function b(t,e,n){return 3*d(e,n)*t*t+2*p(e,n)*t+g(e)}function y(e,r){for(var o=0;o0?i=u:r=u}while(Math.abs(o)>a&&++c=o?y(e,s):0===l?s:m(e,r,r+c)}var _=!1;function E(){_=!0,t===e&&n===r||w()}var k=function(i){return _||E(),t===e&&n===r?i:0===i?0:1===i?1:v(x(i),e,r)};k.getControlPoints=function(){return[{x:t,y:e},{x:n,y:r}]};var S="generateBezier("+[t,e,n,r]+")";return k.toString=function(){return S},k}(t,e,n,r);return function(t,e,n){return t+(e-t)*i(n)}},co={linear:function(t,e,n){return t+(e-t)*n},ease:uo(.25,.1,.25,1),"ease-in":uo(.42,0,1,1),"ease-out":uo(0,0,.58,1),"ease-in-out":uo(.42,0,.58,1),"ease-in-sine":uo(.47,0,.745,.715),"ease-out-sine":uo(.39,.575,.565,1),"ease-in-out-sine":uo(.445,.05,.55,.95),"ease-in-quad":uo(.55,.085,.68,.53),"ease-out-quad":uo(.25,.46,.45,.94),"ease-in-out-quad":uo(.455,.03,.515,.955),"ease-in-cubic":uo(.55,.055,.675,.19),"ease-out-cubic":uo(.215,.61,.355,1),"ease-in-out-cubic":uo(.645,.045,.355,1),"ease-in-quart":uo(.895,.03,.685,.22),"ease-out-quart":uo(.165,.84,.44,1),"ease-in-out-quart":uo(.77,0,.175,1),"ease-in-quint":uo(.755,.05,.855,.06),"ease-out-quint":uo(.23,1,.32,1),"ease-in-out-quint":uo(.86,0,.07,1),"ease-in-expo":uo(.95,.05,.795,.035),"ease-out-expo":uo(.19,1,.22,1),"ease-in-out-expo":uo(1,0,0,1),"ease-in-circ":uo(.6,.04,.98,.335),"ease-out-circ":uo(.075,.82,.165,1),"ease-in-out-circ":uo(.785,.135,.15,.86),spring:function(t,e,n){if(0===n)return co.linear;var r=so(t,e,n);return function(t,e,n){return t+(e-t)*r(n)}},"cubic-bezier":uo};function lo(t,e,n,r,i){if(1===r)return n;if(e===n)return n;var o=i(e,n,r);return null==t||((t.roundValue||t.color)&&(o=Math.round(o)),void 0!==t.min&&(o=Math.max(o,t.min)),void 0!==t.max&&(o=Math.min(o,t.max))),o}function fo(t,e){return null!=t.pfValue||null!=t.value?null==t.pfValue||null!=e&&"%"===e.type.units?t.value:t.pfValue:t}function ho(t,e,n,r,i){var o=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var a=fo(t,i),s=fo(e,i);if(E(a)&&E(s))return lo(o,a,s,n,r);if(x(a)&&x(s)){for(var u=[],c=0;c0?("spring"===f&&h.push(a.duration),a.easingImpl=co[f].apply(null,h)):a.easingImpl=co[f]}var d,p=a.easingImpl;if(d=0===a.duration?1:(n-u)/a.duration,a.applying&&(d=a.progress),d<0?d=0:d>1&&(d=1),null==a.delay){var g=a.startPosition,v=a.position;if(v&&i&&!t.locked()){var b={};go(g.x,v.x)&&(b.x=ho(g.x,v.x,d,p)),go(g.y,v.y)&&(b.y=ho(g.y,v.y,d,p)),t.position(b)}var y=a.startPan,m=a.pan,x=o.pan,_=null!=m&&r;_&&(go(y.x,m.x)&&(x.x=ho(y.x,m.x,d,p)),go(y.y,m.y)&&(x.y=ho(y.y,m.y,d,p)),t.emit("pan"));var E=a.startZoom,k=a.zoom,S=null!=k&&r;S&&(go(E,k)&&(o.zoom=te(o.minZoom,ho(E,k,d,p),o.maxZoom)),t.emit("zoom")),(_||S)&&t.emit("viewport");var C=a.style;if(C&&C.length>0&&i){for(var T=0;T=0;e--){(0,t[e])()}t.splice(0,t.length)},l=o.length-1;l>=0;l--){var f=o[l],h=f._private;h.stopped?(o.splice(l,1),h.hooked=!1,h.playing=!1,h.started=!1,c(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||vo(0,f,t),po(e,f,t,n),h.applying&&(h.applying=!1),c(h.frames),null!=h.step&&h.step(t),f.completed()&&(o.splice(l,1),h.hooked=!1,h.playing=!1,h.started=!1,c(h.completes)),s=!0)}return n||0!==o.length||0!==a.length||r.push(e),s}for(var o=!1,a=0;a0?e.notify("draw",n):e.notify("draw")),n.unmerge(r),e.emit("step")}var yo={animate:Vn.animate(),animation:Vn.animation(),animated:Vn.animated(),clearQueue:Vn.clearQueue(),delay:Vn.delay(),delayAnimation:Vn.delayAnimation(),stop:Vn.stop(),addToAnimationPool:function(t){this.styleEnabled()&&this._private.aniEles.merge(t)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var t=this;if(t._private.animationsRunning=!0,t.styleEnabled()){var e=t.renderer();e&&e.beforeRender?e.beforeRender((function(e,n){bo(n,t)}),e.beforeRenderPriorities.animations):function e(){t._private.animationsRunning&&X((function(n){bo(n,t),e()}))}()}}},wo={qualifierCompare:function(t,e){return null==t||null==e?null==t&&null==e:t.sameText(e)},eventMatches:function(t,e,n){var r=e.qualifier;return null==r||t!==n.target&&C(n.target)&&r.matches(n.target)},addEventFields:function(t,e){e.cy=t,e.target=t},callbackContext:function(t,e,n){return null!=e.qualifier?n.target:t}},mo=function(t){return w(t)?new Tr(t):t},xo={createEmitter:function(){var t=this._private;return t.emitter||(t.emitter=new _i(wo,this)),this},emitter:function(){return this._private.emitter},on:function(t,e,n){return this.emitter().on(t,mo(e),n),this},removeListener:function(t,e,n){return this.emitter().removeListener(t,mo(e),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(t,e,n){return this.emitter().one(t,mo(e),n),this},once:function(t,e,n){return this.emitter().one(t,mo(e),n),this},emit:function(t,e){return this.emitter().emit(t,e),this},emitAndNotify:function(t,e){return this.emit(t),this.notify(t,e),this}};Vn.eventAliasesOn(xo);var _o={png:function(t){return t=t||{},this._private.renderer.png(t)},jpg:function(t){var e=this._private.renderer;return(t=t||{}).bg=t.bg||"#fff",e.jpg(t)}};_o.jpeg=_o.jpg;var Eo={layout:function(t){if(null!=t)if(null!=t.name){var e=t.name,n=this.extension("layout",e);if(null!=n){var r;r=w(t.eles)?this.$(t.eles):null!=t.eles?t.eles:this.$();var i=new n(G({},t,{cy:this,eles:r}));return i}ht("No such layout `"+e+"` found. Did you forget to import it and `cytoscape.use()` it?")}else ht("A `name` must be specified to make a layout");else ht("Layout options must be specified to make a layout")}};Eo.createLayout=Eo.makeLayout=Eo.layout;var ko={notify:function(t,e){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[t]=n.batchNotifications[t]||this.collection();null!=e&&r.merge(e)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(t,e)}},notifications:function(t){var e=this._private;return void 0===t?e.notificationsEnabled:(e.notificationsEnabled=!!t,this)},noNotifications:function(t){this.notifications(!1),t(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var t=this._private;return null==t.batchCount&&(t.batchCount=0),0===t.batchCount&&(t.batchStyleEles=this.collection(),t.batchNotifications={}),t.batchCount++,this},endBatch:function(){var t=this._private;if(0===t.batchCount)return this;if(t.batchCount--,0===t.batchCount){t.batchStyleEles.updateStyle();var e=this.renderer();Object.keys(t.batchNotifications).forEach((function(n){var r=t.batchNotifications[n];r.empty()?e.notify(n):e.notify(n,r)}))}return this},batch:function(t){return this.startBatch(),t(),this.endBatch(),this},batchData:function(t){var e=this;return this.batch((function(){for(var n=Object.keys(t),r=0;r0;)t.removeChild(t.childNodes[0]);this._private.renderer=null,this.mutableElements().forEach((function(t){var e=t._private;e.rscratch={},e.rstyle={},e.animation.current=[],e.animation.queue=[]}))},onRender:function(t){return this.on("render",t)},offRender:function(t){return this.off("render",t)}};Co.invalidateDimensions=Co.resize;var To={collection:function(t,e){return w(t)?this.$(t):S(t)?t.collection():x(t)?new io(this,t,e):new io(this)},nodes:function(t){var e=this.$((function(t){return t.isNode()}));return t?e.filter(t):e},edges:function(t){var e=this.$((function(t){return t.isEdge()}));return t?e.filter(t):e},$:function(t){var e=this._private.elements;return t?e.filter(t):e.spawnSelf()},mutableElements:function(){return this._private.elements}};To.elements=To.filter=To.$;var Ao={};Ao.apply=function(t){var e=this._private,n=e.cy.collection();e.newStyle&&(e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0));for(var r=0;r0;if(f||l&&h){var d=void 0;f&&h||f?d=u.properties:h&&(d=u.mappedProperties);for(var p=0;p1&&(g=1),s.color){var m=i.valueMin[0],x=i.valueMax[0],_=i.valueMin[1],k=i.valueMax[1],S=i.valueMin[2],C=i.valueMax[2],T=null==i.valueMin[3]?1:i.valueMin[3],A=null==i.valueMax[3]?1:i.valueMax[3],N=[Math.round(m+(x-m)*g),Math.round(_+(k-_)*g),Math.round(S+(C-S)*g),Math.round(T+(A-T)*g)];n={bypass:i.bypass,name:i.name,value:N,strValue:"rgb("+N[0]+", "+N[1]+", "+N[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*g;n=this.parse(i.name,O,i.bypass,"mapping")}if(!n)return p(),!1;n.mapping=i,i=n;break;case a.data:for(var L=i.field.split("."),P=f.data,I=0;I0&&o>0){for(var s={},u=!1,c=0;c0?t.delayAnimation(a).play().promise().then(e):e()})).then((function(){return t.animation({style:s,duration:o,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(t,i),t.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),r.transitioning=!1)},Ao.checkTrigger=function(t,e,n,r,i,o){var a=this.properties[e],s=i(a);null!=s&&s(n,r)&&o(a)},Ao.checkZOrderTrigger=function(t,e,n,r){var i=this;this.checkTrigger(t,e,n,r,(function(t){return t.triggersZOrder}),(function(){i._private.cy.notify("zorder",t)}))},Ao.checkBoundsTrigger=function(t,e,n,r){this.checkTrigger(t,e,n,r,(function(t){return t.triggersBounds}),(function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),"bezier"!==t.pstyle("curve-style").value&&("curve-style"!==e||"bezier"!==n&&"bezier"!==r)||!i.triggersBoundsOfParallelBeziers||t.parallelEdges().forEach((function(t){t.isBundledBezier()&&t.dirtyBoundingBoxCache()}))}))},Ao.checkTriggers=function(t,e,n,r){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,n,r),this.checkBoundsTrigger(t,e,n,r)};var No={applyBypass:function(t,e,n,r){var i=[];if("*"===e||"**"===e){if(void 0!==n)for(var o=0;oe.length?i.substr(e.length):""}function a(){n=n.length>r.length?n.substr(r.length):""}for(i=i.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(i.match(/^\s*$/))break;var s=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!s){pt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}e=s[0];var u=s[1];if("core"!==u)if(new Tr(u).invalid){pt("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=s[2],l=!1;n=c;for(var f=[];;){if(n.match(/^\s*$/))break;var h=n.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);if(!h){pt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),l=!0;break}r=h[0];var d=h[1],p=h[2];if(this.properties[d])this.parse(d,p)?(f.push({name:d,val:p}),a()):(pt("Skipping property: Invalid property definition in: "+r),a());else pt("Skipping property: Invalid property name in: "+r),a()}if(l){o();break}this.selector(u);for(var g=0;g=7&&"d"===e[0]&&(u=new RegExp(a.data.regex).exec(e))){if(n)return!1;var f=a.data;return{name:t,value:u,strValue:""+e,mapped:f,field:u[1],bypass:n}}if(e.length>=10&&"m"===e[0]&&(c=new RegExp(a.mapData.regex).exec(e))){if(n)return!1;if(l.multiple)return!1;var h=a.mapData;if(!l.color&&!l.number)return!1;var d=this.parse(t,c[4]);if(!d||d.mapped)return!1;var p=this.parse(t,c[5]);if(!p||p.mapped)return!1;if(d.pfValue===p.pfValue||d.strValue===p.strValue)return pt("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+d.strValue+"`"),this.parse(t,d.strValue);if(l.color){var g=d.value,v=p.value;if(!(g[0]!==v[0]||g[1]!==v[1]||g[2]!==v[2]||g[3]!==v[3]&&(null!=g[3]&&1!==g[3]||null!=v[3]&&1!==v[3])))return!1}return{name:t,value:c,strValue:""+e,mapped:h,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:d.value,valueMax:p.value,bypass:n}}}if(l.multiple&&"multiple"!==r){var b;if(b=s?e.split(/\s+/):x(e)?e:[e],l.evenMultiple&&b.length%2!=0)return null;for(var y=[],_=[],k=[],S="",C=!1,T=0;T0?" ":"")+A.strValue}return l.validate&&!l.validate(y,_)?null:l.singleEnum&&C?1===y.length&&w(y[0])?{name:t,value:y[0],strValue:y[0],bypass:n}:null:{name:t,value:y,pfValue:k,strValue:S,bypass:n,units:_}}var N,O,L=function(){for(var r=0;rl.max||l.strictMax&&e===l.max))return null;var B={name:t,value:e,strValue:""+e+(P||""),units:P,bypass:n};return l.unitless||"px"!==P&&"em"!==P?B.pfValue=e:B.pfValue="px"!==P&&P?this.getEmSizeInPixels()*e:e,"ms"!==P&&"s"!==P||(B.pfValue="ms"===P?e:1e3*e),"deg"!==P&&"rad"!==P||(B.pfValue="rad"===P?e:(N=e,Math.PI*N/180)),"%"===P&&(B.pfValue=e/100),B}if(l.propList){var G=[],F=""+e;if("none"===F);else{for(var z=F.split(/\s*,\s*|\s+/),Y=0;Y0&&u>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((s-2*e)/n.w,(u-2*e)/n.h))>this._private.maxZoom?this._private.maxZoom:a)=n.minZoom&&(n.maxZoom=e),this},minZoom:function(t){return void 0===t?this._private.minZoom:this.zoomRange({min:t})},maxZoom:function(t){return void 0===t?this._private.maxZoom:this.zoomRange({max:t})},getZoomedViewport:function(t){var e,n,r=this._private,i=r.pan,o=r.zoom,a=!1;if(r.zoomingEnabled||(a=!0),E(t)?n=t:_(t)&&(n=t.level,null!=t.position?e=Yt(t.position,o,i):null!=t.renderedPosition&&(e=t.renderedPosition),null==e||r.panningEnabled||(a=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)e.maxZoom||!e.zoomingEnabled?o=!0:(e.zoom=s,i.push("zoom"))}if(r&&(!o||!t.cancelOnFailedZoom)&&e.panningEnabled){var u=t.pan;E(u.x)&&(e.pan.x=u.x,a=!1),E(u.y)&&(e.pan.y=u.y,a=!1),a||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(t){var e=this.getCenterPan(t);return e&&(this._private.pan=e,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(t,e){if(this._private.panningEnabled){if(w(t)){var n=t;t=this.mutableElements().filter(n)}else S(t)||(t=this.mutableElements());if(0!==t.length){var r=t.boundingBox(),i=this.width(),o=this.height();return{x:(i-(e=void 0===e?this._private.zoom:e)*(r.x1+r.x2))/2,y:(o-e*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var t,e,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(t=h.getComputedStyle(r),e=function(e){return parseFloat(t.getPropertyValue(e))},{width:r.clientWidth-e("padding-left")-e("padding-right"),height:r.clientHeight-e("padding-top")-e("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var t=this._private.pan,e=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-t.x)/e,x2:(n.x2-t.x)/e,y1:(n.y1-t.y)/e,y2:(n.y2-t.y)/e};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var t=this.width(),e=this.height();return{x1:0,y1:0,x2:t,y2:e,w:t,h:e}}};Go.centre=Go.center,Go.autolockNodes=Go.autolock,Go.autoungrabifyNodes=Go.autoungrabify;var Ho={data:Vn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0}),removeData:Vn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0}),scratch:Vn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0}),removeScratch:Vn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0})};Ho.attr=Ho.data,Ho.removeAttr=Ho.removeData;var Fo=function(t){var e=this,n=(t=G({},t)).container;n&&!k(n)&&k(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=e;var o=void 0!==h&&void 0!==n&&!t.headless,a=t;a.layout=G({name:o?"grid":"null"},a.layout),a.renderer=G({name:o?"canvas":"null"},a.renderer);var s=function(t,e,n){return void 0!==e?e:void 0!==n?n:t},u=this._private={container:n,ready:!1,options:a,elements:new io(this),listeners:[],aniEles:new io(this),data:{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,a.zoomingEnabled),userZoomingEnabled:s(!0,a.userZoomingEnabled),panningEnabled:s(!0,a.panningEnabled),userPanningEnabled:s(!0,a.userPanningEnabled),boxSelectionEnabled:s(!0,a.boxSelectionEnabled),autolock:s(!1,a.autolock,a.autolockNodes),autoungrabify:s(!1,a.autoungrabify,a.autoungrabifyNodes),autounselectify:s(!1,a.autounselectify),styleEnabled:void 0===a.styleEnabled?o:a.styleEnabled,zoom:E(a.zoom)?a.zoom:1,pan:{x:_(a.pan)&&E(a.pan.x)?a.pan.x:0,y:_(a.pan)&&E(a.pan.y)?a.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1};this.createEmitter(),this.selectionType(a.selectionType),this.zoomRange({min:a.minZoom,max:a.maxZoom});u.styleEnabled&&e.setStyle([]);var c=G({},a,a.renderer);e.initRenderer(c);!function(t,e){if(t.some(L))return Fn.all(t).then(e);e(t)}([a.style,a.elements],(function(t){var n=t[0],o=t[1];u.styleEnabled&&e.style().append(n),function(t,n,r){e.notifications(!1);var i=e.mutableElements();i.length>0&&i.remove(),null!=t&&(_(t)||x(t))&&e.add(t),e.one("layoutready",(function(t){e.notifications(!0),e.emit(t),e.one("load",n),e.emitAndNotify("load")})).one("layoutstop",(function(){e.one("done",r),e.emit("done")}));var o=G({},e._private.options.layout);o.eles=e.elements(),e.layout(o).run()}(o,(function(){e.startAnimationLoop(),u.ready=!0,m(a.ready)&&e.on("ready",a.ready);for(var t=0;t0,c=ee(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(S(n.roots))t=n.roots;else if(x(n.roots)){for(var l=[],f=0;f0;){var P=N.shift(),I=A(P,O);if(I)P.outgoers().filter((function(t){return t.isNode()&&i.has(t)})).forEach(L);else if(null===I){pt("Detected double maximal shift for node `"+P.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}T();var j=0;if(n.avoidOverlap)for(var M=0;M0&&b[0].length<=3?u/2:0),f=2*Math.PI/b[r].length*i;return 0===r&&1===b[0].length&&(l=1),{x:W+l*Math.cos(f),y:$+l*Math.sin(f)}}return{x:W+(i+1-(o+1)/2)*a,y:(r+1)*s}})),this};var Xo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function Wo(t){this.options=G({},Xo,t)}Wo.prototype.run=function(){var t=this.options,e=t,n=t.cy,r=e.eles,i=void 0!==e.counterclockwise?!e.counterclockwise:e.clockwise,o=r.nodes().not(":parent");e.sort&&(o=o.sort(e.sort));for(var a,s=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),u=s.x1+s.w/2,c=s.y1+s.h/2,l=(void 0===e.sweep?2*Math.PI-2*Math.PI/o.length:e.sweep)/Math.max(1,o.length-1),f=0,h=0;h1&&e.avoidOverlap){f*=1.75;var v=Math.cos(l)-Math.cos(0),b=Math.sin(l)-Math.sin(0),y=Math.sqrt(f*f/(v*v+b*b));a=Math.max(y,a)}return o.layoutPositions(this,e,(function(t,n){var r=e.startAngle+n*l*(i?1:-1),o=a*Math.cos(r),s=a*Math.sin(r);return{x:u+o,y:c+s}})),this};var $o,Ko={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(t){return t.degree()},levelWidth:function(t){return t.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function Zo(t){this.options=G({},Ko,t)}Zo.prototype.run=function(){for(var t=this.options,e=t,n=void 0!==e.counterclockwise?!e.counterclockwise:e.clockwise,r=t.cy,i=e.eles.nodes().not(":parent"),o=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),a=o.x1+o.w/2,s=o.y1+o.h/2,u=[],c=0,l=0;l0)Math.abs(b[0].value-w.value)>=g&&(b=[],v.push(b));b.push(w)}var m=c+e.minNodeSpacing;if(!e.avoidOverlap){var x=v.length>0&&v[0].length>1,_=(Math.min(o.w,o.h)/2-m)/(v.length+x?1:0);m=Math.min(m,_)}for(var E=0,k=0;k1&&e.avoidOverlap){var A=Math.cos(T)-Math.cos(0),N=Math.sin(T)-Math.sin(0),O=Math.sqrt(m*m/(A*A+N*N));E=Math.max(O,E)}S.r=E,E+=m}if(e.equidistant){for(var L=0,P=0,I=0;I=t.numIter)&&(aa(r,t),r.temperature=r.temperature*t.coolingFactor,!(r.temperature=t.animationThreshold&&o(),X(e)):(ya(r,t),s())}()}else{for(;c;)c=a(u),u++;ya(r,t),s()}return this},Jo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},Jo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var ta=function(t,e,n){for(var r=n.eles.edges(),i=n.eles.nodes(),o={isCompound:t.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:t.width(),clientHeight:t.width(),boundingBox:ee(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()})},a=n.eles.components(),s={},u=0;u0){o.graphSet.push(x);for(u=0;ur.count?0:r.graph},na=function t(e,n,r,i){var o=i.graphSet[r];if(-10)var s=(c=r.nodeOverlap*a)*i/(g=Math.sqrt(i*i+o*o)),u=c*o/g;else{var c,l=fa(t,i,o),f=fa(e,-1*i,-1*o),h=f.x-l.x,d=f.y-l.y,p=h*h+d*d,g=Math.sqrt(p);s=(c=(t.nodeRepulsion+e.nodeRepulsion)/p)*h/g,u=c*d/g}t.isLocked||(t.offsetX-=s,t.offsetY-=u),e.isLocked||(e.offsetX+=s,e.offsetY+=u)}},la=function(t,e,n,r){if(n>0)var i=t.maxX-e.minX;else i=e.maxX-t.minX;if(r>0)var o=t.maxY-e.minY;else o=e.maxY-t.minY;return i>=0&&o>=0?Math.sqrt(i*i+o*o):0},fa=function(t,e,n){var r=t.positionX,i=t.positionY,o=t.height||1,a=t.width||1,s=n/e,u=o/a,c={};return 0===e&&0n?(c.x=r,c.y=i+o/2,c):0e&&-1*u<=s&&s<=u?(c.x=r-a/2,c.y=i-a*n/2/e,c):0=u)?(c.x=r+o*e/2/n,c.y=i+o/2,c):0>n&&(s<=-1*u||s>=u)?(c.x=r-o*e/2/n,c.y=i-o/2,c):c},ha=function(t,e){for(var n=0;n1){var p=e.gravity*f/d,g=e.gravity*h/d;l.offsetX+=p,l.offsetY+=g}}}}},pa=function(t,e){var n=[],r=0,i=-1;for(n.push.apply(n,t.graphSet[0]),i+=t.graphSet[0].length;r<=i;){var o=n[r++],a=t.idToIndex[o],s=t.layoutNodes[a],u=s.children;if(0n)var i={x:n*t/r,y:n*e/r};else i={x:t,y:e};return i},ba=function t(e,n){var r=e.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],o=!1;return(null==i.maxX||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,o=!0),(null==i.minX||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,o=!0),(null==i.minY||e.minY-i.padTopp&&(f+=d+e.componentSpacing,l=0,h=0,d=0)}}},wa={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(t){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(t,e){return!0},ready:void 0,stop:void 0,transform:function(t,e){return e}};function ma(t){this.options=G({},wa,t)}ma.prototype.run=function(){var t=this.options,e=t,n=t.cy,r=e.eles.nodes().not(":parent");e.sort&&(r=r.sort(e.sort));var i=ee(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===i.h||0===i.w)r.layoutPositions(this,e,(function(t){return{x:i.x1,y:i.y1}}));else{var o=r.size(),a=Math.sqrt(o*i.h/i.w),s=Math.round(a),u=Math.round(i.w/i.h*a),c=function(t){if(null==t)return Math.min(s,u);Math.min(s,u)==s?s=t:u=t},l=function(t){if(null==t)return Math.max(s,u);Math.max(s,u)==s?s=t:u=t},f=e.rows,h=null!=e.cols?e.cols:e.columns;if(null!=f&&null!=h)s=f,u=h;else if(null!=f&&null==h)s=f,u=Math.ceil(o/s);else if(null==f&&null!=h)u=h,s=Math.ceil(o/u);else if(u*s>o){var d=c(),p=l();(d-1)*p>=o?c(d-1):(p-1)*d>=o&&l(p-1)}else for(;u*s=o?l(v+1):c(g+1)}var b=i.w/u,y=i.h/s;if(e.condense&&(b=0,y=0),e.avoidOverlap)for(var w=0;w=u&&(O=0,N++)},P={},I=0;I(r=pe(t,e,m[x],m[x+1],m[x+2],m[x+3])))return v(n,r),!0}else if("bezier"===o.edgeType||"multibezier"===o.edgeType||"self"===o.edgeType||"compound"===o.edgeType)for(m=o.allpts,x=0;x+5(r=de(t,e,m[x],m[x+1],m[x+2],m[x+3],m[x+4],m[x+5])))return v(n,r),!0;y=y||i.source,w=w||i.target;var _=a.getArrowWidth(u,l),E=[{name:"source",x:o.arrowStartX,y:o.arrowStartY,angle:o.srcArrowAngle},{name:"target",x:o.arrowEndX,y:o.arrowEndY,angle:o.tgtArrowAngle},{name:"mid-source",x:o.midX,y:o.midY,angle:o.midsrcArrowAngle},{name:"mid-target",x:o.midX,y:o.midY,angle:o.midtgtArrowAngle}];for(x=0;x0&&(b(y),b(w))}function w(t,e,n){return _t(t,e,n)}function m(n,r){var i,o=n._private,a=p;i=r?r+"-":"",n.boundingBox();var s=o.labelBounds[r||"main"],u=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&u){var c=o.rstyle,l=w(c,"labelX",r),f=w(c,"labelY",r),h=w(o.rscratch,"labelAngle",r),d=s.x1-a,g=s.x2+a,b=s.y1-a,y=s.y2+a;if(h){var m=Math.cos(h),x=Math.sin(h),_=function(t,e){return{x:(t-=l)*m-(e-=f)*x+l,y:t*x+e*m+f}},E=_(d,b),k=_(d,y),S=_(g,b),C=_(g,y),T=[E.x,E.y,S.x,S.y,C.x,C.y,k.x,k.y];if(ge(t,e,T))return v(n),!0}else if(ue(s,t,e))return v(n),!0}}n&&(u=u.interactive);for(var x=u.length-1;x>=0;x--){var _=u[x];_.isNode()?b(_)||m(_):y(_)||m(_)||m(_,"source")||m(_,"target")}return c},getAllInBox:function(t,e,n,r){for(var i,o,a=this.getCachedZSortedEles().interactive,s=[],u=Math.min(t,n),c=Math.max(t,n),l=Math.min(e,r),f=Math.max(e,r),h=ee({x1:t=u,y1:e=l,x2:n=c,y2:r=f}),d=0;d0?Math.max(t-e,0):Math.min(t+e,0)},x=m(y,v),_=m(w,b),E=!1;"auto"===l?c=Math.abs(x)>Math.abs(_)?"horizontal":"vertical":"upward"===l||"downward"===l?(c="vertical",E=!0):"leftward"!==l&&"rightward"!==l||(c="horizontal",E=!0);var k,S="vertical"===c,C=S?_:x,T=S?w:y,A=Wt(T),N=!1;(E&&(h||p)||!("downward"===l&&T<0||"upward"===l&&T>0||"leftward"===l&&T>0||"rightward"===l&&T<0)||(C=(A*=-1)*Math.abs(C),N=!0),h)?k=(d<0?1+d:d)*C:k=(d<0?C:0)+d*A;var O=function(t){return Math.abs(t)=Math.abs(C)},L=O(k),P=O(Math.abs(C)-Math.abs(k));if((L||P)&&!N)if(S){var I=Math.abs(T)<=o/2,j=Math.abs(y)<=a/2;if(I){var M=(r.x1+r.x2)/2,D=r.y1,R=r.y2;n.segpts=[M,D,M,R]}else if(j){var B=(r.y1+r.y2)/2,G=r.x1,H=r.x2;n.segpts=[G,B,H,B]}else n.segpts=[r.x1,r.y2]}else{var F=Math.abs(T)<=i/2,z=Math.abs(w)<=s/2;if(F){var Y=(r.y1+r.y2)/2,V=r.x1,q=r.x2;n.segpts=[V,Y,q,Y]}else if(z){var U=(r.x1+r.x2)/2,X=r.y1,W=r.y2;n.segpts=[U,X,U,W]}else n.segpts=[r.x2,r.y1]}else if(S){var $=r.y1+k+(u?o/2*A:0),K=r.x1,Z=r.x2;n.segpts=[K,$,Z,$]}else{var Q=r.x1+k+(u?i/2*A:0),J=r.y1,tt=r.y2;n.segpts=[Q,J,Q,tt]}},ja.tryToCorrectInvalidPoints=function(t,e){var n=t._private.rscratch;if("bezier"===n.edgeType){var r=e.srcPos,i=e.tgtPos,o=e.srcW,a=e.srcH,s=e.tgtW,u=e.tgtH,c=e.srcShape,l=e.tgtShape,f=!E(n.startX)||!E(n.startY),h=!E(n.arrowStartX)||!E(n.arrowStartY),d=!E(n.endX)||!E(n.endY),p=!E(n.arrowEndX)||!E(n.arrowEndY),g=3*(this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth),v=$t({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),b=vh.poolIndex()){var d=f;f=h,h=d}var p=s.srcPos=f.position(),g=s.tgtPos=h.position(),v=s.srcW=f.outerWidth(),b=s.srcH=f.outerHeight(),y=s.tgtW=h.outerWidth(),w=s.tgtH=h.outerHeight(),m=s.srcShape=n.nodeShapes[e.getNodeShape(f)],x=s.tgtShape=n.nodeShapes[e.getNodeShape(h)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var _=0;_0){var z=c,Y=Kt(z,qt(e)),V=Kt(z,qt(F)),q=Y;if(V2)Kt(z,{x:F[2],y:F[3]})0){var it=l,ot=Kt(it,qt(e)),at=Kt(it,qt(rt)),st=ot;if(at2)Kt(it,{x:rt[2],y:rt[3]})=l||w){f={cp:v,segment:y};break}}if(f)break}var m=f.cp,x=f.segment,_=(l-d)/x.length,E=x.t1-x.t0,k=c?x.t0+E*_:x.t1-E*_;k=te(0,k,1),e=Jt(m.p0,m.p1,m.p2,k),u=function(t,e,n,r){var i=te(0,r-.001,1),o=te(0,r+.001,1),a=Jt(t,e,n,i),s=Jt(t,e,n,o);return Fa(a,s)}(m.p0,m.p1,m.p2,k);break;case"straight":case"segments":case"haystack":for(var S,C,T,A,N=0,O=r.allpts.length,L=0;L+3=l));L+=2);var P=(l-C)/S;P=te(0,P,1),e=function(t,e,n,r){var i=e.x-t.x,o=e.y-t.y,a=$t(t,e),s=i/a,u=o/a;return n=null==n?0:n,r=null!=r?r:n*a,{x:t.x+s*r,y:t.y+u*r}}(T,A,P),u=Fa(T,A)}a("labelX",s,e.x),a("labelY",s,e.y),a("labelAutoAngle",s,u)}};u("source"),u("target"),this.applyLabelDimensions(t)}},Ga.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))},Ga.applyPrefixedLabelDimensions=function(t,e){var n=t._private,r=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,r),o=t.pstyle("line-height").pfValue,a=t.pstyle("text-wrap").strValue,s=_t(n.rscratch,"labelWrapCachedLines",e)||[],u="wrap"!==a?1:Math.max(s.length,1),c=i.height/u,l=c*o,f=i.width,h=i.height+(u-1)*(o-1)*c;Et(n.rstyle,"labelWidth",e,f),Et(n.rscratch,"labelWidth",e,f),Et(n.rstyle,"labelHeight",e,h),Et(n.rscratch,"labelHeight",e,h),Et(n.rscratch,"labelLineHeight",e,l)},Ga.getLabelText=function(t,e){var n=t._private,r=e?e+"-":"",i=t.pstyle(r+"label").strValue,o=t.pstyle("text-transform").value,a=function(t,r){return r?(Et(n.rscratch,t,e,r),r):_t(n.rscratch,t,e)};if(!i)return"";"none"==o||("uppercase"==o?i=i.toUpperCase():"lowercase"==o&&(i=i.toLowerCase()));var s=t.pstyle("text-wrap").value;if("wrap"===s){var u=a("labelKey");if(null!=u&&a("labelWrapKey")===u)return a("labelWrapCachedText");for(var c=i.split("\n"),l=t.pstyle("text-max-width").pfValue,f="anywhere"===t.pstyle("text-overflow-wrap").value,h=[],d=/[\s\u200b]+/,p=f?"":" ",g=0;gl){for(var w=v.split(d),m="",x=0;xk)break;S+=i[T],T===i.length-1&&(C=!0)}return C||(S+="…"),S}return i},Ga.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,n=t.pstyle("text-halign").strValue;if("auto"!==e)return e;if(!t.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},Ga.calculateLabelDimensions=function(t,e){var n=et(e,t._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var o=t.pstyle("font-style").strValue,a=1*t.pstyle("font-size").pfValue+"px",s=t.pstyle("font-family").strValue,u=t.pstyle("font-weight").strValue,c=this.labelCalcDiv;c||(c=this.labelCalcDiv=document.createElement("div"),document.body.appendChild(c));var l=c.style;return l.fontFamily=s,l.fontStyle=o,l.fontSize=a,l.fontWeight=u,l.position="absolute",l.left="-9999px",l.top="-9999px",l.zIndex="-1",l.visibility="hidden",l.pointerEvents="none",l.padding="0",l.lineHeight="1",l.whiteSpace="pre",c.textContent=e,r[n]={width:Math.ceil(c.clientWidth/1),height:Math.ceil(c.clientHeight/1)}},Ga.calculateLabelAngle=function(t,e){var n=t._private.rscratch,r=t.isEdge(),i=e?e+"-":"",o=t.pstyle(i+"text-rotation"),a=o.strValue;return"none"===a?0:r&&"autorotate"===a?n.labelAutoAngle:"autorotate"===a?0:o.pfValue},Ga.calculateLabelAngles=function(t){var e=this,n=t.isEdge(),r=t._private.rscratch;r.labelAngle=e.calculateLabelAngle(t),n&&(r.sourceLabelAngle=e.calculateLabelAngle(t,"source"),r.targetLabelAngle=e.calculateLabelAngle(t,"target"))};var za={},Ya=!1;za.getNodeShape=function(t){var e=t.pstyle("shape").value;if("cutrectangle"===e&&(t.width()<28||t.height()<28))return Ya||(pt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),Ya=!0),"rectangle";if(t.isParent())return"rectangle"===e||"roundrectangle"===e||"round-rectangle"===e||"cutrectangle"===e||"cut-rectangle"===e||"barrel"===e?e:"rectangle";if("polygon"===e){var n=t.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return e};var Va={registerCalculationListeners:function(){var t=this.cy,e=t.collection(),n=this,r=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(e.merge(t),n)for(var r=0;r=t.desktopTapThreshold2}var T=r(e);v&&(t.hoverData.tapholdCancelled=!0);i=!0,n(g,["mousemove","vmousemove","tapdrag"],e,{x:l[0],y:l[1]});var A=function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||a.emit({originalEvent:e,type:"boxstart",position:{x:l[0],y:l[1]}}),p[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()};if(3===t.hoverData.which){if(v){var N={originalEvent:e,type:"cxtdrag",position:{x:l[0],y:l[1]}};w?w.emit(N):a.emit(N),t.hoverData.cxtDragged=!0,t.hoverData.cxtOver&&g===t.hoverData.cxtOver||(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:e,type:"cxtdragout",position:{x:l[0],y:l[1]}}),t.hoverData.cxtOver=g,g&&g.emit({originalEvent:e,type:"cxtdragover",position:{x:l[0],y:l[1]}}))}}else if(t.hoverData.dragging){if(i=!0,a.panningEnabled()&&a.userPanningEnabled()){var O;if(t.hoverData.justStartedPan){var L=t.hoverData.mdownPos;O={x:(l[0]-L[0])*s,y:(l[1]-L[1])*s},t.hoverData.justStartedPan=!1}else O={x:m[0]*s,y:m[1]*s};a.panBy(O),t.hoverData.dragged=!0}l=t.projectIntoViewport(e.clientX,e.clientY)}else if(1!=p[4]||null!=w&&!w.pannable()){if(w&&w.pannable()&&w.active()&&w.unactivate(),w&&w.grabbed()||g==b||(b&&n(b,["mouseout","tapdragout"],e,{x:l[0],y:l[1]}),g&&n(g,["mouseover","tapdragover"],e,{x:l[0],y:l[1]}),t.hoverData.last=g),w)if(v){if(a.boxSelectionEnabled()&&T)w&&w.grabbed()&&(f(x),w.emit("freeon"),x.emit("free"),t.dragData.didDrag&&(w.emit("dragfreeon"),x.emit("dragfree"))),A();else if(w&&w.grabbed()&&t.nodeIsDraggable(w)){var P=!t.dragData.didDrag;P&&t.redrawHint("eles",!0),t.dragData.didDrag=!0;var I=a.collection();t.hoverData.draggingEles||c(x,{inDragLayer:!0});var j={x:0,y:0};if(E(m[0])&&E(m[1])&&(j.x+=m[0],j.y+=m[1],P)){var M=t.hoverData.dragDelta;M&&E(M[0])&&E(M[1])&&(j.x+=M[0],j.y+=M[1])}for(var D=0;D0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=c=o.collection()),u!=l||t.dragData.didDrag||t.hoverData.selecting||null!=u&&u._private.selectable&&(t.hoverData.dragging||("additive"===o.selectionType()||h?u.selected()?u.unselect(["tapunselect"]):u.select(["tapselect"]):h||(o.$(e).unmerge(u).unselect(["tapunselect"]),u.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var g=o.collection(t.getAllInBox(s[0],s[1],s[2],s[3]));t.redrawHint("select",!0),g.length>0&&t.redrawHint("eles",!0),o.emit({type:"boxend",originalEvent:i,position:{x:a[0],y:a[1]}});var v=function(t){return t.selectable()&&!t.selected()};"additive"===o.selectionType()||h||o.$(e).unmerge(g).unselect(),g.emit("box").stdFilter(v).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!s[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var b=l&&l.grabbed();f(c),b&&(l.emit("freeon"),c.emit("free"),t.dragData.didDrag&&(l.emit("dragfreeon"),c.emit("dragfree")))}}s[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null}}),!1);var w,m,x,_,k,S,C,T,A,N,O,L,P,I=function(e){if(!t.scrollingPage){var n=t.cy,r=n.zoom(),i=n.pan(),o=t.projectIntoViewport(e.clientX,e.clientY),a=[o[0]*r+i.x,o[1]*r+i.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||0!==t.selection[4])e.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;e.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout((function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()}),150),s=null!=e.deltaY?e.deltaY/-250:null!=e.wheelDeltaY?e.wheelDeltaY/1e3:e.wheelDelta/1e3,s*=t.wheelSensitivity,1===e.deltaMode&&(s*=33);var u=n.zoom()*Math.pow(10,s);"gesturechange"===e.type&&(u=t.gestureStartZoom*e.scale),n.zoom({level:u,renderedPosition:{x:a[0],y:a[1]}})}}};t.registerBinding(t.container,"wheel",I,!0),t.registerBinding(window,"scroll",(function(e){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout((function(){t.scrollingPage=!1}),250)}),!0),t.registerBinding(t.container,"gesturestart",(function(e){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||e.preventDefault()}),!0),t.registerBinding(t.container,"gesturechange",(function(e){t.hasTouchStarted||I(e)}),!0),t.registerBinding(t.container,"mouseout",(function(e){var n=t.projectIntoViewport(e.clientX,e.clientY);t.cy.emit({originalEvent:e,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),t.registerBinding(t.container,"mouseover",(function(e){var n=t.projectIntoViewport(e.clientX,e.clientY);t.cy.emit({originalEvent:e,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,M,D,R,B=function(t,e,n,r){return Math.sqrt((n-t)*(n-t)+(r-e)*(r-e))},G=function(t,e,n,r){return(n-t)*(n-t)+(r-e)*(r-e)};if(t.registerBinding(t.container,"touchstart",j=function(e){if(t.hasTouchStarted=!0,y(e)){d(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var r=t.cy,i=t.touchData.now,o=t.touchData.earlier;if(e.touches[0]){var a=t.projectIntoViewport(e.touches[0].clientX,e.touches[0].clientY);i[0]=a[0],i[1]=a[1]}if(e.touches[1]){a=t.projectIntoViewport(e.touches[1].clientX,e.touches[1].clientY);i[2]=a[0],i[3]=a[1]}if(e.touches[2]){a=t.projectIntoViewport(e.touches[2].clientX,e.touches[2].clientY);i[4]=a[0],i[5]=a[1]}if(e.touches[1]){t.touchData.singleTouchMoved=!0,f(t.dragData.touchDragEles);var u=t.findContainerClientCoords();A=u[0],N=u[1],O=u[2],L=u[3],w=e.touches[0].clientX-A,m=e.touches[0].clientY-N,x=e.touches[1].clientX-A,_=e.touches[1].clientY-N,P=0<=w&&w<=O&&0<=x&&x<=O&&0<=m&&m<=L&&0<=_&&_<=L;var h=r.pan(),p=r.zoom();k=B(w,m,x,_),S=G(w,m,x,_),T=[((C=[(w+x)/2,(m+_)/2])[0]-h.x)/p,(C[1]-h.y)/p];if(S<4e4&&!e.touches[2]){var g=t.findNearestElement(i[0],i[1],!0,!0),v=t.findNearestElement(i[2],i[3],!0,!0);return g&&g.isNode()?(g.activate().emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start=g):v&&v.isNode()?(v.activate().emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start=v):r.emit({originalEvent:e,type:"cxttapstart",position:{x:i[0],y:i[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,void t.redraw()}}if(e.touches[2])r.boxSelectionEnabled()&&e.preventDefault();else if(e.touches[1]);else if(e.touches[0]){var b=t.findNearestElements(i[0],i[1],!0,!0),E=b[0];if(null!=E&&(E.activate(),t.touchData.start=E,t.touchData.starts=b,t.nodeIsGrabbable(E))){var I=t.dragData.touchDragEles=r.collection(),j=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),E.selected()?(j=r.$((function(e){return e.selected()&&t.nodeIsGrabbable(e)})),c(j,{addToList:I})):l(E,{addToList:I}),s(E);var M=function(t){return{originalEvent:e,type:t,position:{x:i[0],y:i[1]}}};E.emit(M("grabon")),j?j.forEach((function(t){t.emit(M("grab"))})):E.emit(M("grab"))}n(E,["touchstart","tapstart","vmousedown"],e,{x:i[0],y:i[1]}),null==E&&(t.data.bgActivePosistion={x:a[0],y:a[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout((function(){!1!==t.touchData.singleTouchMoved||t.pinching||t.touchData.selecting||n(t.touchData.start,["taphold"],e,{x:i[0],y:i[1]})}),t.tapholdDuration)}if(e.touches.length>=1){for(var D=t.touchData.startPosition=[],R=0;R=t.touchTapThreshold2}if(r&&t.touchData.cxt){e.preventDefault();var L=e.touches[0].clientX-A,I=e.touches[0].clientY-N,j=e.touches[1].clientX-A,M=e.touches[1].clientY-N,D=G(L,I,j,M);if(D/S>=2.25||D>=22500){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var R={originalEvent:e,type:"cxttapend",position:{x:s[0],y:s[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(R),t.touchData.start=null):a.emit(R)}}if(r&&t.touchData.cxt){R={originalEvent:e,type:"cxtdrag",position:{x:s[0],y:s[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(R):a.emit(R),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var H=t.findNearestElement(s[0],s[1],!0,!0);t.touchData.cxtOver&&H===t.touchData.cxtOver||(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:e,type:"cxtdragout",position:{x:s[0],y:s[1]}}),t.touchData.cxtOver=H,H&&H.emit({originalEvent:e,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(r&&e.touches[2]&&a.boxSelectionEnabled())e.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||a.emit({originalEvent:e,type:"boxstart",position:{x:s[0],y:s[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),t.redrawHint("select",!0),t.redraw();else if(r&&e.touches[1]&&!t.touchData.didSelect&&a.zoomingEnabled()&&a.panningEnabled()&&a.userZoomingEnabled()&&a.userPanningEnabled()){if(e.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),tt=t.dragData.touchDragEles){t.redrawHint("drag",!0);for(var F=0;F0&&!t.hoverData.draggingEles&&!t.swipePanning&&null!=t.data.bgActivePosistion&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},!1),t.registerBinding(window,"touchcancel",D=function(e){var n=t.touchData.start;t.touchData.capture=!1,n&&n.unactivate()}),t.registerBinding(window,"touchend",R=function(r){var i=t.touchData.start;if(t.touchData.capture){0===r.touches.length&&(t.touchData.capture=!1),r.preventDefault();var o=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var a,s=t.cy,u=s.zoom(),c=t.touchData.now,l=t.touchData.earlier;if(r.touches[0]){var h=t.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=h[0],c[1]=h[1]}if(r.touches[1]){h=t.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);c[2]=h[0],c[3]=h[1]}if(r.touches[2]){h=t.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);c[4]=h[0],c[5]=h[1]}if(i&&i.unactivate(),t.touchData.cxt){if(a={originalEvent:r,type:"cxttapend",position:{x:c[0],y:c[1]}},i?i.emit(a):s.emit(a),!t.touchData.cxtDragged){var d={originalEvent:r,type:"cxttap",position:{x:c[0],y:c[1]}};i?i.emit(d):s.emit(d)}return t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,void t.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var p=s.collection(t.getAllInBox(o[0],o[1],o[2],o[3]));o[0]=void 0,o[1]=void 0,o[2]=void 0,o[3]=void 0,o[4]=0,t.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:r,position:{x:c[0],y:c[1]}});p.emit("box").stdFilter((function(t){return t.selectable()&&!t.selected()})).select().emit("boxselect"),p.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(null!=i&&i.unactivate(),r.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var g=t.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;f(g),t.redrawHint("drag",!0),t.redrawHint("eles",!0),v&&(i.emit("freeon"),g.emit("free"),t.dragData.didDrag&&(i.emit("dragfreeon"),g.emit("dragfree"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]}),i.unactivate(),t.touchData.start=null}else{var b=t.findNearestElement(c[0],c[1],!0,!0);n(b,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]})}var y=t.touchData.startPosition[0]-c[0],w=y*y,m=t.touchData.startPosition[1]-c[1],x=(w+m*m)*u*u;t.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),n(i,["tap","vclick"],r,{x:c[0],y:c[1]})),null!=i&&!t.dragData.didDrag&&i._private.selectable&&x2){for(var A=[c[0],c[1]],N=Math.pow(A[0]-t,2)+Math.pow(A[1]-e,2),O=1;O0)return g[0]}return null},h=Object.keys(l),d=0;d0?u:le(i,o,t,e,n,r,a)},checkPoint:function(t,e,n,r,i,o,a){var s=Ae(r,i),u=2*s;if(ve(t,e,this.points,o,a,r,i-u,[0,-1],n))return!0;if(ve(t,e,this.points,o,a,r-u,i,[0,-1],n))return!0;var c=r/2+2*n,l=i/2+2*n;return!!ge(t,e,[o-c,a-l,o-c,a,o+c,a,o+c,a-l])||(!!we(t,e,u,u,o+r/2-s,a+i/2-s,n)||!!we(t,e,u,u,o-r/2+s,a+i/2-s,n))}}},$a.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",Se(3,0)),this.generateRoundPolygon("round-triangle",Se(3,0)),this.generatePolygon("rectangle",Se(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",Se(5,0)),this.generateRoundPolygon("round-pentagon",Se(5,0)),this.generatePolygon("hexagon",Se(6,0)),this.generateRoundPolygon("round-hexagon",Se(6,0)),this.generatePolygon("heptagon",Se(7,0)),this.generateRoundPolygon("round-heptagon",Se(7,0)),this.generatePolygon("octagon",Se(8,0)),this.generateRoundPolygon("round-octagon",Se(8,0));var r=new Array(20),i=Te(5,0),o=Te(5,Math.PI/5),a=.5*(3-Math.sqrt(5));a*=1.57;for(var s=0;s=t.deqFastCost*g)break}else if(i){if(d>=t.deqCost*u||d>=t.deqAvgCost*s)break}else if(p>=t.deqNoDrawCost*(1e3/60))break;var v=t.deq(e,f,l);if(!(v.length>0))break;for(var b=0;b0&&(t.onDeqd(e,c),!i&&t.shouldRedraw(e,c,f,l)&&r())}),o(e))}}},es=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ct;s(this,t),this.idsByKey=new kt,this.keyForId=new kt,this.cachesByLvl=new kt,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=n}return c(t,[{key:"getIdsFor",value:function(t){null==t&&ht("Can not get id list for null key");var e=this.idsByKey,n=this.idsByKey.get(t);return n||(n=new Ct,e.set(t,n)),n}},{key:"addIdForKey",value:function(t,e){null!=t&&this.getIdsFor(t).add(e)}},{key:"deleteIdForKey",value:function(t,e){null!=t&&this.getIdsFor(t).delete(e)}},{key:"getNumberOfIdsForKey",value:function(t){return null==t?0:this.getIdsFor(t).size}},{key:"updateKeyMappingFor",value:function(t){var e=t.id(),n=this.keyForId.get(e),r=this.getKey(t);this.deleteIdForKey(n,e),this.addIdForKey(r,e),this.keyForId.set(e,r)}},{key:"deleteKeyMappingFor",value:function(t){var e=t.id(),n=this.keyForId.get(e);this.deleteIdForKey(n,e),this.keyForId.delete(e)}},{key:"keyHasChangedFor",value:function(t){var e=t.id();return this.keyForId.get(e)!==this.getKey(t)}},{key:"isInvalid",value:function(t){return this.keyHasChangedFor(t)||this.doesEleInvalidateKey(t)}},{key:"getCachesAt",value:function(t){var e=this.cachesByLvl,n=this.lvls,r=e.get(t);return r||(r=new kt,e.set(t,r),n.push(t)),r}},{key:"getCache",value:function(t,e){return this.getCachesAt(e).get(t)}},{key:"get",value:function(t,e){var n=this.getKey(t),r=this.getCache(n,e);return null!=r&&this.updateKeyMappingFor(t),r}},{key:"getForCachedKey",value:function(t,e){var n=this.keyForId.get(t.id());return this.getCache(n,e)}},{key:"hasCache",value:function(t,e){return this.getCachesAt(e).has(t)}},{key:"has",value:function(t,e){var n=this.getKey(t);return this.hasCache(n,e)}},{key:"setCache",value:function(t,e,n){n.key=t,this.getCachesAt(e).set(t,n)}},{key:"set",value:function(t,e,n){var r=this.getKey(t);this.setCache(r,e,n),this.updateKeyMappingFor(t)}},{key:"deleteCache",value:function(t,e){this.getCachesAt(e).delete(t)}},{key:"delete",value:function(t,e){var n=this.getKey(t);this.deleteCache(n,e)}},{key:"invalidateKey",value:function(t){var e=this;this.lvls.forEach((function(n){return e.deleteCache(t,n)}))}},{key:"invalidate",value:function(t){var e=t.id(),n=this.keyForId.get(e);this.deleteKeyMappingFor(t);var r=this.doesEleInvalidateKey(t);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),t}(),ns={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},rs=wt({getKey:null,doesEleInvalidateKey:ct,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ut,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),is=function(t,e){this.renderer=t,this.onDequeues=[];var n=rs(e);G(this,n),this.lookup=new es(n.getKey,n.doesEleInvalidateKey),this.setupDequeueing()},os=is.prototype;os.reasons=ns,os.getTextureQueue=function(t){return this.eleImgCaches=this.eleImgCaches||{},this.eleImgCaches[t]=this.eleImgCaches[t]||[]},os.getRetiredTextureQueue=function(t){var e=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return e[t]=e[t]||[]},os.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new o((function(t,e){return e.reqs-t.reqs}))},os.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},os.getElement=function(t,e,n,r,i){var o=this,a=this.renderer,s=a.cy.zoom(),u=this.lookup;if(0===e.w||0===e.h||isNaN(e.w)||isNaN(e.h)||!t.visible())return null;if(!o.allowEdgeTxrCaching&&t.isEdge()||!o.allowParentTxrCaching&&t.isParent())return null;if(null==r&&(r=Math.ceil(Xt(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var c=Math.pow(2,r),l=e.h*c,f=e.w*c,h=a.eleTextBiggerThanMin(t,c);if(!this.isVisible(t,h))return null;var d,p=u.get(t,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(d=l<=25?25:l<=50?50:50*Math.ceil(l/50),l>1024||f>1024)return null;var g=o.getTextureQueue(d),v=g[g.length-2],b=function(){return o.recycleTexture(d,f)||o.addTexture(d,f)};v||(v=g[g.length-1]),v||(v=b()),v.width-v.usedWidthr;T--)S=o.getElement(t,e,n,T,ns.downscale);C()}else{var A;if(!m&&!x&&!_)for(var N=r-1;N>=-4;N--){var O=u.get(t,N);if(O){A=O;break}}if(w(A))return o.queueElement(t,r),A;v.context.translate(v.usedWidth,0),v.context.scale(c,c),this.drawElement(v.context,t,e,h,!1),v.context.scale(1/c,1/c),v.context.translate(-v.usedWidth,0)}return p={x:v.usedWidth,texture:v,level:r,scale:c,width:f,height:l,scaledLabelShown:h},v.usedWidth+=Math.ceil(f+8),v.eleCaches.push(p),u.set(t,r,p),o.checkTextureFullness(v),p},os.invalidateElements=function(t){for(var e=0;e=.2*t.width&&this.retireTexture(t)},os.checkTextureFullness=function(t){var e=this.getTextureQueue(t.height);t.usedWidth/t.width>.8&&t.fullnessChecks>=10?mt(e,t):t.fullnessChecks++},os.retireTexture=function(t){var e=t.height,n=this.getTextureQueue(e),r=this.lookup;mt(n,t),t.retired=!0;for(var i=t.eleCaches,o=0;o=e)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,xt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),mt(r,o),n.push(o),o}},os.queueElement=function(t,e){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(t),o=r[i];if(o)o.level=Math.max(o.level,e),o.eles.merge(t),o.reqs++,n.updateItem(o);else{var a={eles:t.spawn().merge(t),level:e,reqs:1,key:i};n.push(a),r[i]=a}},os.dequeue=function(t){for(var e=this.getElementQueue(),n=this.getElementKeyToQueue(),r=[],i=this.lookup,o=0;o<1&&e.size()>0;o++){var a=e.pop(),s=a.key,u=a.eles[0],c=i.hasCache(u,a.level);if(n[s]=null,!c){r.push(a);var l=this.getBoundingBox(u);this.getElement(u,l,t,a.level,ns.dequeue)}}return r},os.removeFromQueue=function(t){var e=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(t),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=st,e.updateItem(i),e.pop(),n[r]=null):i.eles.unmerge(t))},os.onDequeue=function(t){this.onDequeues.push(t)},os.offDequeue=function(t){mt(this.onDequeues,t)},os.setupDequeueing=ts({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(t,e,n){return t.dequeue(e,n)},onDeqd:function(t,e){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,t);var a,s,u=r.layersByLevel,c=Math.pow(2,n),l=u[n]=u[n]||[];if(r.levelIsComplete(n,t))return l;!function(){var e=function(e){if(r.validateLayersElesOrdering(e,t),r.levelIsComplete(e,t))return s=u[e],!0},i=function(t){if(!s)for(var r=n+t;-4<=r&&r<=2&&!e(r);r+=t);};i(1),i(-1);for(var o=l.length-1;o>=0;o--){var a=l[o];a.invalid&&mt(l,a)}}();var f=function(e){var i=(e=e||{}).after;if(function(){if(!a){a=ee();for(var e=0;e16e6)return null;var o=r.makeLayer(a,n);if(null!=i){var s=l.indexOf(i)+1;l.splice(s,0,o)}else(void 0===e.insert||e.insert)&&l.unshift(o);return o};if(r.skipping&&!o)return null;for(var h=null,d=t.length/1,p=!o,g=0;g=d||!ce(h.bb,v.boundingBox()))&&!(h=f({insert:!0,after:h})))return null;s||p?r.queueLayer(h,v):r.drawEleInLayer(h,v,n,e),h.eles.push(v),y[n]=h}}return s||(p?null:l)},ss.getEleLevelForLayerLevel=function(t,e){return t},ss.drawEleInLayer=function(t,e,n,r){var i=this.renderer,o=t.context,a=e.boundingBox();0!==a.w&&0!==a.h&&e.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(o,!1),i.drawCachedElement(o,e,null,null,n,!0),i.setImgSmoothing(o,!0))},ss.levelIsComplete=function(t,e){var n=this.layersByLevel[t];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(o.invalid)return!1;r+=o.eles.length}return r===e.length},ss.validateLayersElesOrdering=function(t,e){var n=this.layersByLevel[t];if(n)for(var r=0;r0){t=!0;break}}return t},ss.invalidateElements=function(t){var e=this;0!==t.length&&(e.lastInvalidationTime=W(),0!==t.length&&e.haveLayers()&&e.updateElementsInLayers(t,(function(t,n,r){e.invalidateLayer(t)})))},ss.invalidateLayer=function(t){if(this.lastInvalidationTime=W(),!t.invalid){var e=t.level,n=t.eles,r=this.layersByLevel[e];mt(r,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],a=this,s=e._private.rscratch;if((!o||e.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var u;n&&(u=n,t.translate(-u.x1,-u.y1));var c=o?e.pstyle("opacity").value:1,l=e.pstyle("line-style").value,f=e.pstyle("width").pfValue,h=e.pstyle("line-cap").value,d=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;t.lineWidth=f,t.lineCap=h,a.eleStrokeStyle(t,e,n),a.drawEdgePath(e,t,s.allpts,l),t.lineCap="butt"},p=function(){i&&a.drawEdgeOverlay(t,e)},g=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;a.drawArrowheads(t,e,n)},v=function(){a.drawElementText(t,e,null,r)};t.lineJoin="round";var b="yes"===e.pstyle("ghost").value;if(b){var y=e.pstyle("ghost-offset-x").pfValue,w=e.pstyle("ghost-offset-y").pfValue,m=e.pstyle("ghost-opacity").value,x=c*m;t.translate(y,w),d(x),g(x),t.translate(-y,-w)}d(),g(),p(),v(),n&&t.translate(u.x1,u.y1)}},drawEdgeOverlay:function(t,e){if(e.visible()){var n=e.pstyle("overlay-opacity").value;if(0!==n){var r=this,i=r.usePaths(),o=e._private.rscratch,a=2*e.pstyle("overlay-padding").pfValue,s=e.pstyle("overlay-color").value;t.lineWidth=a,"self"!==o.edgeType||i?t.lineCap="round":t.lineCap="butt",r.colorStrokeStyle(t,s[0],s[1],s[2],n),r.drawEdgePath(e,t,o.allpts,"solid")}}},drawEdgePath:function(t,e,n,r){var i,o=t._private.rscratch,a=e,s=!1,u=this.usePaths(),c=t.pstyle("line-dash-pattern").pfValue,l=t.pstyle("line-dash-offset").pfValue;if(u){var f=n.join("$");o.pathCacheKey&&o.pathCacheKey===f?(i=e=o.pathCache,s=!0):(i=e=new Path2D,o.pathCacheKey=f,o.pathCache=i)}if(a.setLineDash)switch(r){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(c),a.lineDashOffset=l;break;case"solid":a.setLineDash([])}if(!s&&!o.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(n[0],n[1]),o.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+35&&void 0!==arguments[5]?arguments[5]:5;t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+r-o,n),t.quadraticCurveTo(e+r,n,e+r,n+o),t.lineTo(e+r,n+i-o),t.quadraticCurveTo(e+r,n+i,e+r-o,n+i),t.lineTo(e+o,n+i),t.quadraticCurveTo(e,n+i,e,n+i-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath(),t.fill()}Cs.eleTextBiggerThanMin=function(t,e){if(!e){var n=t.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(Xt(n*r));e=Math.pow(2,i)}return!(t.pstyle("font-size").pfValue*e5&&void 0!==arguments[5])||arguments[5],a=this;if(null==r){if(o&&!a.eleTextBiggerThanMin(e))return}else if(!1===r)return;if(e.isNode()){var s=e.pstyle("label");if(!s||!s.value)return;var u=a.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var c=e.element()._private.rscratch.badLine,l=e.pstyle("label"),f=e.pstyle("source-label"),h=e.pstyle("target-label");if(c||(!l||!l.value)&&(!f||!f.value)&&(!h||!h.value))return;t.textAlign="center",t.textBaseline="bottom"}var d,p=!n;n&&(d=n,t.translate(-d.x1,-d.y1)),null==i?(a.drawText(t,e,null,p,o),e.isEdge()&&(a.drawText(t,e,"source",p,o),a.drawText(t,e,"target",p,o))):a.drawText(t,e,i,p,o),n&&t.translate(d.x1,d.y1)},Cs.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",o=e.pstyle("font-family").strValue,a=e.pstyle("font-weight").strValue,s=n?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*s,c=e.pstyle("color").value,l=e.pstyle("text-outline-color").value;t.font=r+" "+a+" "+i+" "+o,t.lineJoin="round",this.colorFillStyle(t,c[0],c[1],c[2],s),this.colorStrokeStyle(t,l[0],l[1],l[2],u)},Cs.getTextAngle=function(t,e){var n=t._private.rscratch,r=e?e+"-":"",i=t.pstyle(r+"text-rotation"),o=_t(n,"labelAngle",e);return"autorotate"===i.strValue?t.isEdge()?o:0:"none"===i.strValue?0:i.pfValue},Cs.drawText=function(t,e,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e._private,a=o.rscratch,s=i?e.effectiveOpacity():1;if(!i||0!==s&&0!==e.pstyle("text-opacity").value){"main"===n&&(n=null);var u,c,l=_t(a,"labelX",n),f=_t(a,"labelY",n),h=this.getLabelText(e,n);if(null!=h&&""!==h&&!isNaN(l)&&!isNaN(f)){this.setupTextStyle(t,e,i);var d,p=n?n+"-":"",g=_t(a,"labelWidth",n),v=_t(a,"labelHeight",n),b=e.pstyle(p+"text-margin-x").pfValue,y=e.pstyle(p+"text-margin-y").pfValue,w=e.isEdge(),m=e.pstyle("text-halign").value,x=e.pstyle("text-valign").value;switch(w&&(m="center",x="center"),l+=b,f+=y,0!==(d=r?this.getTextAngle(e,n):0)&&(u=l,c=f,t.translate(u,c),t.rotate(d),l=0,f=0),x){case"top":break;case"center":f+=v/2;break;case"bottom":f+=v}var _=e.pstyle("text-background-opacity").value,E=e.pstyle("text-border-opacity").value,k=e.pstyle("text-border-width").pfValue,S=e.pstyle("text-background-padding").pfValue;if(_>0||k>0&&E>0){var C=l-S;switch(m){case"left":C-=g;break;case"center":C-=g/2}var T=f-v-S,A=g+2*S,N=v+2*S;if(_>0){var O=t.fillStyle,L=e.pstyle("text-background-color").value;t.fillStyle="rgba("+L[0]+","+L[1]+","+L[2]+","+_*s+")";var P=e.pstyle("text-background-shape").strValue;0===P.indexOf("round")?Ts(t,C,T,A,N,2):t.fillRect(C,T,A,N),t.fillStyle=O}if(k>0&&E>0){var I=t.strokeStyle,j=t.lineWidth,M=e.pstyle("text-border-color").value,D=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+M[0]+","+M[1]+","+M[2]+","+E*s+")",t.lineWidth=k,t.setLineDash)switch(D){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=k/4,t.setLineDash([]);break;case"solid":t.setLineDash([])}if(t.strokeRect(C,T,A,N),"double"===D){var R=k/2;t.strokeRect(C+R,T+R,A-2*R,N-2*R)}t.setLineDash&&t.setLineDash([]),t.lineWidth=j,t.strokeStyle=I}}var B=2*e.pstyle("text-outline-width").pfValue;if(B>0&&(t.lineWidth=B),"wrap"===e.pstyle("text-wrap").value){var G=_t(a,"labelWrapCachedLines",n),H=_t(a,"labelLineHeight",n),F=g/2,z=this.getLabelJustification(e);switch("auto"===z||("left"===m?"left"===z?l+=-g:"center"===z&&(l+=-F):"center"===m?"left"===z?l+=-F:"right"===z&&(l+=F):"right"===m&&("center"===z?l+=F:"right"===z&&(l+=g))),x){case"top":f-=(G.length-1)*H;break;case"center":case"bottom":f-=(G.length-1)*H}for(var Y=0;Y0&&t.strokeText(G[Y],l,f),t.fillText(G[Y],l,f),f+=H}else B>0&&t.strokeText(h,l,f),t.fillText(h,l,f);0!==d&&(t.rotate(-d),t.translate(-u,-c))}}};var As={drawNode:function(t,e,n){var r,i,o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=this,c=e._private,l=c.rscratch,f=e.position();if(E(f.x)&&E(f.y)&&(!s||e.visible())){var h,d,p=s?e.effectiveOpacity():1,g=u.usePaths(),v=!1,b=e.padding();r=e.width()+2*b,i=e.height()+2*b,n&&(d=n,t.translate(-d.x1,-d.y1));for(var y=e.pstyle("background-image"),w=y.value,m=new Array(w.length),x=new Array(w.length),_=0,k=0;k0&&void 0!==arguments[0]?arguments[0]:O;u.eleFillStyle(t,e,n)},M=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:I;u.colorStrokeStyle(t,L[0],L[1],L[2],e)},D=e.pstyle("shape").strValue,R=e.pstyle("shape-polygon-points").pfValue;if(g){t.translate(f.x,f.y);var B=u.nodePathCache=u.nodePathCache||[],G=nt("polygon"===D?D+","+R.join(","):D,""+i,""+r),H=B[G];null!=H?(h=H,v=!0,l.pathCache=h):(h=new Path2D,B[G]=l.pathCache=h)}var F=function(){if(!v){var n=f;g&&(n={x:0,y:0}),u.nodeShapes[u.getNodeShape(e)].draw(h||t,n.x,n.y,r,i)}g?t.fill(h):t.fill()},z=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=c.backgrounding,i=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;u.hasPie(e)&&(u.drawPie(t,e,o),n&&(g||u.nodeShapes[u.getNodeShape(e)].draw(t,f.x,f.y,r,i)))},V=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,n=(A>0?A:-A)*e,r=A>0?0:255;0!==A&&(u.colorFillStyle(t,r,r,r,n),g?t.fill(h):t.fill())},q=function(){if(N>0){if(t.lineWidth=N,t.lineCap="butt",t.setLineDash)switch(P){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([])}if(g?t.stroke(h):t.stroke(),"double"===P){t.lineWidth=N/3;var e=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",g?t.stroke(h):t.stroke(),t.globalCompositeOperation=e}t.setLineDash&&t.setLineDash([])}},U=function(){a&&u.drawNodeOverlay(t,e,f,r,i)},X=function(){u.drawElementText(t,e,null,o)},W="yes"===e.pstyle("ghost").value;if(W){var $=e.pstyle("ghost-offset-x").pfValue,K=e.pstyle("ghost-offset-y").pfValue,Z=e.pstyle("ghost-opacity").value,Q=Z*p;t.translate($,K),j(Z*O),F(),z(Q),Y(0!==A||0!==N),V(Q),M(Z*I),q(),t.translate(-$,-K)}j(),F(),z(),Y(0!==A||0!==N),V(),M(),q(),g&&t.translate(-f.x,-f.y),X(),U(),n&&t.translate(d.x1,d.y1)}},drawNodeOverlay:function(t,e,n,r,i){if(e.visible()){var o=e.pstyle("overlay-padding").pfValue,a=e.pstyle("overlay-opacity").value,s=e.pstyle("overlay-color").value;if(a>0){if(n=n||e.position(),null==r||null==i){var u=e.padding();r=e.width()+2*u,i=e.height()+2*u}this.colorFillStyle(t,s[0],s[1],s[2],a),this.nodeShapes.roundrectangle.draw(t,n.x,n.y,r+2*o,i+2*o),t.fill()}}},hasPie:function(t){return(t=t[0])._private.hasPie},drawPie:function(t,e,n,r){e=e[0],r=r||e.position();var i=e.cy().style(),o=e.pstyle("pie-size"),a=r.x,s=r.y,u=e.width(),c=e.height(),l=Math.min(u,c)/2,f=0;this.usePaths()&&(a=0,s=0),"%"===o.units?l*=o.pfValue:void 0!==o.pfValue&&(l=o.pfValue/2);for(var h=1;h<=i.pieBackgroundN;h++){var d=e.pstyle("pie-"+h+"-background-size").value,p=e.pstyle("pie-"+h+"-background-color").value,g=e.pstyle("pie-"+h+"-background-opacity").value*n,v=d/100;v+f>1&&(v=1-f);var b=1.5*Math.PI+2*Math.PI*f,y=b+2*Math.PI*v;0===d||f>=1||f+v>1||(t.beginPath(),t.moveTo(a,s),t.arc(a,s,l,b,y),t.closePath(),this.colorFillStyle(t,p[0],p[1],p[2],g),t.fill(),f+=v)}}},Ns={};Ns.getPixelRatio=function(){var t=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var e=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/e},Ns.paintCache=function(t){for(var e,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;ia.minMbLowQualFrames&&(a.motionBlurPxRatio=a.mbPxRBlurry)),a.clearingMotionBlur&&(a.motionBlurPxRatio=1),a.textureDrawLastFrame&&!f&&(l[a.NODE]=!0,l[a.SELECT_BOX]=!0);var y=u.style(),w=u.zoom(),m=void 0!==i?i:w,x=u.pan(),_={x:x.x,y:x.y},E={zoom:w,pan:{x:x.x,y:x.y}},k=a.prevViewport;void 0===k||E.zoom!==k.zoom||E.pan.x!==k.pan.x||E.pan.y!==k.pan.y||g&&!p||(a.motionBlurPxRatio=1),o&&(_=o),m*=s,_.x*=s,_.y*=s;var S=a.getCachedZSortedEles();function C(t,e,n,r,i){var o=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",a.colorFillStyle(t,255,255,255,a.motionBlurTransparency),t.fillRect(e,n,r,i),t.globalCompositeOperation=o}function T(t,r){var s,u,l,f;a.clearingMotionBlur||t!==c.bufferContexts[a.MOTIONBLUR_BUFFER_NODE]&&t!==c.bufferContexts[a.MOTIONBLUR_BUFFER_DRAG]?(s=_,u=m,l=a.canvasWidth,f=a.canvasHeight):(s={x:x.x*d,y:x.y*d},u=w*d,l=a.canvasWidth*d,f=a.canvasHeight*d),t.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(t,0,0,l,f):e||void 0!==r&&!r||t.clearRect(0,0,l,f),n||(t.translate(s.x,s.y),t.scale(u,u)),o&&t.translate(o.x,o.y),i&&t.scale(i,i)}if(f||(a.textureDrawLastFrame=!1),f){if(a.textureDrawLastFrame=!0,!a.textureCache){a.textureCache={},a.textureCache.bb=u.mutableElements().boundingBox(),a.textureCache.texture=a.data.bufferCanvases[a.TEXTURE_BUFFER];var A=a.data.bufferContexts[a.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,a.canvasWidth*a.textureMult,a.canvasHeight*a.textureMult),a.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*a.textureMult}),(E=a.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:a.canvasWidth,height:a.canvasHeight}).mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}l[a.DRAG]=!1,l[a.NODE]=!1;var N=c.contexts[a.NODE],O=a.textureCache.texture;E=a.textureCache.viewport;N.setTransform(1,0,0,1,0,0),h?C(N,0,0,E.width,E.height):N.clearRect(0,0,E.width,E.height);var L=y.core("outside-texture-bg-color").value,P=y.core("outside-texture-bg-opacity").value;a.colorFillStyle(N,L[0],L[1],L[2],P),N.fillRect(0,0,E.width,E.height);w=u.zoom();T(N,!1),N.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/s,E.height/E.zoom/s),N.drawImage(O,E.mpan.x,E.mpan.y,E.width/E.zoom/s,E.height/E.zoom/s)}else a.textureOnViewport&&!e&&(a.textureCache=null);var I=u.extent(),j=a.pinching||a.hoverData.dragging||a.swipePanning||a.data.wheelZooming||a.hoverData.draggingEles||a.cy.animated(),M=a.hideEdgesOnViewport&&j,D=[];if(D[a.NODE]=!l[a.NODE]&&h&&!a.clearedForMotionBlur[a.NODE]||a.clearingMotionBlur,D[a.NODE]&&(a.clearedForMotionBlur[a.NODE]=!0),D[a.DRAG]=!l[a.DRAG]&&h&&!a.clearedForMotionBlur[a.DRAG]||a.clearingMotionBlur,D[a.DRAG]&&(a.clearedForMotionBlur[a.DRAG]=!0),l[a.NODE]||n||r||D[a.NODE]){var R=h&&!D[a.NODE]&&1!==d;T(N=e||(R?a.data.bufferContexts[a.MOTIONBLUR_BUFFER_NODE]:c.contexts[a.NODE]),h&&!R?"motionBlur":void 0),M?a.drawCachedNodes(N,S.nondrag,s,I):a.drawLayeredElements(N,S.nondrag,s,I),a.debug&&a.drawDebugPoints(N,S.nondrag),n||h||(l[a.NODE]=!1)}if(!r&&(l[a.DRAG]||n||D[a.DRAG])){R=h&&!D[a.DRAG]&&1!==d;T(N=e||(R?a.data.bufferContexts[a.MOTIONBLUR_BUFFER_DRAG]:c.contexts[a.DRAG]),h&&!R?"motionBlur":void 0),M?a.drawCachedNodes(N,S.drag,s,I):a.drawCachedElements(N,S.drag,s,I),a.debug&&a.drawDebugPoints(N,S.drag),n||h||(l[a.DRAG]=!1)}if(a.showFps||!r&&l[a.SELECT_BOX]&&!n){if(T(N=e||c.contexts[a.SELECT_BOX]),1==a.selection[4]&&(a.hoverData.selecting||a.touchData.selecting)){w=a.cy.zoom();var B=y.core("selection-box-border-width").value/w;N.lineWidth=B,N.fillStyle="rgba("+y.core("selection-box-color").value[0]+","+y.core("selection-box-color").value[1]+","+y.core("selection-box-color").value[2]+","+y.core("selection-box-opacity").value+")",N.fillRect(a.selection[0],a.selection[1],a.selection[2]-a.selection[0],a.selection[3]-a.selection[1]),B>0&&(N.strokeStyle="rgba("+y.core("selection-box-border-color").value[0]+","+y.core("selection-box-border-color").value[1]+","+y.core("selection-box-border-color").value[2]+","+y.core("selection-box-opacity").value+")",N.strokeRect(a.selection[0],a.selection[1],a.selection[2]-a.selection[0],a.selection[3]-a.selection[1]))}if(c.bgActivePosistion&&!a.hoverData.selecting){w=a.cy.zoom();var G=c.bgActivePosistion;N.fillStyle="rgba("+y.core("active-bg-color").value[0]+","+y.core("active-bg-color").value[1]+","+y.core("active-bg-color").value[2]+","+y.core("active-bg-opacity").value+")",N.beginPath(),N.arc(G.x,G.y,y.core("active-bg-size").pfValue/w,0,2*Math.PI),N.fill()}var H=a.lastRedrawTime;if(a.showFps&&H){H=Math.round(H);var F=Math.round(1e3/H);N.setTransform(1,0,0,1,0,0),N.fillStyle="rgba(255, 0, 0, 0.75)",N.strokeStyle="rgba(255, 0, 0, 0.75)",N.lineWidth=1,N.fillText("1 frame = "+H+" ms = "+F+" fps",0,20);N.strokeRect(0,30,250,20),N.fillRect(0,30,250*Math.min(F/60,1),20)}n||(l[a.SELECT_BOX]=!1)}if(h&&1!==d){var z=c.contexts[a.NODE],Y=a.data.bufferCanvases[a.MOTIONBLUR_BUFFER_NODE],V=c.contexts[a.DRAG],q=a.data.bufferCanvases[a.MOTIONBLUR_BUFFER_DRAG],U=function(t,e,n){t.setTransform(1,0,0,1,0,0),n||!b?t.clearRect(0,0,a.canvasWidth,a.canvasHeight):C(t,0,0,a.canvasWidth,a.canvasHeight);var r=d;t.drawImage(e,0,0,a.canvasWidth*r,a.canvasHeight*r,0,0,a.canvasWidth,a.canvasHeight)};(l[a.NODE]||D[a.NODE])&&(U(z,Y,D[a.NODE]),l[a.NODE]=!1),(l[a.DRAG]||D[a.DRAG])&&(U(V,q,D[a.DRAG]),l[a.DRAG]=!1)}a.prevViewport=E,a.clearingMotionBlur&&(a.clearingMotionBlur=!1,a.motionBlurCleared=!0,a.motionBlur=!0),h&&(a.motionBlurTimeout=setTimeout((function(){a.motionBlurTimeout=null,a.clearedForMotionBlur[a.NODE]=!1,a.clearedForMotionBlur[a.DRAG]=!1,a.motionBlur=!1,a.clearingMotionBlur=!f,a.mbFrames=0,l[a.NODE]=!0,l[a.DRAG]=!0,a.redraw()}),100)),e||u.emit("render")};for(var Os={drawPolygonPath:function(t,e,n,r,i,o){var a=r/2,s=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+a*o[0],n+s*o[1]);for(var u=1;u0&&o>0){h.clearRect(0,0,i,o),h.globalCompositeOperation="source-over";var d=this.getCachedZSortedEles();if(t.full)h.translate(-n.x1*u,-n.y1*u),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(n.x1*u,n.y1*u);else{var p=e.pan(),g={x:p.x*u,y:p.y*u};u*=e.zoom(),h.translate(g.x,g.y),h.scale(u,u),this.drawElements(h,d),h.scale(1/u,1/u),h.translate(-g.x,-g.y)}t.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=t.bg,h.rect(0,0,i,o),h.fill())}return f},Rs.png=function(t){return Gs(t,this.bufferCanvasImage(t),"image/png")},Rs.jpg=function(t){return Gs(t,this.bufferCanvasImage(t),"image/jpeg")};var Hs={nodeShapeImpl:function(t,e,n,r,i,o,a){switch(t){case"ellipse":return this.drawEllipsePath(e,n,r,i,o);case"polygon":return this.drawPolygonPath(e,n,r,i,o,a);case"round-polygon":return this.drawRoundPolygonPath(e,n,r,i,o,a);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,n,r,i,o);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,n,r,i,o);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,n,r,i,o);case"barrel":return this.drawBarrelPath(e,n,r,i,o)}}},Fs=Ys,zs=Ys.prototype;function Ys(t){var e=this;e.data={canvases:new Array(zs.CANVAS_LAYERS),contexts:new Array(zs.CANVAS_LAYERS),canvasNeedsRedraw:new Array(zs.CANVAS_LAYERS),bufferCanvases:new Array(zs.BUFFER_COUNT),bufferContexts:new Array(zs.CANVAS_LAYERS)};e.data.canvasContainer=document.createElement("div");var n=e.data.canvasContainer.style;e.data.canvasContainer.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",n.position="relative",n.zIndex="0",n.overflow="hidden";var r=t.cy.container();r.appendChild(e.data.canvasContainer),r.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)";var i={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};d&&d.userAgent.match(/msie|trident|edge/i)&&(i["-ms-touch-action"]="none",i["touch-action"]="none");for(var o=0;o=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(137),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(20))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,n){this.source=t,this.target=e,this.type=n};e.PowerEdge=r;var i=function(){function t(t,e,n,r){var i=this;if(this.linkAccessor=n,this.modules=new Array(t),this.roots=[],r)this.initModulesFromGroup(r);else{this.roots.push(new s);for(var a=0;a=this.R))return this.merge(e.a,e.b,t),!0}},t.prototype.nEdges=function(t,e){var n=t.incoming.intersection(e.incoming),r=t.outgoing.intersection(e.outgoing);return this.R-n.count()-r.count()},t.prototype.getGroupHierarchy=function(t){var e=this,n=[];return function t(e,n,r){e.forAll((function(e){if(e.isLeaf())n.leaves||(n.leaves=[]),n.leaves.push(e.id);else{var i=n;if(e.gid=r.length,!e.isIsland()||e.isPredefined()){if(i={id:e.gid},e.isPredefined())for(var o in e.definition)i[o]=e.definition[o];n.groups||(n.groups=[]),n.groups.push(e.gid),r.push(i)}t(e.children,i,r)}}))}(this.roots[0],{},n),this.allEdges().forEach((function(i){var o=e.modules[i.source],a=e.modules[i.target];t.push(new r(void 0===o.gid?i.source:n[o.gid],void 0===a.gid?i.target:n[a.gid],i.type))})),n},t.prototype.allEdges=function(){var e=[];return t.getEdges(this.roots[0],e),e},t.getEdges=function(e,n){e.forAll((function(e){e.getEdges(n),t.getEdges(e.children,n)}))},t}();e.Configuration=i;var o=function(){function t(t,e,n,r,i){void 0===e&&(e=new u),void 0===n&&(n=new u),void 0===r&&(r=new s),this.id=t,this.outgoing=e,this.incoming=n,this.children=r,this.definition=i}return t.prototype.getEdges=function(t){var e=this;this.outgoing.forAll((function(n,i){n.forAll((function(n){t.push(new r(e.id,n.id,i))}))}))},t.prototype.isLeaf=function(){return 0===this.children.count()},t.prototype.isIsland=function(){return 0===this.outgoing.count()&&0===this.incoming.count()},t.prototype.isPredefined=function(){return void 0!==this.definition},t}();function a(t,e){var n={};for(var r in t)r in e&&(n[r]=t[r]);return n}e.Module=o;var s=function(){function t(){this.table={}}return t.prototype.count=function(){return Object.keys(this.table).length},t.prototype.intersection=function(e){var n=new t;return n.table=a(this.table,e.table),n},t.prototype.intersectionCount=function(t){return this.intersection(t).count()},t.prototype.contains=function(t){return t in this.table},t.prototype.add=function(t){this.table[t.id]=t},t.prototype.remove=function(t){delete this.table[t.id]},t.prototype.forAll=function(t){for(var e in this.table)t(this.table[e])},t.prototype.modules=function(){var t=[];return this.forAll((function(e){e.isPredefined()||t.push(e)})),t},t}();e.ModuleSet=s;var u=function(){function t(){this.sets={},this.n=0}return t.prototype.count=function(){return this.n},t.prototype.contains=function(t){var e=!1;return this.forAllModules((function(n){e||n.id!=t||(e=!0)})),e},t.prototype.add=function(t,e){(t in this.sets?this.sets[t]:this.sets[t]=new s).add(e),++this.n},t.prototype.remove=function(t,e){var n=this.sets[t];n.remove(e),0===n.count()&&delete this.sets[t],--this.n},t.prototype.forAll=function(t){for(var e in this.sets)t(this.sets[e],Number(e))},t.prototype.forAllModules=function(t){this.forAll((function(e,n){return e.forAll(t)}))},t.prototype.intersection=function(e){var n=new t;return this.forAll((function(t,r){if(r in e.sets){var i=t.intersection(e.sets[r]),o=i.count();o>0&&(n.sets[r]=i,n.n+=o)}})),n},t}();e.LinkSets=u,e.getGroups=function(t,e,n,r){for(var o=t.length,a=new i(o,e,n,r);a.greedyMerge(););var s=[],u=a.getGroupHierarchy(s);return s.forEach((function(e){var n=function(n){var r=e[n];"number"==typeof r&&(e[n]=t[r])};n("source"),n("target")})),{groups:u,powerEdges:s}}},function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(){this.findIter=function(t){for(var e=this._root,n=this.iterator();null!==e;){var r=this._comparator(t,e.data);if(0===r)return n._cursor=e,n;n._ancestors.push(e),e=e.get_child(r>0)}return null}}return t.prototype.clear=function(){this._root=null,this.size=0},t.prototype.find=function(t){for(var e=this._root;null!==e;){var n=this._comparator(t,e.data);if(0===n)return e.data;e=e.get_child(n>0)}return null},t.prototype.lowerBound=function(t){return this._bound(t,this._comparator)},t.prototype.upperBound=function(t){var e=this._comparator;return this._bound(t,(function(t,n){return e(n,t)}))},t.prototype.min=function(){var t=this._root;if(null===t)return null;for(;null!==t.left;)t=t.left;return t.data},t.prototype.max=function(){var t=this._root;if(null===t)return null;for(;null!==t.right;)t=t.right;return t.data},t.prototype.iterator=function(){return new a(this)},t.prototype.each=function(t){for(var e,n=this.iterator();null!==(e=n.next());)t(e)},t.prototype.reach=function(t){for(var e,n=this.iterator();null!==(e=n.prev());)t(e)},t.prototype._bound=function(t,e){for(var n=this._root,r=this.iterator();null!==n;){var i=this._comparator(t,n.data);if(0===i)return r._cursor=n,r;r._ancestors.push(n),n=n.get_child(i>0)}for(var o=r._ancestors.length-1;o>=0;--o)if(e(t,(n=r._ancestors[o]).data)>0)return r._cursor=n,r._ancestors.length=o,r;return r._ancestors.length=0,r},t}();e.TreeBase=o;var a=function(){function t(t){this._tree=t,this._ancestors=[],this._cursor=null}return t.prototype.data=function(){return null!==this._cursor?this._cursor.data:null},t.prototype.next=function(){if(null===this._cursor){var t=this._tree._root;null!==t&&this._minNode(t)}else{var e;if(null===this._cursor.right)do{if(e=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.right===e);else this._ancestors.push(this._cursor),this._minNode(this._cursor.right)}return null!==this._cursor?this._cursor.data:null},t.prototype.prev=function(){if(null===this._cursor){var t=this._tree._root;null!==t&&this._maxNode(t)}else{var e;if(null===this._cursor.left)do{if(e=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.left===e);else this._ancestors.push(this._cursor),this._maxNode(this._cursor.left)}return null!==this._cursor?this._cursor.data:null},t.prototype._minNode=function(t){for(;null!==t.left;)this._ancestors.push(t),t=t.left;this._cursor=t},t.prototype._maxNode=function(t){for(;null!==t.right;)this._ancestors.push(t),t=t.right;this._cursor=t},t}();e.Iterator=a;var s=function(){function t(t){this.data=t,this.left=null,this.right=null,this.red=!0}return t.prototype.get_child=function(t){return t?this.right:this.left},t.prototype.set_child=function(t,e){t?this.right=e:this.left=e},t}(),u=function(t){function e(e){var n=t.call(this)||this;return n._root=null,n._comparator=e,n.size=0,n}return i(e,t),e.prototype.insert=function(t){var n=!1;if(null===this._root)this._root=new s(t),n=!0,this.size++;else{var r=new s(void 0),i=!1,o=!1,a=null,u=r,c=null,l=this._root;for(u.right=this._root;;){if(null===l?(l=new s(t),c.set_child(i,l),n=!0,this.size++):e.is_red(l.left)&&e.is_red(l.right)&&(l.red=!0,l.left.red=!1,l.right.red=!1),e.is_red(l)&&e.is_red(c)){var f=u.right===a;l===c.get_child(o)?u.set_child(f,e.single_rotate(a,!o)):u.set_child(f,e.double_rotate(a,!o))}var h=this._comparator(l.data,t);if(0===h)break;o=i,i=h<0,null!==a&&(u=a),a=c,c=l,l=l.get_child(i)}this._root=r.right}return this._root.red=!1,n},e.prototype.remove=function(t){if(null===this._root)return!1;var n=new s(void 0),r=n;r.right=this._root;for(var i=null,o=null,a=null,u=!0;null!==r.get_child(u);){var c=u;o=i,i=r,r=r.get_child(u);var l=this._comparator(t,r.data);if(u=l>0,0===l&&(a=r),!e.is_red(r)&&!e.is_red(r.get_child(u)))if(e.is_red(r.get_child(!u))){var f=e.single_rotate(r,u);i.set_child(c,f),i=f}else if(!e.is_red(r.get_child(!u))){var h=i.get_child(!c);if(null!==h)if(e.is_red(h.get_child(!c))||e.is_red(h.get_child(c))){var d=o.right===i;e.is_red(h.get_child(c))?o.set_child(d,e.double_rotate(i,c)):e.is_red(h.get_child(!c))&&o.set_child(d,e.single_rotate(i,c));var p=o.get_child(d);p.red=!0,r.red=!0,p.left.red=!1,p.right.red=!1}else i.red=!1,h.red=!0,r.red=!0}}return null!==a&&(a.data=r.data,i.set_child(i.right===r,r.get_child(null===r.left)),this.size--),this._root=n.right,null!==this._root&&(this._root.red=!1),null!==a},e.is_red=function(t){return null!==t&&t.red},e.single_rotate=function(t,e){var n=t.get_child(!e);return t.set_child(!e,n.get_child(e)),n.set_child(e,t),t.red=!0,n.red=!1,n},e.double_rotate=function(t,n){return t.set_child(!n,e.single_rotate(t.get_child(!n),!n)),e.single_rotate(t,n)},e}(o);e.RBTree=u},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.elem=t,this.subheaps=[]}return t.prototype.toString=function(t){for(var e="",n=!1,r=0;r0}function f(t,e,n){return c(t,e,n)<0}function h(t,e){var n,r,i,o,a=e.length-1;if(f(t,e[1],e[0])&&!l(t,e[a-1],e[0]))return 0;for(n=0,r=a;;){if(r-n==1)return l(t,e[n],e[r])?n:r;if((o=f(t,e[(i=Math.floor((n+r)/2))+1],e[i]))&&!l(t,e[i-1],e[i]))return i;l(t,e[n+1],e[n])?o||l(t,e[n],e[i])?r=i:n=i:o&&f(t,e[n],e[i])?r=i:n=i}}function d(t,e){var n,r,i,o,a=e.length-1;if(l(t,e[a-1],e[0])&&!f(t,e[1],e[0]))return 0;for(n=0,r=a;;){if(r-n==1)return f(t,e[n],e[r])?n:r;if(o=f(t,e[(i=Math.floor((n+r)/2))+1],e[i]),l(t,e[i-1],e[i])&&!o)return i;f(t,e[n+1],e[n])?o?f(t,e[n],e[i])?r=i:n=i:r=i:o?n=i:l(t,e[n],e[i])?r=i:n=i}}function p(t,e,n,r,i,o){var a,s;s=r(t[a=n(e[0],t)],e);for(var u=!1;!u;){for(u=!0;a===t.length-1&&(a=0),!i(e[s],t[a],t[a+1]);)++a;for(;0===s&&(s=e.length-1),!o(t[a],e[s],e[s-1]);)--s,u=!1}return{t1:a,t2:s}}function g(t,e){return p(t,e,h,d,l,f)}e.PolyPoint=u,e.isLeft=c,e.ConvexHull=function(t){var e,n=t.slice(0).sort((function(t,e){return t.x!==e.x?e.x-t.x:e.y-t.y})),r=t.length,i=n[0].x;for(e=1;e=0&&n[e].x===l;e--);for(s=e+1,e=o;++e<=s;)if(!(c(n[0],n[s],n[e])>=0&&e1&&!(c(a[a.length-2],a[a.length-1],n[e])>0);)a.length-=1;0!=e&&a.push(n[e])}u!=s&&a.push(n[u]);var f=a.length;for(e=s;--e>=o;)if(!(c(n[u],n[o],n[e])>=0&&e>o)){for(;a.length>f&&!(c(a[a.length-2],a[a.length-1],n[e])>0);)a.length-=1;0!=e&&a.push(n[e])}}return a},e.clockwiseRadialSweep=function(t,e,n){e.slice(0).sort((function(e,n){return Math.atan2(e.y-t.y,e.x-t.x)-Math.atan2(n.y-t.y,n.x-t.x)})).forEach(n)},e.tangent_PolyPolyC=p,e.LRtangent_PolyPolyC=function(t,e){var n=g(e,t);return{t1:n.t2,t2:n.t1}},e.RLtangent_PolyPolyC=g,e.LLtangent_PolyPolyC=function(t,e){return p(t,e,d,d,f,f)},e.RRtangent_PolyPolyC=function(t,e){return p(t,e,h,h,l,l)};var v=function(t,e){this.t1=t,this.t2=e};e.BiTangent=v;var b=function(){};e.BiTangents=b;var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(a);e.TVGPoint=y;var w=function(t,e,n,r){this.id=t,this.polyid=e,this.polyvertid=n,this.p=r,r.vv=this};e.VisibilityVertex=w;var m=function(){function t(t,e){this.source=t,this.target=e}return t.prototype.length=function(){var t=this.source.p.x-this.target.p.x,e=this.source.p.y-this.target.p.y;return Math.sqrt(t*t+e*e)},t}();e.VisibilityEdge=m;var x=function(){function t(t,e){if(this.P=t,this.V=[],this.E=[],e)this.V=e.V.slice(0),this.E=e.E.slice(0);else{for(var n=t.length,r=0;r0&&this.E.push(new m(i[o-1].vv,s))}i.length>1&&this.E.push(new m(i[0].vv,i[i.length-1].vv))}for(r=0;r0)return!0;return!1},t}();function _(t,e){for(var n=[],r=1,i=e.length;r=0&&g>=0&&y<0&&w>=0&&m>=0&&x<0?i.ll=new v(o,a):p<=0&&g<=0&&y>0&&w<=0&&m<=0&&x>0?i.rr=new v(o,a):p<=0&&g>0&&y<=0&&w>=0&&m<0&&x>=0?i.rl=new v(o,a):p>=0&&g<0&&y>=0&&w<=0&&m>0&&x<=0&&(i.lr=new v(o,a))}return i}function k(t,e){return!t.every((function(t){return!function(t,e){for(var n=1,r=e.length;n0)return!0}return!1}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=10,i=(1+Math.sqrt(5))/2,o=1e-4;e.applyPacking=function(t,e,n,a,s,u){void 0===s&&(s=1),void 0===u&&(u=!0);var c=e,l=n,f=(s=void 0!==s?s:1,a=void 0!==a?a:0,0),h=0,d=0,p=0,g=[];function v(t,e){g=[],f=0,h=0,p=0;for(var n=0;n=t.height&&g[i].x+g[i].width+t.width+r-e<=o){n=g[i];break}g.push(t),void 0!==n?(t.x=n.x+n.width+r,t.y=n.bottom,t.space_left=t.height,t.bottom=t.y,n.space_left-=t.height+r,n.bottom+=t.height+r):(t.y=p,p+=t.height+r,t.x=0,t.bottom=t.y,t.space_left=t.height),t.y+t.height-h>-o&&(h=t.y+t.height-0),t.x+t.width-f>-o&&(f=t.x+t.width-0)}0!=t.length&&(function(t){t.forEach((function(t){var e,n,r,i,o;e=t,n=Number.MAX_VALUE,r=Number.MAX_VALUE,i=0,o=0,e.array.forEach((function(t){var e=void 0!==t.width?t.width:a,s=void 0!==t.height?t.height:a;e/=2,s/=2,i=Math.max(t.x+e,i),n=Math.min(t.x-e,n),o=Math.max(t.y+s,o),r=Math.min(t.y-s,r)})),e.width=i-n,e.height=o-r}))}(t),function(t,e){var n=Number.POSITIVE_INFINITY,a=0;t.sort((function(t,e){return e.height-t.height})),d=t.reduce((function(t,e){return t.widthd||g>o;){if(1!=h){var b=u-(u-s)/i;l=v(t,b)}if(0!=h){var y=s+(u-s)/i;f=v(t,y)}if(p=Math.abs(b-y),g=Math.abs(l-f),lf?(s=b,b=y,l=f,h=1):(u=y,y=b,f=l,h=0),c++>100)break}v(t,a)}(t),u&&function(t){t.forEach((function(t){var e={x:0,y:0};t.array.forEach((function(t){e.x+=t.x,e.y+=t.y})),e.x/=t.array.length,e.y/=t.array.length;var n=e.x-t.width/2,r=e.y-t.height/2,i=t.x-n+c/2-f/2,o=t.y-r+l/2-h/2;t.array.forEach((function(t){t.x+=i,t.y+=o}))}))}(t))},e.separateGraphs=function(t,e){for(var n={},r={},i=[],o=0,a=0;a=o.length?(this.length=r.length,this.si=r.si,this.ti=r.ti,this.reversed=!1):(this.length=o.length,this.si=o.si,this.ti=n.length-o.ti-o.length,this.reversed=!0)}return t.findMatch=function(t,e){for(var n=t.length,r=e.length,i={length:0,si:-1,ti:-1},o=new Array(n),a=0;ai.length&&(i.length=u,i.si=a-u+1,i.ti=s-u+1)}else o[a][s]=0}return i},t.prototype.getSequence=function(){return this.length>=0?this.s.slice(this.si,this.si+this.length):[]},t}();e.LongestCommonSubsequence=u;var c=function(){function t(t,e,n){var i=this;void 0===n&&(n=12),this.originalnodes=t,this.groupPadding=n,this.leaves=null,this.nodes=t.map((function(t,n){return new a(n,e.getBounds(t),e.getChildren(t))})),this.leaves=this.nodes.filter((function(t){return t.leaf})),this.groups=this.nodes.filter((function(t){return!t.leaf})),this.cols=this.getGridLines("x"),this.rows=this.getGridLines("y"),this.groups.forEach((function(t){return t.children.forEach((function(e){return i.nodes[e].parent=t}))})),this.root={children:[]},this.nodes.forEach((function(t){void 0===t.parent&&(t.parent=i.root,i.root.children.push(t.id)),t.ports=[]})),this.backToFront=this.nodes.slice(0),this.backToFront.sort((function(t,e){return i.getDepth(t)-i.getDepth(e)})),this.backToFront.slice(0).reverse().filter((function(t){return!t.leaf})).forEach((function(t){var e=r.Rectangle.empty();t.children.forEach((function(t){return e=e.union(i.nodes[t].rect)})),t.rect=e.inflate(i.groupPadding)}));var o=this.midPoints(this.cols.map((function(t){return t.pos}))),u=this.midPoints(this.rows.map((function(t){return t.pos}))),c=o[0],l=o[o.length-1],f=u[0],h=u[u.length-1],d=this.rows.map((function(t){return{x1:c,x2:l,y1:t.pos,y2:t.pos}})).concat(u.map((function(t){return{x1:c,x2:l,y1:t,y2:t}}))),p=this.cols.map((function(t){return{x1:t.pos,x2:t.pos,y1:f,y2:h}})).concat(o.map((function(t){return{x1:t,x2:t,y1:f,y2:h}}))),g=d.concat(p);g.forEach((function(t){return t.verts=[]})),this.verts=[],this.edges=[],d.forEach((function(t){return p.forEach((function(e){var n=new s(i.verts.length,e.x1,t.y1);t.verts.push(n),e.verts.push(n),i.verts.push(n);for(var r=i.backToFront.length;r-- >0;){var o=i.backToFront[r],a=o.rect,u=Math.abs(n.x-a.cx()),c=Math.abs(n.y-a.cy());if(u0;){var r=n.filter((function(e){return e.rect["overlap"+t.toUpperCase()](n[0].rect)})),i={nodes:r,pos:this.avg(r.map((function(e){return e.rect["c"+t]()})))};e.push(i),i.nodes.forEach((function(t){return n.splice(n.indexOf(t),1)}))}return e.sort((function(t,e){return t.pos-e.pos})),e},t.prototype.getDepth=function(t){for(var e=0;t.parent!==this.root;)e++,t=t.parent;return e},t.prototype.midPoints=function(t){for(var e=t[1]-t[0],n=[t[0]-e/2],r=1;r.1)&&(c={pos:f[0][e],segments:[]},u.push(c)),c.segments.push(f)}return u},t.nudgeSegs=function(t,e,n,r,o,a){var s=r.length;if(!(s<=1)){for(var u=r.map((function(e){return new i.Variable(e[0][t])})),c=[],l=0;l=0&&c.push(new i.Constraint(u[v],u[b],a))}new i.Solver(u,c).solve(),u.forEach((function(e,i){var o=r[i],a=e.position();o[0][t]=o[1][t]=a;var s=n[o.edgeid];o.i>0&&(s[o.i-1][1][t]=a),o.iMath.PI||i<-Math.PI)&&(i=r-n),i},t.isLeft=function(t,e,n){return(e.x-t.x)*(n.y-t.y)-(e.y-t.y)*(n.x-t.x)<=0},t.getOrder=function(t){for(var e={},n=0;n=c.length||f.ti+f.length>=l.length)?n.push({l:r,r:i}):(f.si+f.length>=c.length||f.ti+f.length>=l.length?(o=c[f.si+1],s=c[f.si-1],a=l[f.ti-1]):(o=c[f.si+f.length-2],a=c[f.si+f.length],s=l[f.ti+f.length]),t.isLeft(o,a,s)?n.push({l:i,r:r}):n.push({l:r,r:i})))}return t.getOrder(n)},t.makeSegments=function(t){function e(t){return{x:t.x,y:t.y}}for(var n=function(t,e,n){return Math.abs((e.x-t.x)*(n.y-t.y)-(e.y-t.y)*(n.x-t.x))<.001},r=[],i=e(t[0]),o=1;o1&&l>1?1e3:0})).reverse().map((function(t){return n.verts[t]}));return l.push(this.nodes[i.id].ports[0]),l.filter((function(t,e){return!(e0&&t.node===i&&l[e-1].node===i)}))},t.getRoutePath=function(e,n,r,i){var o={routepath:"M "+e[0][0].x+" "+e[0][0].y+" ",arrowpath:""};if(e.length>1)for(var a=0;a0?s-=c/Math.abs(c)*n:u-=l/Math.abs(l)*n,o.routepath+="L "+s+" "+u+" ";var f=e[a+1],h=f[0].x,d=f[0].y;c=f[1].x-h,l=f[1].y-d;var p,g,v=t.angleBetween2Lines(m,f)<0?1:0;Math.abs(c)>0?(p=h+c/Math.abs(c)*n,g=d):(p=h,g=d+l/Math.abs(l)*n);var b=Math.abs(p-s),y=Math.abs(g-u);o.routepath+="A "+b+" "+y+" 0 0 "+v+" "+p+" "+g+" "}else{var w=[s,u];Math.abs(c)>0?(x=[s-=c/Math.abs(c)*i,u+r],_=[s,u-r]):(x=[s+r,u-=l/Math.abs(l)*i],_=[s-r,u]),o.routepath+="L "+s+" "+u+" ",i>0&&(o.arrowpath="M "+w[0]+" "+w[1]+" L "+x[0]+" "+x[1]+" L "+_[0]+" "+_[1])}}else{var m,x,_;s=(m=e[0])[1].x,u=m[1].y,c=s-m[0].x,l=u-m[0].y,w=[s,u];Math.abs(c)>0?(x=[s-=c/Math.abs(c)*i,u+r],_=[s,u-r]):(x=[s+r,u-=l/Math.abs(l)*i],_=[s-r,u]),o.routepath+="L "+s+" "+u+" ",i>0&&(o.arrowpath="M "+w[0]+" "+w[1]+" L "+x[0]+" "+x[1]+" L "+_[0]+" "+_[1])}return o},t}();e.GridRouter=c},function(t,e,n){var r=n(30),i=n(53),o=n(35),a=n(188),s=n(194),u=n(84),c=n(85),l=n(197),f=n(198),h=n(89),d=n(199),p=n(18),g=n(203),v=n(204),b=n(94),y=n(1),w=n(16),m=n(208),x=n(4),_=n(210),E=n(10),k={};k["[object Arguments]"]=k["[object Array]"]=k["[object ArrayBuffer]"]=k["[object DataView]"]=k["[object Boolean]"]=k["[object Date]"]=k["[object Float32Array]"]=k["[object Float64Array]"]=k["[object Int8Array]"]=k["[object Int16Array]"]=k["[object Int32Array]"]=k["[object Map]"]=k["[object Number]"]=k["[object Object]"]=k["[object RegExp]"]=k["[object Set]"]=k["[object String]"]=k["[object Symbol]"]=k["[object Uint8Array]"]=k["[object Uint8ClampedArray]"]=k["[object Uint16Array]"]=k["[object Uint32Array]"]=!0,k["[object Error]"]=k["[object Function]"]=k["[object WeakMap]"]=!1,t.exports=function t(e,n,S,C,T,A){var N,O=1&n,L=2&n,P=4&n;if(S&&(N=T?S(e,C,T,A):S(e)),void 0!==N)return N;if(!x(e))return e;var I=y(e);if(I){if(N=g(e),!O)return c(e,N)}else{var j=p(e),M="[object Function]"==j||"[object GeneratorFunction]"==j;if(w(e))return u(e,O);if("[object Object]"==j||"[object Arguments]"==j||M&&!T){if(N=L||M?{}:b(e),!O)return L?f(e,s(N,e)):l(e,a(N,e))}else{if(!k[j])return T?e:{};N=v(e,j,O)}}A||(A=new r);var D=A.get(e);if(D)return D;A.set(e,N),_(e)?e.forEach((function(r){N.add(t(r,n,S,r,e,A))})):m(e)&&e.forEach((function(r,i){N.set(i,t(r,n,S,i,e,A))}));var R=P?L?d:h:L?keysIn:E,B=I?void 0:R(e);return i(B||e,(function(r,i){B&&(r=e[i=r]),o(N,i,t(r,n,S,i,e,A))})),N}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(20))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(11),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(189),i=n(25),o=n(1),a=n(16),s=n(37),u=n(26),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),l=!n&&i(t),f=!n&&!l&&a(t),h=!n&&!l&&!f&&u(t),d=n||l||f||h,p=d?r(t.length,String):[],g=p.length;for(var v in t)!e&&!c.call(t,v)||d&&("length"==v||f&&("offset"==v||"parent"==v)||h&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||s(v,g))||p.push(v);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(6),i=e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(28)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var h=u.get(t);if(h&&u.get(e))return h==e;var d=-1,p=!0,g=2&n?new r:void 0;for(u.set(t,e),u.set(e,t);++d0&&(o=u.removeMin(),(a=s[o]).distance!==Number.POSITIVE_INFINITY);)r(o).forEach(c);return s}(t,String(e),n||o,r||function(e){return t.outEdges(e)})};var o=r.constant(1)},function(t,e,n){var r=n(3);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,o=i.length;return n[t]=o,i.push({key:t,priority:e}),this._decrease(o),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority0&&(this.props.setProps({generateImage:{}}),this._cy&&this.handleImageGeneration(x.type,x.options,x.action,x.filename)),this.cyResponsiveClass&&this.cyResponsiveClass.toggle(_),o.default.createElement(s.default,{id:e,cy:this.handleCy,className:r,style:n,elements:s.default.normalizeElements(i),stylesheet:a,layout:u,pan:c,zoom:l,panningEnabled:f,userPanningEnabled:h,minZoom:d,maxZoom:p,zoomingEnabled:g,userZoomingEnabled:v,boxSelectionEnabled:b,autoungrabify:y,autolock:w,autounselectify:m})}}]),e}(i.Component);f.propTypes={id:a.default.string,className:a.default.string,style:a.default.object,setProps:a.default.func,elements:a.default.oneOfType([a.default.arrayOf(a.default.shape({group:a.default.string,data:a.default.shape({id:a.default.string,label:a.default.string,parent:a.default.string,source:a.default.string,target:a.default.string}),position:a.default.shape({x:a.default.number,y:a.default.number}),selected:a.default.bool,selectable:a.default.bool,locked:a.default.bool,grabbable:a.default.bool,classes:a.default.string})),a.default.exact({nodes:a.default.array,edges:a.default.array})]),stylesheet:a.default.arrayOf(a.default.exact({selector:a.default.string.isRequired,style:a.default.object.isRequired})),layout:a.default.shape({name:a.default.oneOf(["random","preset","circle","concentric","grid","breadthfirst","cose","close-bilkent","cola","euler","spread","dagre","klay"]).isRequired,fit:a.default.bool,padding:a.default.number,animate:a.default.bool,animationDuration:a.default.number,boundingBox:a.default.object}),pan:a.default.exact({x:a.default.number,y:a.default.number}),zoom:a.default.number,panningEnabled:a.default.bool,userPanningEnabled:a.default.bool,minZoom:a.default.number,maxZoom:a.default.number,zoomingEnabled:a.default.bool,userZoomingEnabled:a.default.bool,boxSelectionEnabled:a.default.bool,autoungrabify:a.default.bool,autolock:a.default.bool,autounselectify:a.default.bool,autoRefreshLayout:a.default.bool,tapNode:a.default.exact({edgesData:a.default.object,renderedPosition:a.default.object,timeStamp:a.default.number,classes:a.default.string,data:a.default.object,grabbable:a.default.bool,group:a.default.string,locked:a.default.bool,position:a.default.object,selectable:a.default.bool,selected:a.default.bool,style:a.default.object,ancestorsData:a.default.object,childrenData:a.default.object,descendantsData:a.default.object,parentData:a.default.object,siblingsData:a.default.object,isParent:a.default.bool,isChildless:a.default.bool,isChild:a.default.bool,isOrphan:a.default.bool,relativePosition:a.default.object}),tapNodeData:a.default.object,tapEdge:a.default.exact({isLoop:a.default.bool,isSimple:a.default.bool,midpoint:a.default.object,sourceData:a.default.object,sourceEndpoint:a.default.object,targetData:a.default.object,targetEndpoint:a.default.object,timeStamp:a.default.number,classes:a.default.string,data:a.default.object,grabbable:a.default.bool,group:a.default.string,locked:a.default.bool,selectable:a.default.bool,selected:a.default.bool,style:a.default.object}),tapEdgeData:a.default.object,mouseoverNodeData:a.default.object,mouseoverEdgeData:a.default.object,selectedNodeData:a.default.array,selectedEdgeData:a.default.array,generateImage:a.default.exact({type:a.default.oneOf(["svg","png","jpg","jpeg"]).isRequired,options:a.default.object,action:a.default.oneOf(["store","download","both"]),filename:a.default.string}),imageData:a.default.string,responsive:a.default.bool,persistence:a.default.oneOfType([a.default.bool,a.default.string,a.default.number]),persisted_props:a.default.arrayOf(a.default.oneOf(["elements","stylesheet","layout"])),persistence_type:a.default.oneOf(["local","session","memory"])},f.defaultProps={style:{width:"600px",height:"600px"},layout:{name:"grid"},pan:{x:0,y:0},zoom:1,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:!0,userZoomingEnabled:!0,panningEnabled:!0,userPanningEnabled:!0,boxSelectionEnabled:!1,autolock:!1,autoungrabify:!1,autounselectify:!1,autoRefreshLayout:!0,generateImage:{},imageData:null,responsive:!1,elements:[],persisted_props:[],persistence_type:"local"};var h={extract:function(t){return t},apply:function(t){return t}};f.persistenceTransforms={elements:h,stylesheet:h,layout:h},e.default=f},function(t,e,n){"use strict";var r=n(134);function i(){}function o(){}o.resetWarningCache=i,t.exports=function(){function t(t,e,n,i,o,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function e(){return t}t.isRequired=t;var n={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:o,resetWarningCache:i};return n.PropTypes=n,n}},function(t,e,n){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,e,n){window,t.exports=function(t,e,n,r){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r({}),o=function(t,e){return null==t||null==e};e.hashDiff=function(t,e){return o(t,e)||t.hash()!==e.hash()},e.shallowObjDiff=function(t,e){if(o(t,e)&&(null!=t||null!=e))return!0;if(t===e)return!1;if((void 0===t?"undefined":r(t))!==i||(void 0===e?"undefined":r(e))!==i)return t!==e;var n=Object.keys(t),a=Object.keys(e),s=function(n){return t[n]!==e[n]};return n.length!==a.length||!(!n.some(s)&&!a.some(s))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.get=function(t,e){return null!=t?t[e]:null},e.toJson=function(t){return t},e.forEach=function(t,e){return t.forEach(e)}},function(t,e,n){"use strict";t.exports=n(3).default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0&&t.remove(u),s.length>0&&t.add(s),c.forEach((function(e){var n=e.ele1,o=e.ele2;return l(t,n,o,r,i,a)}))},l=function(t,e,n,r,i,o){var a=i(i(n,"data"),"id"),s=t.getElementById(a),u={};["data","position","selected","selectable","locked","grabbable","classes"].forEach((function(t){var a=i(n,t);o(a,i(e,t))&&(u[t]=r(a))}));var c=i(n,"scratch");o(c,i(e,"scratch"))&&s.scratch(r(c)),Object.keys(u).length>0&&s.json(u)}}])}(n(68),n(136),n(69),n(70))},function(t,e){t.exports=window.ReactDOM},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i,o,a,s,u=1,c={},l=!1,f=t.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(t);h=h&&h.setTimeout?h:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},r=function(t){o.port2.postMessage(t)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(t){var e=f.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):r=function(t){setTimeout(p,0,t)}:(a="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(a)&&p(+e.data.slice(a.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),r=function(e){t.postMessage(a+e,"*")}),h.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n=e||n<0||v&&t-c>=o}function x(){var t=d();if(m(t))return _(t);s=setTimeout(x,function(t){var n=e-(t-u);return v?h(n,o-(t-c)):n}(t))}function _(t){return s=void 0,b&&r?y(t):(r=i=void 0,a)}function E(){var t=d(),n=m(t);if(r=arguments,i=this,u=t,n){if(void 0===s)return w(u);if(v)return s=setTimeout(x,e),y(u)}return void 0===s&&(s=setTimeout(x,e)),a}return e=g(e)||0,p(n)&&(l=!!n.leading,o=(v="maxWait"in n)?f(g(n.maxWait)||0,e):o,b="trailing"in n?!!n.trailing:b),E.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=u=i=s=void 0},E.flush=function(){return void 0===s?a:_(d())},E}}).call(this,n(20))},function(t,e,n){t.exports=n(141)},function(t,e,n){var r,i,o;(function(){var n,a,s,u,c,l,f,h,d,p,g,v,b,y,w;s=Math.floor,p=Math.min,a=function(t,e){return te?1:0},d=function(t,e,n,r,i){var o;if(null==n&&(n=0),null==i&&(i=a),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=t.length);nn;0<=n?e++:e--)c.push(e);return c}.apply(this).reverse()).length;rg;0<=g?++l:--l)v.push(c(t,n));return v},y=function(t,e,n,r){var i,o,s;for(null==r&&(r=a),i=t[n];n>e&&r(i,o=t[s=n-1>>1])<0;)t[n]=o,n=s;return t[n]=i},w=function(t,e,n){var r,i,o,s,u;for(null==n&&(n=a),i=t.length,u=e,o=t[e],r=2*e+1;r diff --git a/dash_cytoscape/metadata.json b/dash_cytoscape/metadata.json index e82ca4d0..24c56680 100644 --- a/dash_cytoscape/metadata.json +++ b/dash_cytoscape/metadata.json @@ -836,6 +836,77 @@ "value": "false", "computed": false } + }, + "persistence": { + "type": { + "name": "union", + "value": [ + { + "name": "bool" + }, + { + "name": "string" + }, + { + "name": "number" + } + ] + }, + "required": false, + "description": "Used to allow user interactions in this component to be persisted when\nthe component - or the page - is refreshed. If `persisted` is truthy and\nhasn't changed from its previous value, any `persisted_props` that the\nuser has changed while using the app will keep those changes, as long as\nthe new prop value also matches what was given originally.\nUsed in conjunction with `persistence_type` and `persisted_props`." + }, + "persisted_props": { + "type": { + "name": "arrayOf", + "value": { + "name": "enum", + "value": [ + { + "value": "'elements'", + "computed": false + }, + { + "value": "'stylesheet'", + "computed": false + }, + { + "value": "'layout'", + "computed": false + } + ] + } + }, + "required": false, + "description": "Properties whose user interactions will persist after refreshing the\ncomponent or the page.", + "defaultValue": { + "value": "[]", + "computed": false + } + }, + "persistence_type": { + "type": { + "name": "enum", + "value": [ + { + "value": "'local'", + "computed": false + }, + { + "value": "'session'", + "computed": false + }, + { + "value": "'memory'", + "computed": false + } + ] + }, + "required": false, + "description": "Where persisted user changes will be stored:\nmemory: only kept in memory, reset on page refresh.\nlocal: window.localStorage, data is kept after the browser quit.\nsession: window.sessionStorage, data is cleared once the browser quit.", + "defaultValue": { + "value": "'local'", + "computed": false + } } } } From bc489472ecc5607bb373320f5843193c5f609226 Mon Sep 17 00:00:00 2001 From: xhlulu Date: Mon, 15 Feb 2021 19:10:37 -0500 Subject: [PATCH 5/5] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 840440cf..f60198d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +# Added +* [Persistence](https://dash.plotly.com/persistence) + ### Changed * Dash has been upgraded to 1.* in requirements.txt and tests/requirements.txt (#123) * React/react-dom have been upgraded to 16.14+ (#117)