@future-grid/fgp-graph
Version:
fgp-graph is a chart lib based on Dygraphs
164 lines (123 loc) • 19.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _configurations = require("../../../metadata/configurations");
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
var _dataService = require("../../../services/dataService");
var _GraphRenderer = require("../../../widgets/GraphRenderer");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var Exports = function Exports(parentElement, graph, config, graphDiv, reactSelectionListener) {
var _this = this;
_classCallCheck(this, Exports);
this.parentElement = parentElement;
this.config = config;
this.graphDiv = graphDiv;
this.reactSelectionListener = reactSelectionListener;
_defineProperty(this, "currentGraphData", void 0);
_defineProperty(this, "currentCollection", void 0);
_defineProperty(this, "labels", void 0);
_defineProperty(this, "rectSelectStatus", false);
_defineProperty(this, "graph", void 0);
_defineProperty(this, "setData", function (data, labels, collection) {
_this.currentGraphData = data;
_this.labels = labels;
_this.currentCollection = collection;
});
_defineProperty(this, "initDom", function () {
var _this$config;
//
var buttonsContainer = document.createElement('div');
buttonsContainer.setAttribute("class", "fgp-buttons");
(_this$config = _this.config) === null || _this$config === void 0 ? void 0 : _this$config.map(function (_config) {
if (_config === _configurations.GraphExports.Data) {
// create button and add it into header
var btnAttrs = [{
key: "class",
value: "fgp-export-button fgp-btn-export-data"
}];
var btnData = _GraphRenderer.DomElementOperator.createElement('button', btnAttrs);
btnData.addEventListener("click", function (event) {
// export data
// check data (1 or more)
if (_this.currentGraphData && _this.currentGraphData.length > 0 && _this.currentCollection) {
var dateWindow = _this.graph.getOption("dateWindow");
var csvStr = ""; // single device
var currentData = _this.currentGraphData.filter(function (_data) {
return _data[0].getTime() >= dateWindow[0] && _data[0].getTime() <= dateWindow[1];
});
var currentCollection = _this.currentCollection; // prepare the file name
var _fileName = currentCollection.label + "_" + (0, _momentTimezone["default"])().toISOString() + ".csv";
var _columns = ["timestamp"];
var _series = _this.labels;
_series === null || _series === void 0 ? void 0 : _series.forEach(function (_s, _index) {
// if (_index > 0) {
_columns.push(_s); // }
}); // add titles first
_columns.forEach(function (title, _index) {
if (_index < _columns.length - 1) {
csvStr += title + ',';
} else {
csvStr += title + '\n';
}
}); // prepare data
if (currentData) {
currentData.forEach(function (_d) {
_columns.forEach(function (title, _index) {
if (_index < _columns.length - 1) {
csvStr += _d[_index] + ',';
} else {
csvStr += _d[_index] + '\n';
}
});
});
}
_dataService.ExportUtils.exportCsv(csvStr, _fileName);
}
});
buttonsContainer.appendChild(btnData);
} else if (_config === _configurations.GraphExports.Image) {
var _btnAttrs = [{
key: "class",
value: "fgp-export-button fgp-btn-export-image"
}];
var btnImage = _GraphRenderer.DomElementOperator.createElement('button', _btnAttrs);
btnImage.addEventListener("click", function (event) {
var graphContainer = _this.graphDiv;
if (graphContainer && _this.currentCollection) {
// first one
_dataService.ExportUtils.saveAsImage(graphContainer, _this.currentCollection.label + "_" + (0, _momentTimezone["default"])().toISOString() + '.png');
}
});
buttonsContainer.appendChild(btnImage);
} else if (_config === _configurations.GraphExports.Draw) {
// add rect selection
if (_this.reactSelectionListener) {
var _btnAttrs2 = [{
key: "class",
value: "fgp-export-button fgp-btn-export-draw"
}];
var btnDraw = _GraphRenderer.DomElementOperator.createElement('button', _btnAttrs2);
btnDraw.addEventListener("click", function (event) {
_this.rectSelectStatus = !_this.rectSelectStatus;
if (_this.rectSelectStatus) {
btnDraw.style.backgroundColor = "yellow";
} else {
btnDraw.style.backgroundColor = "";
}
_this.reactSelectionListener ? _this.reactSelectionListener(_this.rectSelectStatus) : null;
});
buttonsContainer.appendChild(btnDraw);
}
}
});
_this.parentElement.appendChild(buttonsContainer);
});
this.graph = graph;
this.initDom();
};
exports["default"] = Exports;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9leHRyYXMvdG9vbGJhci93aWRnZXRzL0V4cG9ydHMudHMiXSwibmFtZXMiOlsiRXhwb3J0cyIsInBhcmVudEVsZW1lbnQiLCJncmFwaCIsImNvbmZpZyIsImdyYXBoRGl2IiwicmVhY3RTZWxlY3Rpb25MaXN0ZW5lciIsImRhdGEiLCJsYWJlbHMiLCJjb2xsZWN0aW9uIiwiY3VycmVudEdyYXBoRGF0YSIsImN1cnJlbnRDb2xsZWN0aW9uIiwiYnV0dG9uc0NvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm1hcCIsIl9jb25maWciLCJHcmFwaEV4cG9ydHMiLCJEYXRhIiwiYnRuQXR0cnMiLCJrZXkiLCJ2YWx1ZSIsImJ0bkRhdGEiLCJEb21FbGVtZW50T3BlcmF0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJsZW5ndGgiLCJkYXRlV2luZG93IiwiZ2V0T3B0aW9uIiwiY3N2U3RyIiwiY3VycmVudERhdGEiLCJmaWx0ZXIiLCJfZGF0YSIsImdldFRpbWUiLCJfZmlsZU5hbWUiLCJsYWJlbCIsInRvSVNPU3RyaW5nIiwiX2NvbHVtbnMiLCJfc2VyaWVzIiwiZm9yRWFjaCIsIl9zIiwiX2luZGV4IiwicHVzaCIsInRpdGxlIiwiX2QiLCJFeHBvcnRVdGlscyIsImV4cG9ydENzdiIsImFwcGVuZENoaWxkIiwiSW1hZ2UiLCJidG5JbWFnZSIsImdyYXBoQ29udGFpbmVyIiwic2F2ZUFzSW1hZ2UiLCJEcmF3IiwiYnRuRHJhdyIsInJlY3RTZWxlY3RTdGF0dXMiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImluaXREb20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7SUFFcUJBLE8sR0FhakIsaUJBQW1CQyxhQUFuQixFQUEyQ0MsS0FBM0MsRUFBa0VDLE1BQWxFLEVBQWtHQyxRQUFsRyxFQUE2SEMsc0JBQTdILEVBQWlMO0FB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SUFBbkY7QUFDSCxXQVZEO0FBV0EzQyxVQUFBQSxnQkFBZ0IsQ0FBQ29DLFdBQWpCLENBQTZCTSxPQUE3QjtBQUNIO0FBQ0o7QUFDSixLQS9FRDs7QUFrRkEsSUFBQSxLQUFJLENBQUNwRCxhQUFMLENBQW1COEMsV0FBbkIsQ0FBK0JwQyxnQkFBL0I7QUFDSCxHQXBHZ0w7O0FBQzdLLE9BQUtULEtBQUwsR0FBYUEsS0FBYjtBQUNBLE9BQUt1RCxPQUFMO0FBQ0gsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RG9tQXR0cnMsIEdyYXBoQ29sbGVjdGlvbiwgR3JhcGhFeHBvcnRzfSBmcm9tIFwiLi4vLi4vLi4vbWV0YWRhdGEvY29uZmlndXJhdGlvbnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHtFeHBvcnRVdGlsc30gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2RhdGFTZXJ2aWNlXCI7XG5pbXBvcnQge0RvbUVsZW1lbnRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3dpZGdldHMvR3JhcGhSZW5kZXJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRzIHtcblxuXG4gICAgcHJpdmF0ZSBjdXJyZW50R3JhcGhEYXRhPzogYW55O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50Q29sbGVjdGlvbj86IGFueTtcblxuICAgIHByaXZhdGUgbGFiZWxzPzogc3RyaW5nW107XG5cbiAgICBwcml2YXRlIHJlY3RTZWxlY3RTdGF0dXMgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZ3JhcGg6IER5Z3JhcGg7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50RWxlbWVudDogRWxlbWVudCwgZ3JhcGg6IER5Z3JhcGgsIHB1YmxpYyBjb25maWc/OiBHcmFwaEV4cG9ydHNbXSwgcHVibGljIGdyYXBoRGl2PzogRWxlbWVudCwgcHVibGljIHJlYWN0U2VsZWN0aW9uTGlzdGVuZXI/OiAoYWN0aXZlOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcbiAgICAgICAgdGhpcy5pbml0RG9tKCk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgc2V0RGF0YSA9IChkYXRhOiBhbnksIGxhYmVsczogc3RyaW5nW10sIGNvbGxlY3Rpb246IEdyYXBoQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRHcmFwaERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICAgICAgdGhpcy5jdXJyZW50Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERvbSA9ICgpID0+IHtcbiAgICAgICAgLy9cbiAgICAgICAgbGV0IGJ1dHRvbnNDb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGJ1dHRvbnNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJmZ3AtYnV0dG9uc1wiKTtcblxuICAgICAgICB0aGlzLmNvbmZpZz8ubWFwKF9jb25maWcgPT4ge1xuICAgICAgICAgICAgaWYgKF9jb25maWcgPT09IEdyYXBoRXhwb3J0cy5EYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGJ1dHRvbiBhbmQgYWRkIGl0IGludG8gaGVhZGVyXG4gICAgICAgICAgICAgICAgbGV0IGJ0bkF0dHJzOiBBcnJheTxEb21BdHRycz4gPSBbe2tleTogXCJjbGFzc1wiLCB2YWx1ZTogXCJmZ3AtZXhwb3J0LWJ1dHRvbiBmZ3AtYnRuLWV4cG9ydC1kYXRhXCJ9XTtcbiAgICAgICAgICAgICAgICBsZXQgYnRuRGF0YSA9IERvbUVsZW1lbnRPcGVyYXRvci5jcmVhdGVFbGVtZW50KCdidXR0b24nLCBidG5BdHRycyk7XG4gICAgICAgICAgICAgICAgYnRuRGF0YS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGRhdGEgKDEgb3IgbW9yZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdyYXBoRGF0YSAmJiB0aGlzLmN1cnJlbnRHcmFwaERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlV2luZG93ID0gdGhpcy5ncmFwaC5nZXRPcHRpb24oXCJkYXRlV2luZG93XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNzdlN0cjogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBkZXZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5jdXJyZW50R3JhcGhEYXRhLmZpbHRlcigoX2RhdGE6YW55KSA9PiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGF0YVswXS5nZXRUaW1lKCkgPj0gZGF0ZVdpbmRvd1swXSAmJiBfZGF0YVswXS5nZXRUaW1lKCkgPD0gZGF0ZVdpbmRvd1sxXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2xsZWN0aW9uID0gdGhpcy5jdXJyZW50Q29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGZpbGUgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2ZpbGVOYW1lID0gY3VycmVudENvbGxlY3Rpb24ubGFiZWwgKyBcIl9cIiArIG1vbWVudCgpLnRvSVNPU3RyaW5nKCkgKyBcIi5jc3ZcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfY29sdW1uczogc3RyaW5nW10gPSBbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfc2VyaWVzID0gdGhpcy5sYWJlbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2VyaWVzPy5mb3JFYWNoKChfcywgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKF9pbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbHVtbnMucHVzaChfcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGl0bGVzIGZpcnN0IFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbHVtbnMuZm9yRWFjaCgodGl0bGUsIF9pbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaW5kZXggPCBfY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdlN0ciArPSB0aXRsZSArICcsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3ZTdHIgKz0gdGl0bGUgKyAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEuZm9yRWFjaCgoX2Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sdW1ucy5mb3JFYWNoKCh0aXRsZSwgX2luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2luZGV4IDwgX2NvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzdlN0ciArPSBfZFtfaW5kZXhdICsgJywnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3ZTdHIgKz0gX2RbX2luZGV4XSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENzdihjc3ZTdHIsIF9maWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bkRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfY29uZmlnID09PSBHcmFwaEV4cG9ydHMuSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnRuQXR0cnM6IEFycmF5PERvbUF0dHJzPiA9IFt7a2V5OiBcImNsYXNzXCIsIHZhbHVlOiBcImZncC1leHBvcnQtYnV0dG9uIGZncC1idG4tZXhwb3J0LWltYWdlXCJ9XTtcbiAgICAgICAgICAgICAgICBsZXQgYnRuSW1hZ2UgPSBEb21FbGVtZW50T3BlcmF0b3IuY3JlYXRlRWxlbWVudCgnYnV0dG9uJywgYnRuQXR0cnMpO1xuICAgICAgICAgICAgICAgIGJ0bkltYWdlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JhcGhDb250YWluZXIgPSB0aGlzLmdyYXBoRGl2O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JhcGhDb250YWluZXIgJiYgdGhpcy5jdXJyZW50Q29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3Qgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRVdGlscy5zYXZlQXNJbWFnZShncmFwaENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCwgdGhpcy5jdXJyZW50Q29sbGVjdGlvbi5sYWJlbCArIFwiX1wiICsgbW9tZW50KCkudG9JU09TdHJpbmcoKSArICcucG5nJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bkltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2NvbmZpZyA9PT0gR3JhcGhFeHBvcnRzLkRyYXcpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcmVjdCBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFjdFNlbGVjdGlvbkxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidG5BdHRyczogQXJyYXk8RG9tQXR0cnM+ID0gW3trZXk6IFwiY2xhc3NcIiwgdmFsdWU6IFwiZmdwLWV4cG9ydC1idXR0b24gZmdwLWJ0bi1leHBvcnQtZHJhd1wifV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBidG5EcmF3ID0gRG9tRWxlbWVudE9wZXJhdG9yLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicsIGJ0bkF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuRHJhdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3RTZWxlY3RTdGF0dXMgPSAhdGhpcy5yZWN0U2VsZWN0U3RhdHVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWN0U2VsZWN0U3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuRHJhdy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcInllbGxvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5EcmF3LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhY3RTZWxlY3Rpb25MaXN0ZW5lciA/IHRoaXMucmVhY3RTZWxlY3Rpb25MaXN0ZW5lcih0aGlzLnJlY3RTZWxlY3RTdGF0dXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuRHJhdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25zQ29udGFpbmVyKTtcbiAgICB9O1xuXG5cbn0iXX0=