UNPKG

ngx-xyflow

Version:

Angular wrapper for the popular xyflow (formerly Reactflow) library

367 lines 80.4 kB
import { Component, ContentChild, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { addEdge, applyEdgeChanges, applyNodeChanges, Background, Controls, MiniMap, ReactFlow, ReactFlowProvider } from '@xyflow/react';
import { ReactifyNgComponent } from 'ngx-reactify';
import * as React from 'react';
import { BackgroundDirective } from './background.directive';
import { ControlsDirective } from './controls.directive';
import { MinimapDirective } from './minimap.directive';
import * as i0 from "@angular/core";
export class XYFlowComponent extends ReactifyNgComponent {
    constructor(ngContainer, ngZone) {
        super(ngContainer, ngZone);
        this._nodesChange = new EventEmitter();
        this._edgesChange = new EventEmitter();
        this.nodeTypes = {}; //XYFlowProps['nodeTypes'] = {};
        this.edgeTypes = {};
        // `as any` casting for the Output properties to inherit the description from the xyflow JSDOC comments.
        // As of now I don't know of a better way to replace the types while keeping the comments.
        // @Output() onBeforeDelete = new EventEmitter<[XYFlowProps['onBeforeDelete']]> as any;
        this.onClickConnectEnd = new EventEmitter;
        this.onClickConnectStart = new EventEmitter;
        this.onConnect = new EventEmitter;
        this.onConnectEnd = new EventEmitter;
        this.onConnectStart = new EventEmitter;
        this.onDelete = new EventEmitter;
        this.onEdgeClick = new EventEmitter;
        this.onEdgeContextMenu = new EventEmitter;
        this.onEdgeDoubleClick = new EventEmitter;
        this.onEdgeMouseEnter = new EventEmitter;
        this.onEdgeMouseLeave = new EventEmitter;
        this.onEdgeMouseMove = new EventEmitter;
        this.onEdgesChange = new EventEmitter;
        this.onEdgesDelete = new EventEmitter;
        this.onError = new EventEmitter;
        this.onInit = new EventEmitter;
        this.onMove = new EventEmitter;
        this.onMoveEnd = new EventEmitter;
        this.onMoveStart = new EventEmitter;
        this.onNodeClick = new EventEmitter;
        this.onNodeContextMenu = new EventEmitter;
        this.onNodeDoubleClick = new EventEmitter;
        this.onNodeDrag = new EventEmitter;
        this.onNodeDragStart = new EventEmitter;
        this.onNodeDragStop = new EventEmitter;
        this.onNodeMouseEnter = new EventEmitter;
        this.onNodeMouseLeave = new EventEmitter;
        this.onNodeMouseMove = new EventEmitter;
        this.onNodesChange = new EventEmitter;
        this.onNodesDelete = new EventEmitter;
        this.onPaneClick = new EventEmitter;
        this.onPaneContextMenu = new EventEmitter;
        this.onPaneMouseEnter = new EventEmitter;
        this.onPaneMouseLeave = new EventEmitter;
        this.onPaneMouseMove = new EventEmitter;
        this.onPaneScroll = new EventEmitter;
        this.onReconnect = new EventEmitter;
        this.onReconnectStart = new EventEmitter;
        this.onReconnectEnd = new EventEmitter;
        this.onSelectionChange = new EventEmitter;
        this.onSelectionContextMenu = new EventEmitter;
        this.onSelectionDrag = new EventEmitter;
        this.onSelectionDragStart = new EventEmitter;
        this.onSelectionDragStop = new EventEmitter;
        this.onSelectionEnd = new EventEmitter;
        this.onSelectionStart = new EventEmitter;
        this.ngReactComponent = ({ props }) => {
            const getProps = (obj = {}) => {
                const props = {};
                Object.entries(obj).forEach(([k, v]) => {
                    // Omit keys prefixed with _
                    if (k.startsWith('_'))
                        return;
                    // Omit event emitter properties
                    if (k.startsWith('on'))
                        return;
                    props[k] = v;
                });
                return props;
            };
            const controlProps = getProps(this._controls);
            const minimapProps = getProps(this._minimap);
            controlProps.onFitView = () => this._controls.onFitView.emit();
            controlProps.onInteractiveChange = (interactiveStatus) => this._controls.onInteractiveChange.emit(interactiveStatus);
            controlProps.onZoomIn = () => this._controls.onZoomIn.emit();
            controlProps.onZoomOut = () => this._controls.onZoomOut.emit();
            minimapProps.onClick = () => this._minimap.onClick.emit();
            minimapProps.onNodeClick = () => this._minimap.onNodeClick.emit();
            const reactDirectives = [
                this._background ? React.createElement(Background, getProps(this._background)) : null,
                this._controls ? React.createElement(Controls, controlProps) : null,
                this._minimap ? React.createElement(MiniMap, minimapProps) : null,
            ].filter(r => r);
            const [nodes, setNodes] = React.useState(this._nodes);
            const [edges, setEdges] = React.useState(this._edges);
            // Store setState functions for use in ngOnChanges
            React.useEffect(() => {
                this._setNodes = setNodes;
                this._setEdges = setEdges;
            }, [setNodes, setEdges]);
            props.onNodesChange = React.useCallback((changes) => setNodes((nds) => {
                const nodes = applyNodeChanges(changes, nds);
                this._nodesChange.emit(this._nodes = nodes);
                return nodes;
            }), []);
            props.onEdgesChange = React.useCallback((changes) => setEdges((eds) => {
                console.log("SED");
                const edges = applyEdgeChanges(changes, eds);
                this._edgesChange.emit(this._edges = edges);
                return edges;
            }), []);
            props.onConnect = React.useCallback((params) => setEdges((eds) => {
                const edges = addEdge(params, eds);
                this._edgesChange.emit(this._edges = edges);
                return edges;
            }), []);
            // Overwrite the property bindings
            props.nodes = nodes;
            props.edges = edges;
            // Effectively outputs this:
            // <ReactFlowProvider>
            //     <ReactFlow props={props}>
            //         <Background/>
            //         <Controls/>
            //         <MiniMap/>
            //     </ReactFlow>
            // </ReactFlowProvider>
            return React.createElement(ReactFlowProvider, { children: [] }, React.createElement(ReactFlow, { ...props, onInit: rf => {
                    this.instance = rf;
                } }, ...reactDirectives));
        };
    }
    ngOnInit() {
    }
    ngAfterViewInit() {
        super.ngAfterViewInit();
    }
    ngOnChanges(changes) {
        if (this._setNodes && changes['_nodes']?.firstChange == false) {
            this._setNodes(changes['_nodes'].currentValue);
        }
        if (this._setEdges && changes['_edges']?.firstChange == false) {
            this._setEdges(changes['_edges'].currentValue);
        }
        super.ngOnChanges();
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: XYFlowComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: XYFlowComponent, selector: "ngx-xyflow", inputs: { _nodes: ["nodes", "_nodes"], _edges: ["edges", "_edges"], defaultEdgeOptions: "defaultEdgeOptions", connectionLineType: "connectionLineType", connectionLineStyle: "connectionLineStyle", connectionLineComponent: "connectionLineComponent", connectionLineContainerStyle: "connectionLineContainerStyle", connectionMode: "connectionMode", deleteKeyCode: "deleteKeyCode", selectionKeyCode: "selectionKeyCode", selectionOnDrag: "selectionOnDrag", selectionMode: "selectionMode", panActivationKeyCode: "panActivationKeyCode", multiSelectionKeyCode: "multiSelectionKeyCode", zoomActivationKeyCode: "zoomActivationKeyCode", snapToGrid: "snapToGrid", snapGrid: "snapGrid", onlyRenderVisibleElements: "onlyRenderVisibleElements", nodesDraggable: "nodesDraggable", nodesConnectable: "nodesConnectable", nodesFocusable: "nodesFocusable", nodeOrigin: "nodeOrigin", edgesFocusable: "edgesFocusable", elementsSelectable: "elementsSelectable", selectNodesOnDrag: "selectNodesOnDrag", panOnDrag: "panOnDrag", minZoom: "minZoom", maxZoom: "maxZoom", defaultViewport: "defaultViewport", translateExtent: "translateExtent", preventScrolling: "preventScrolling", nodeExtent: "nodeExtent", defaultMarkerColor: "defaultMarkerColor", zoomOnScroll: "zoomOnScroll", zoomOnPinch: "zoomOnPinch", panOnScroll: "panOnScroll", panOnScrollSpeed: "panOnScrollSpeed", panOnScrollMode: "panOnScrollMode", zoomOnDoubleClick: "zoomOnDoubleClick", noDragClassName: "noDragClassName", noWheelClassName: "noWheelClassName", noPanClassName: "noPanClassName", fitView: "fitView", fitViewOptions: "fitViewOptions", connectOnClick: "connectOnClick", attributionPosition: "attributionPosition", proOptions: "proOptions", elevateNodesOnSelect: "elevateNodesOnSelect", elevateEdgesOnSelect: "elevateEdgesOnSelect", disableKeyboardA11y: "disableKeyboardA11y", autoPanOnNodeDrag: "autoPanOnNodeDrag", autoPanOnConnect: "autoPanOnConnect", connectionRadius: "connectionRadius" }, outputs: { _nodesChange: "nodesChange", _edgesChange: "edgesChange", onClickConnectEnd: "onClickConnectEnd", onClickConnectStart: "onClickConnectStart", onConnect: "onConnect", onConnectEnd: "onConnectEnd", onConnectStart: "onConnectStart", onDelete: "onDelete", onEdgeClick: "onEdgeClick", onEdgeContextMenu: "onEdgeContextMenu", onEdgeDoubleClick: "onEdgeDoubleClick", onEdgeMouseEnter: "onEdgeMouseEnter", onEdgeMouseLeave: "onEdgeMouseLeave", onEdgeMouseMove: "onEdgeMouseMove", onEdgesChange: "onEdgesChange", onEdgesDelete: "onEdgesDelete", onError: "onError", onInit: "onInit", onMove: "onMove", onMoveEnd: "onMoveEnd", onMoveStart: "onMoveStart", onNodeClick: "onNodeClick", onNodeContextMenu: "onNodeContextMenu", onNodeDoubleClick: "onNodeDoubleClick", onNodeDrag: "onNodeDrag", onNodeDragStart: "onNodeDragStart", onNodeDragStop: "onNodeDragStop", onNodeMouseEnter: "onNodeMouseEnter", onNodeMouseLeave: "onNodeMouseLeave", onNodeMouseMove: "onNodeMouseMove", onNodesChange: "onNodesChange", onNodesDelete: "onNodesDelete", onPaneClick: "onPaneClick", onPaneContextMenu: "onPaneContextMenu", onPaneMouseEnter: "onPaneMouseEnter", onPaneMouseLeave: "onPaneMouseLeave", onPaneMouseMove: "onPaneMouseMove", onPaneScroll: "onPaneScroll", onReconnect: "onReconnect", onReconnectStart: "onReconnectStart", onReconnectEnd: "onReconnectEnd", onSelectionChange: "onSelectionChange", onSelectionContextMenu: "onSelectionContextMenu", onSelectionDrag: "onSelectionDrag", onSelectionDragStart: "onSelectionDragStart", onSelectionDragStop: "onSelectionDragStop", onSelectionEnd: "onSelectionEnd", onSelectionStart: "onSelectionStart" }, queries: [{ propertyName: "_background", first: true, predicate: BackgroundDirective, descendants: true }, { propertyName: "_controls", first: true, predicate: ControlsDirective, descendants: true }, { propertyName: "_minimap", first: true, predicate: MinimapDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [".react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}\n"], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: XYFlowComponent, decorators: [{
            type: Component,
            args: [{ selector: 'ngx-xyflow', template: '', encapsulation: ViewEncapsulation.None, styles: [".react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}\n"] }]
        }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.NgZone }], propDecorators: { _nodes: [{
                type: Input,
                args: ["nodes"]
            }], _nodesChange: [{
                type: Output,
                args: ["nodesChange"]
            }], _edges: [{
                type: Input,
                args: ["edges"]
            }], _edgesChange: [{
                type: Output,
                args: ["edgesChange"]
            }], defaultEdgeOptions: [{
                type: Input
            }], connectionLineType: [{
                type: Input
            }], connectionLineStyle: [{
                type: Input
            }], connectionLineComponent: [{
                type: Input
            }], connectionLineContainerStyle: [{
                type: Input
            }], connectionMode: [{
                type: Input
            }], deleteKeyCode: [{
                type: Input
            }], selectionKeyCode: [{
                type: Input
            }], selectionOnDrag: [{
                type: Input
            }], selectionMode: [{
                type: Input
            }], panActivationKeyCode: [{
                type: Input
            }], multiSelectionKeyCode: [{
                type: Input
            }], zoomActivationKeyCode: [{
                type: Input
            }], snapToGrid: [{
                type: Input
            }], snapGrid: [{
                type: Input
            }], onlyRenderVisibleElements: [{
                type: Input
            }], nodesDraggable: [{
                type: Input
            }], nodesConnectable: [{
                type: Input
            }], nodesFocusable: [{
                type: Input
            }], nodeOrigin: [{
                type: Input
            }], edgesFocusable: [{
                type: Input
            }], elementsSelectable: [{
                type: Input
            }], selectNodesOnDrag: [{
                type: Input
            }], panOnDrag: [{
                type: Input
            }], minZoom: [{
                type: Input
            }], maxZoom: [{
                type: Input
            }], defaultViewport: [{
                type: Input
            }], translateExtent: [{
                type: Input
            }], preventScrolling: [{
                type: Input
            }], nodeExtent: [{
                type: Input
            }], defaultMarkerColor: [{
                type: Input
            }], zoomOnScroll: [{
                type: Input
            }], zoomOnPinch: [{
                type: Input
            }], panOnScroll: [{
                type: Input
            }], panOnScrollSpeed: [{
                type: Input
            }], panOnScrollMode: [{
                type: Input
            }], zoomOnDoubleClick: [{
                type: Input
            }], noDragClassName: [{
                type: Input
            }], noWheelClassName: [{
                type: Input
            }], noPanClassName: [{
                type: Input
            }], fitView: [{
                type: Input
            }], fitViewOptions: [{
                type: Input
            }], connectOnClick: [{
                type: Input
            }], attributionPosition: [{
                type: Input
            }], proOptions: [{
                type: Input
            }], elevateNodesOnSelect: [{
                type: Input
            }], elevateEdgesOnSelect: [{
                type: Input
            }], disableKeyboardA11y: [{
                type: Input
            }], autoPanOnNodeDrag: [{
                type: Input
            }], autoPanOnConnect: [{
                type: Input
            }], connectionRadius: [{
                type: Input
            }], onClickConnectEnd: [{
                type: Output
            }], onClickConnectStart: [{
                type: Output
            }], onConnect: [{
                type: Output
            }], onConnectEnd: [{
                type: Output
            }], onConnectStart: [{
                type: Output
            }], onDelete: [{
                type: Output
            }], onEdgeClick: [{
                type: Output
            }], onEdgeContextMenu: [{
                type: Output
            }], onEdgeDoubleClick: [{
                type: Output
            }], onEdgeMouseEnter: [{
                type: Output
            }], onEdgeMouseLeave: [{
                type: Output
            }], onEdgeMouseMove: [{
                type: Output
            }], onEdgesChange: [{
                type: Output
            }], onEdgesDelete: [{
                type: Output
            }], onError: [{
                type: Output
            }], onInit: [{
                type: Output
            }], onMove: [{
                type: Output
            }], onMoveEnd: [{
                type: Output
            }], onMoveStart: [{
                type: Output
            }], onNodeClick: [{
                type: Output
            }], onNodeContextMenu: [{
                type: Output
            }], onNodeDoubleClick: [{
                type: Output
            }], onNodeDrag: [{
                type: Output
            }], onNodeDragStart: [{
                type: Output
            }], onNodeDragStop: [{
                type: Output
            }], onNodeMouseEnter: [{
                type: Output
            }], onNodeMouseLeave: [{
                type: Output
            }], onNodeMouseMove: [{
                type: Output
            }], onNodesChange: [{
                type: Output
            }], onNodesDelete: [{
                type: Output
            }], onPaneClick: [{
                type: Output
            }], onPaneContextMenu: [{
                type: Output
            }], onPaneMouseEnter: [{
                type: Output
            }], onPaneMouseLeave: [{
                type: Output
            }], onPaneMouseMove: [{
                type: Output
            }], onPaneScroll: [{
                type: Output
            }], onReconnect: [{
                type: Output
            }], onReconnectStart: [{
                type: Output
            }], onReconnectEnd: [{
                type: Output
            }], onSelectionChange: [{
                type: Output
            }], onSelectionContextMenu: [{
                type: Output
            }], onSelectionDrag: [{
                type: Output
            }], onSelectionDragStart: [{
                type: Output
            }], onSelectionDragStop: [{
                type: Output
            }], onSelectionEnd: [{
                type: Output
            }], onSelectionStart: [{
                type: Output
            }], _background: [{
                type: ContentChild,
                args: [BackgroundDirective]
            }], _controls: [{
                type: ContentChild,
                args: [ControlsDirective]
            }], _minimap: [{
                type: ContentChild,
                args: [MinimapDirective]
            }] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHlmbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy94eWZsb3cveHlmbG93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsRUFHVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVl2RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUE2TnBELFlBQ0ksV0FBNkIsRUFDN0IsTUFBYztRQUVkLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUE5TlIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUd4RCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBSS9FLGNBQVMsR0FBUSxFQUFFLENBQUUsQ0FBQyxnQ0FBZ0M7UUFDdEQsY0FBUyxHQUE2QixFQUFFLENBQUM7UUF1RHpDLHdHQUF3RztRQUN4RywwRkFBMEY7UUFFMUYsdUZBQXVGO1FBQzdFLHNCQUFpQixHQUFHLElBQUksWUFBdUQsQ0FBQztRQUNoRix3QkFBbUIsR0FBRyxJ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ZTtzQkFBeEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHNEIsV0FBVztzQkFBN0MsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQ0EsU0FBUztzQkFBekMsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBQ0MsUUFBUTtzQkFBdkMsWUFBWTt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgYWRkRWRnZSxcbiAgICBhcHBseUVkZ2VDaGFuZ2VzLFxuICAgIGFwcGx5Tm9kZUNoYW5nZXMsXG4gICAgQmFja2dyb3VuZCxcbiAgICBDb250cm9scyxcbiAgICBNaW5pTWFwLFxuICAgIFJlYWN0RmxvdyxcbiAgICBSZWFjdEZsb3dJbnN0YW5jZSxcbiAgICBSZWFjdEZsb3dQcm9wcyxcbiAgICBSZWFjdEZsb3dQcm92aWRlclxufSBmcm9tICdAeHlmbG93L3JlYWN0JztcbmltcG9ydCB7IFJlYWN0aWZ5TmdDb21wb25lbnQgfSBmcm9tICduZ3gtcmVhY3RpZnknO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4vYmFja2dyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udHJvbHNEaXJlY3RpdmUgfSBmcm9tICcuL2NvbnRyb2xzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNaW5pbWFwRGlyZWN0aXZlIH0gZnJvbSAnLi9taW5pbWFwLmRpcmVjdGl2ZSc7XG5cbnR5cGUgWFlGbG93UHJvcHMgPSBSZWFjdEZsb3dQcm9wczxhbnksIGFueT47XG50eXBlIE92ZXJyaWRkZW5Qcm9wcyA9ICdvbkJlZm9yZURlbGV0ZScgfCAnb25DbGlja0Nvbm5lY3RFbmQnIHwgJ29uQ2xpY2tDb25uZWN0U3RhcnQnIHwgJ29uQ29ubmVjdCcgfCAnb25Db25uZWN0RW5kJyB8ICdvbkNvbm5lY3RTdGFydCcgfCAnb25EZWxldGUnIHwgJ29uRWRnZUNsaWNrJyB8ICdvbkVkZ2VDb250ZXh0TWVudScgfCAnb25FZGdlRG91YmxlQ2xpY2snIHwgJ29uRWRnZU1vdXNlRW50ZXInIHwgJ29uRWRnZU1vdXNlTGVhdmUnIHwgJ29uRWRnZU1vdXNlTW92ZScgfCAnb25FZGdlc0NoYW5nZScgfCAnb25FZGdlc0RlbGV0ZScgfCAnb25FcnJvcicgfCAnb25Jbml0JyB8ICdvbk1vdmUnIHwgJ29uTW92ZUVuZCcgfCAnb25Nb3ZlU3RhcnQnIHwgJ29uTm9kZUNsaWNrJyB8ICdvbk5vZGVDb250ZXh0TWVudScgfCAnb25Ob2RlRG91YmxlQ2xpY2snIHwgJ29uTm9kZURyYWcnIHwgJ29uTm9kZURyYWdTdGFydCcgfCAnb25Ob2RlRHJhZ1N0b3AnIHwgJ29uTm9kZU1vdXNlRW50ZXInIHwgJ29uTm9kZU1vdXNlTGVhdmUnIHwgJ29uTm9kZU1vdXNlTW92ZScgfCAnb25Ob2Rlc0NoYW5nZScgfCAnb25Ob2Rlc0RlbGV0ZScgfCAnb25QYW5lQ2xpY2snIHwgJ29uUGFuZUNvbnRleHRNZW51JyB8ICdvblBhbmVNb3VzZUVudGVyJyB8ICdvblBhbmVNb3VzZUxlYXZlJyB8ICdvblBhbmVNb3VzZU1vdmUnIHwgJ29uUGFuZVNjcm9sbCcgfCAnb25SZWNvbm5lY3QnIHwgJ29uUmVjb25uZWN0U3RhcnQnIHwgJ29uUmVjb25uZWN0RW5kJyB8ICdvblNlbGVjdGlvbkNoYW5nZScgfCAnb25TZWxlY3Rpb25Db250ZXh0TWVudScgfCAnb25TZWxlY3Rpb25EcmFnJyB8ICdvblNlbGVjdGlvbkRyYWdTdGFydCcgfCAnb25TZWxlY3Rpb25EcmFnU3RvcCcgfCAnb25TZWxlY3Rpb25FbmQnIHwgJ29uU2VsZWN0aW9uU3RhcnQnO1xudHlwZSBJbmhlcml0ZWRYWUZsb3dQcm9wcyA9IE9taXQ8WFlGbG93UHJvcHMsIE92ZXJyaWRkZW5Qcm9wcz47XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LXh5ZmxvdycsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9ub2RlX21vZHVsZXMvQHh5Zmxvdy9yZWFjdC9kaXN0L3N0eWxlLmNzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgWFlGbG93Q29tcG9uZW50IGV4dGVuZHMgUmVhY3RpZnlOZ0NvbXBvbmVudCBpbXBsZW1lbnRzIFhZRmxvd1Byb3BzLCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KFwibm9kZXNcIikgX25vZGVzOiBYWUZsb3dQcm9wc1snbm9kZXMnXTtcbiAgICBAT3V0cHV0KFwibm9kZXNDaGFuZ2VcIikgX25vZGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxYWUZsb3dQcm9wc1snbm9kZXMnXT4oKTtcblxuICAgIEBJbnB1dChcImVkZ2VzXCIpIF9lZGdlczogWFlGbG93UHJvcHNbJ2VkZ2VzJ107XG4gICAgQE91dHB1dChcImVkZ2VzQ2hhbmdlXCIpIF9lZGdlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8WFlGbG93UHJvcHNbJ2VkZ2VzJ10+KCk7XG5cbiAgICBASW5wdXQoKSBkZWZhdWx0RWRnZU9wdGlvbnM6IFhZRmxvd1Byb3BzWydkZWZhdWx0RWRnZU9wdGlvbnMnXTtcblxuICAgIG5vZGVUeXBlczogYW55ID0ge30gOyAvL1hZRmxvd1Byb3BzWydub2RlVHlwZXMnXSA9IHt9O1xuICAgIGVkZ2VUeXBlczogWFlGbG93UHJvcHNbJ2VkZ2VUeXBlcyddID0ge307XG5cbiAgICBpbnN0YW5jZTogUmVhY3RGbG93SW5zdGFuY2U7XG5cbiAgICBASW5wdXQoKSBjb25uZWN0aW9uTGluZVR5cGU6IFhZRmxvd1Byb3BzWydjb25uZWN0aW9uTGluZVR5cGUnXTtcbiAgICBASW5wdXQoKSBjb25uZWN0aW9uTGluZVN0eWxlOiBYWUZsb3dQcm9wc1snY29ubmVjdGlvbkxpbmVTdHlsZSddO1xuICAgIEBJbnB1dCgpIGNvbm5lY3Rpb25MaW5lQ29tcG9uZW50OiBYWUZsb3dQcm9wc1snY29ubmVjdGlvbkxpbmVDb21wb25lbnQnXTtcbiAgICBASW5wdXQoKSBjb25uZWN0aW9uTGluZUNvbnRhaW5lclN0eWxlOiBYWUZsb3dQcm9wc1snY29ubmVjdGlvbkxpbmVDb250YWluZXJTdHlsZSddO1xuICAgIEBJbnB1dCgpIGNvbm5lY3Rpb25Nb2RlOiBYWUZsb3dQcm9wc1snY29ubmVjdGlvbk1vZGUnXTtcbiAgICBASW5wdXQoKSBkZWxldGVLZXlDb2RlOiBYWUZsb3dQcm9wc1snZGVsZXRlS2V5Q29kZSddO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbktleUNvZGU6IFhZRmxvd1Byb3BzWydzZWxlY3Rpb25LZXlDb2RlJ107XG4gICAgQElucHV0KCkgc2VsZWN0aW9uT25EcmFnOiBYWUZsb3dQcm9wc1snc2VsZWN0aW9uT25EcmFnJ107XG4gICAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogWFlGbG93UHJvcHNbJ3NlbGVjdGlvbk1vZGUnXTtcbiAgICBASW5wdXQoKSBwYW5BY3RpdmF0aW9uS2V5Q29kZTogWFlGbG93UHJvcHNbJ3BhbkFjdGl2YXRpb25LZXlDb2RlJ107XG4gICAgQElucHV0KCkgbXVsdGlTZWxlY3Rpb25LZXlDb2RlOiBYWUZsb3dQcm9wc1snbXVsdGlTZWxlY3Rpb25LZXlDb2RlJ107XG4gICAgQElucHV0KCkgem9vbUFjdGl2YXRpb25LZXlDb2RlOiBYWUZsb3dQcm9wc1snem9vbUFjdGl2YXRpb25LZXlDb2RlJ107XG4gICAgQElucHV0KCkgc25hcFRvR3JpZDogWFlGbG93UHJvcHNbJ3NuYXBUb0dyaWQnXTtcbiAgICBASW5wdXQoKSBzbmFwR3JpZDogWFlGbG93UHJvcHNbJ3NuYXBHcmlkJ107XG4gICAgQElucHV0KCkgb25seVJlbmRlclZpc2libGVFbGVtZW50czogWFlGbG93UHJvcHNbJ29ubHlSZW5kZXJWaXNpYmxlRWxlbWVudHMnXTtcbiAgICBASW5wdXQoKSBub2Rlc0RyYWdnYWJsZTogWFlGbG93UHJvcHNbJ25vZGVzRHJhZ2dhYmxlJ107XG4gICAgQElucHV0KCkgbm9kZXNDb25uZWN0YWJsZTogWFlGbG93UHJvcHNbJ25vZGVzQ29ubmVjdGFibGUnXTtcbiAgICBASW5wdXQoKSBub2Rlc0ZvY3VzYWJsZTogWFlGbG93UHJvcHNbJ25vZGVzRm9jdXNhYmxlJ107XG4gICAgQElucHV0KCkgbm9kZU9yaWdpbjogWFlGbG93UHJvcHNbJ25vZGVPcmlnaW4nXTtcbiAgICBASW5wdXQoKSBlZGdlc0ZvY3VzYWJsZTogWFlGbG93UHJvcHNbJ2VkZ2VzRm9jdXNhYmxlJ107XG4gICAgQElucHV0KCkgZWxlbWVudHNTZWxlY3RhYmxlOiBYWUZsb3dQcm9wc1snZWxlbWVudHNTZWxlY3RhYmxlJ107XG4gICAgQElucHV0KCkgc2VsZWN0Tm9kZXNPbkRyYWc6IFhZRmxvd1Byb3BzWydzZWxlY3ROb2Rlc09uRHJhZyddO1xuICAgIEBJbnB1dCgpIHBhbk9uRHJhZzogWFlGbG93UHJvcHNbJ3Bhbk9uRHJhZyddO1xuICAgIEBJbnB1dCgpIG1pblpvb206IFhZRmxvd1Byb3BzWydtaW5ab29tJ107XG4gICAgQElucHV0KCkgbWF4Wm9vbTogWFlGbG93UHJvcHNbJ21heFpvb20nXTtcbiAgICBASW5wdXQoKSBkZWZhdWx0Vmlld3BvcnQ6IFhZRmxvd1Byb3BzWydkZWZhdWx0Vmlld3BvcnQnXTtcbiAgICBASW5wdXQoKSB0cmFuc2xhdGVFeHRlbnQ6IFhZRmxvd1Byb3BzWyd0cmFuc2xhdGVFeHRlbnQnXTtcbiAgICBASW5wdXQoKSBwcmV2ZW50U2Nyb2xsaW5nOiBYWUZsb3dQcm9wc1sncHJldmVudFNjcm9sbGluZyddO1xuICAgIEBJbnB1dCgpIG5vZGVFeHRlbnQ6IFhZRmxvd1Byb3BzWydub2RlRXh0ZW50J107XG4gICAgQElucHV0KCkgZGVmYXVsdE1hcmtlckNvbG9yOiBYWUZsb3dQcm9wc1snZGVmYXVsdE1hcmtlckNvbG9yJ107XG4gICAgQElucHV0KCkgem9vbU9uU2Nyb2xsOiBYWUZsb3dQcm9wc1snem9vbU9uU2Nyb2xsJ107XG4gICAgQElucHV0KCkgem9vbU9uUGluY2g6IFhZRmxvd1Byb3BzWyd6b29tT25QaW5jaCddO1xuICAgIEBJbnB1dCgpIHBhbk9uU2Nyb2xsOiBYWUZsb3dQcm9wc1sncGFuT25TY3JvbGwnXTtcbiAgICBASW5wdXQoKSBwYW5PblNjcm9sbFNwZWVkOiBYWUZsb3dQcm9wc1sncGFuT25TY3JvbGxTcGVlZCddO1xuICAgIEBJbnB1dCgpIHBhbk9uU2Nyb2xsTW9kZTogWFlGbG93UHJvcHNbJ3Bhbk9uU2Nyb2xsTW9kZSddO1xuICAgIEBJbnB1dCgpIHpvb21PbkRvdWJsZUNsaWNrOiBYWUZsb3dQcm9wc1snem9vbU9uRG91YmxlQ2xpY2snXTtcbiAgICBASW5wdXQoKSBub0RyYWdDbGFzc05hbWU6IFhZRmxvd1Byb3BzWydub0RyYWdDbGFzc05hbWUnXTtcbiAgICBASW5wdXQoKSBub1doZWVsQ2xhc3NOYW1lOiBYWUZsb3dQcm9wc1snbm9XaGVlbENsYXNzTmFtZSddO1xuICAgIEBJbnB1dCgpIG5vUGFuQ2xhc3NOYW1lOiBYWUZsb3dQcm9wc1snbm9QYW5DbGFzc05hbWUnXTtcbiAgICBASW5wdXQoKSBmaXRWaWV3OiBYWUZsb3dQcm9wc1snZml0VmlldyddO1xuICAgIEBJbnB1dCgpIGZpdFZpZXdPcHRpb25zOiBYWUZsb3dQcm9wc1snZml0Vmlld09wdGlvbnMnXTtcbiAgICBASW5wdXQoKSBjb25uZWN0T25DbGljazogWFlGbG93UHJvcHNbJ2Nvbm5lY3RPbkNsaWNrJ107XG4gICAgQElucHV0KCkgYXR0cmlidXRpb25Qb3NpdGlvbjogWFlGbG93UHJvcHNbJ2F0dHJpYnV0aW9uUG9zaXRpb24nXTtcbiAgICBASW5wdXQoKSBwcm9PcHRpb25zOiBYWUZsb3dQcm9wc1sncHJvT3B0aW9ucyddO1xuICAgIEBJbnB1dCgpIGVsZXZhdGVOb2Rlc09uU2VsZWN0OiBYWUZsb3dQcm9wc1snZWxldmF0ZU5vZGVzT25TZWxlY3QnXTtcbiAgICBASW5wdXQoKSBlbGV2YXRlRWRnZXNPblNlbGVjdDogWFlGbG93UHJvcHNbJ2VsZXZhdGVFZGdlc09uU2VsZWN0J107XG4gICAgQElucHV0KCkgZGlzYWJsZUtleWJvYXJkQTExeTogWFlGbG93UHJvcHNbJ2Rpc2FibGVLZXlib2FyZEExMXknXTtcbiAgICBASW5wdXQoKSBhdXRvUGFuT25Ob2RlRHJhZzogWFlGbG93UHJvcHNbJ2F1dG9QYW5Pbk5vZGVEcmFnJ107XG4gICAgQElucHV0KCkgYXV0b1Bhbk9uQ29ubmVjdDogWFlGbG93UHJvcHNbJ2F1dG9QYW5PbkNvbm5lY3QnXTtcbiAgICBASW5wdXQoKSBjb25uZWN0aW9uUmFkaXVzOiBYWUZsb3dQcm9wc1snY29ubmVjdGlvblJhZGl1cyddO1xuXG4gICAgLy8gYGFzIGFueWAgY2FzdGluZyBmb3IgdGhlIE91dHB1dCBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgdGhlIGRlc2NyaXB0aW9uIGZyb20gdGhlIHh5ZmxvdyBKU0RPQyBjb21tZW50cy5cbiAgICAvLyBBcyBvZiBub3cgSSBkb24ndCBrbm93IG9mIGEgYmV0dGVyIHdheSB0byByZXBsYWNlIHRoZSB0eXBlcyB3aGlsZSBrZWVwaW5nIHRoZSBjb21tZW50cy5cblxuICAgIC8vIEBPdXRwdXQoKSBvbkJlZm9yZURlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbkJlZm9yZURlbGV0ZSddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrQ29ubmVjdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbkNsaWNrQ29ubmVjdEVuZCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrQ29ubmVjdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uQ2xpY2tDb25uZWN0U3RhcnQnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25Db25uZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uQ29ubmVjdCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkNvbm5lY3RFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25Db25uZWN0RW5kJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uQ29ubmVjdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uQ29ubmVjdFN0YXJ0J11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRGVsZXRlJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRWRnZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZUNsaWNrJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRWRnZUNvbnRleHRNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZUNvbnRleHRNZW51J11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRWRnZURvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZURvdWJsZUNsaWNrJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRWRnZU1vdXNlRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25FZGdlTW91c2VFbnRlciddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkVkZ2VNb3VzZUxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZU1vdXNlTGVhdmUnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25FZGdlTW91c2VNb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZU1vdXNlTW92ZSddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkVkZ2VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uRWRnZXNDaGFuZ2UnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25FZGdlc0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbkVkZ2VzRGVsZXRlJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25FcnJvciddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25Jbml0J11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uTW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk1vdmUnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25Nb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uTW92ZUVuZCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk1vdmVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk1vdmVTdGFydCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVDbGljayddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVDb250ZXh0TWVudSddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVEb3VibGVDbGljayddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVEcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uTm9kZURyYWcnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25Ob2RlRHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uTm9kZURyYWdTdGFydCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVEcmFnU3RvcCA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVEcmFnU3RvcCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvbk5vZGVNb3VzZUVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uTm9kZU1vdXNlRW50ZXInXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25Ob2RlTW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVNb3VzZUxlYXZlJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uTm9kZU1vdXNlTW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVNb3VzZU1vdmUnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25Ob2Rlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvbk5vZGVzQ2hhbmdlJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uTm9kZXNEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25Ob2Rlc0RlbGV0ZSddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvblBhbmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblBhbmVDbGljayddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvblBhbmVDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblBhbmVDb250ZXh0TWVudSddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvblBhbmVNb3VzZUVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uUGFuZU1vdXNlRW50ZXInXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25QYW5lTW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblBhbmVNb3VzZUxlYXZlJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uUGFuZU1vdXNlTW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblBhbmVNb3VzZU1vdmUnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25QYW5lU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uUGFuZVNjcm9sbCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvblJlY29ubmVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblJlY29ubmVjdCddXT4gYXMgYW55O1xuICAgIEBPdXRwdXQoKSBvblJlY29ubmVjdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uUmVjb25uZWN0U3RhcnQnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25SZWNvbm5lY3RFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25SZWNvbm5lY3RFbmQnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25TZWxlY3Rpb25DaGFuZ2UnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25Db250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblNlbGVjdGlvbkNvbnRleHRNZW51J11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uRHJhZyA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblNlbGVjdGlvbkRyYWcnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25EcmFnU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25TZWxlY3Rpb25EcmFnU3RhcnQnXV0+IGFzIGFueTtcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25EcmFnU3RvcCA9IG5ldyBFdmVudEVtaXR0ZXI8W1hZRmxvd1Byb3BzWydvblNlbGVjdGlvbkRyYWdTdG9wJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxbWFlGbG93UHJvcHNbJ29uU2VsZWN0aW9uRW5kJ11dPiBhcyBhbnk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFtYWUZsb3dQcm9wc1snb25TZWxlY3Rpb25TdGFydCddXT4gYXMgYW55O1xuXG5cbiAgICBAQ29udGVudENoaWxkKEJhY2tncm91bmREaXJlY3RpdmUpIF9iYWNrZ3JvdW5kOiBCYWNrZ3JvdW5kRGlyZWN0aXZlO1xuICAgIEBDb250ZW50Q2hpbGQoQ29udHJvbHNEaXJlY3RpdmUpIF9jb250cm9sczogQ29udHJvbHNEaXJlY3RpdmU7XG4gICAgQENvbnRlbnRDaGlsZChNaW5pbWFwRGlyZWN0aXZlKSBfbWluaW1hcDogTWluaW1hcERpcmVjdGl2ZTtcblxuXG4gICAgcHJpdmF0ZSBfc2V0Tm9kZXM6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGFueVtdPj47XG4gICAgcHJpdmF0ZSBfc2V0RWRnZXM6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGFueVtdPj47XG5cbiAgICBvdmVycmlkZSBuZ1JlYWN0Q29tcG9uZW50ID0gKHsgcHJvcHMgfTogeyBwcm9wczogUmVhY3RGbG93UHJvcHMgfSkgPT4ge1xuICAgICAgICBjb25zdCBnZXRQcm9wcyA9IChvYmogPSB7fSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9iaikuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT21pdCBrZXlzIHByZWZpeGVkIHdpdGggX1xuICAgICAgICAgICAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ18nKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIE9taXQgZXZlbnQgZW1pdHRlciBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgaWYgKGsuc3RhcnRzV2l0aCgnb24nKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgcHJvcHNba10gPSB2O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBwcm9wcyBhcyBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250cm9sUHJvcHMgPSBnZXRQcm9wcyh0aGlzLl9jb250cm9scyk7XG4gICAgICAgIGNvbnN0IG1pbmltYXBQcm9wcyA9IGdldFByb3BzKHRoaXMuX21pbmltYXApO1xuXG4gICAgICAgIGNvbnRyb2xQcm9wcy5vbkZpdFZpZXcgPSAoKSA9PlxuICAgICAgICAgICAgdGhpcy5fY29udHJvbHMub25GaXRWaWV3LmVtaXQoKTtcbiAgICAgICAgY29udHJvbFByb3BzLm9uSW50ZXJhY3RpdmVDaGFuZ2UgPSAoaW50ZXJhY3RpdmVTdGF0dXMpID0+XG4gICAgICAgICAgICB0aGlzLl9jb250cm9scy5vbkludGVyYWN0aXZlQ2hhbmdlLmVtaXQoaW50ZXJhY3RpdmVTdGF0dXMpO1xuICAgICAgICBjb250cm9sUHJvcHMub25ab29tSW4gPSAoKSA9PlxuICAgICAgICAgICAgdGhpcy5fY29udHJvbHMub25ab29tSW4uZW1pdCgpO1xuICAgICAgICBjb250cm9sUHJvcHMub25ab29tT3V0ID0gKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xzLm9uWm9vbU91dC5lbWl0KCk7XG5cbiAgICAgICAgbWluaW1hcFByb3BzLm9uQ2xpY2sgPSAoKSA9PlxuICAgICAgICAgICAgdGhpcy5fbWluaW1hcC5vbkNsaWNrLmVtaXQoKTtcbiAgICAgICAgbWluaW1hcFByb3BzLm9uTm9kZUNsaWNrID0gKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX21pbmltYXAub25Ob2RlQ2xpY2suZW1pdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYWN0RGlyZWN0aXZlcyA9IFtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KEJhY2tncm91bmQsIGdldFByb3BzKHRoaXMuX2JhY2tncm91bmQpKSA6IG51bGwsXG4gICAgICAgICAgICB0aGlzLl9jb250cm9scyA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udHJvbHMsIGNvbnRyb2xQcm9wcykgOiBudWxsLFxuICAgICAgICAgICAgdGhpcy5fbWluaW1hcCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWluaU1hcCwgbWluaW1hcFByb3BzKSA6IG51bGwsXG4gICAgICAgIF0uZmlsdGVyKHIgPT4gcik7XG5cbiAgICAgICAgY29uc3QgW25vZGVzLCBzZXROb2Rlc10gPSBSZWFjdC51c2VTdGF0ZSh0aGlzLl9ub2Rlcyk7XG4gICAgICAgIGNvbnN0IFtlZGdlcywgc2V0RWRnZXNdID0gUmVhY3QudXNlU3RhdGUodGhpcy5fZWRnZXMpO1xuXG4gICAgICAgIC8vIFN0b3JlIHNldFN0YXRlIGZ1bmN0aW9ucyBmb3IgdXNlIGluIG5nT25DaGFuZ2VzXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXROb2RlcyA9IHNldE5vZGVzO1xuICAgICAgICAgICAgdGhpcy5fc2V0RWRnZXMgPSBzZXRFZGdlcztcbiAgICAgICAgfSwgW3NldE5vZGVzLCBzZXRFZGdlc10pO1xuXG4gICAgICAgIHByb3BzLm9uTm9kZXNDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgICAgICAgIChjaGFuZ2VzKSA9PiBzZXROb2RlcygobmRzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBhcHBseU5vZGVDaGFuZ2VzKGNoYW5nZXMsIG5kcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm9kZXNDaGFuZ2UuZW1pdCh0aGlzLl9ub2RlcyA9IG5vZGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHByb3BzLm9uRWRnZXNDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgICAgICAgIChjaGFuZ2VzKSA9PiBzZXRFZGdlcygoZWRzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTRURcIilcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlcyA9IGFwcGx5RWRnZUNoYW5nZXMoY2hhbmdlcywgZWRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGdlc0NoYW5nZS5lbWl0KHRoaXMuX2VkZ2VzID0gZWRnZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGdlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgcHJvcHMub25Db25uZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAocGFyYW1zKSA9PiBzZXRFZGdlcygoZWRzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZXMgPSBhZGRFZGdlKHBhcmFtcywgZWRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGdlc0NoYW5nZS5lbWl0KHRoaXMuX2VkZ2VzID0gZWRnZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGdlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgW11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIHByb3BlcnR5IGJpbmRpbmdzXG4gICAgICAgIHByb3BzLm5vZGVzID0gbm9kZXM7XG4gICAgICAgIHByb3BzLmVkZ2VzID0gZWRnZXM7XG5cblxuICAgICAgICAvLyBFZmZlY3RpdmVseSBvdXRwdXRzIHRoaXM6XG4gICAgICAgIC8vIDxSZWFjdEZsb3dQcm92aWRlcj5cbiAgICAgICAgLy8gICAgIDxSZWFjdEZsb3cgcHJvcHM9e3Byb3BzfT5cbiAgICAgICAgLy8gICAgICAgICA8QmFja2dyb3VuZC8+XG4gICAgICAgIC8vICAgICAgICAgPENvbnRyb2xzLz5cbiAgICAgICAgLy8gICAgICAgICA8TWluaU1hcC8+XG4gICAgICAgIC8vICAgICA8L1JlYWN0Rmxvdz5cbiAgICAgICAgLy8gPC9SZWFjdEZsb3dQcm92aWRlcj5cblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZsb3dQcm92aWRlciwgeyBjaGlsZHJlbjogW10gfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGbG93LCB7IC4uLnByb3BzIGFzIGFueSwgb25Jbml0OiByZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHJmO1xuICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgLi4ucmVhY3REaXJlY3RpdmVzXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBuZ0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIobmdDb250YWluZXIsIG5nWm9uZSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG5cbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZXROb2RlcyAmJiBjaGFuZ2VzWydfbm9kZXMnXT8uZmlyc3RDaGFuZ2UgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE5vZGVzKGNoYW5nZXNbJ19ub2RlcyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NldEVkZ2VzICYmIGNoYW5nZXNbJ19lZGdlcyddPy5maXJzdENoYW5nZSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RWRnZXMoY2hhbmdlc1snX2VkZ2VzJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcygpO1xuICAgIH1cbn1cbiJdfQ==