UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

264 lines (262 loc) 46.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.DatasetTabs = exports.DatasetModalTab = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireDefault(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _datasetLabel = _interopRequireDefault(require("../common/dataset-label")); var _dataTable = _interopRequireDefault(require("../common/data-table")); var _reselect = require("reselect"); var _cellSize = require("../common/data-table/cell-size"); var _canvas = _interopRequireDefault(require("../common/data-table/canvas")); var _icons = require("../common/icons"); var _portaled = _interopRequireDefault(require("../common/portaled")); var _displayFormat = _interopRequireDefault(require("../common/data-table/display-format")); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var MIN_STATS_CELL_SIZE = 122; var DEFAULT_SORT_COLUMN = {}; // sidePadding changes from 38 to 68, 30px for configuration button var dgSettings = { sidePadding: '68px', verticalPadding: '16px', height: '36px' }; var StyledModal = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 85vh;\n overflow: hidden;\n display: flex;\n"]))); var DatasetCatalog = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: ", " ", " 0 0;\n\n .overflow-horizontal {\n display: flex;\n overflow-x: auto;\n overflow-y: hidden;\n flex-direction: row;\n ", "\n }\n"])), dgSettings.verticalPadding, dgSettings.sidePadding, function (props) { return props.theme.modalScrollBar; }); var DatasetModalTab = exports.DatasetModalTab = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n border-bottom: 3px solid ", ";\n cursor: pointer;\n display: flex;\n height: 35px;\n margin: 0 3px;\n padding: 0 5px;\n\n &:hover {\n border-bottom: 3px solid black;\n }\n"])), function (props) { return props.active ? 'black' : 'transparent'; }); var StyledConfigureButton = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: flex-end;\n position: absolute;\n top: 24px;\n right: 48px;\n svg {\n stroke: black;\n }\n cursor: pointer;\n"]))); var DatasetTabsUnmemoized = function DatasetTabsUnmemoized(_ref) { var activeDataset = _ref.activeDataset, datasets = _ref.datasets, showDatasetTable = _ref.showDatasetTable; return /*#__PURE__*/_react["default"].createElement(DatasetCatalog, { className: "dataset-modal-catalog" }, /*#__PURE__*/_react["default"].createElement("div", { className: "overflow-horizontal" }, Object.values(datasets).map(function (dataset) { return /*#__PURE__*/_react["default"].createElement(DatasetModalTab, { className: "dataset-modal-tab", active: dataset === activeDataset, key: dataset.id, onClick: function onClick() { return showDatasetTable(dataset.id); } }, /*#__PURE__*/_react["default"].createElement(_datasetLabel["default"], { dataset: dataset })); }))); }; var DatasetTabs = exports.DatasetTabs = /*#__PURE__*/_react["default"].memo(DatasetTabsUnmemoized); DatasetTabs.displayName = 'DatasetTabs'; DataTableModalFactory.deps = [_dataTable["default"], _displayFormat["default"]]; var TableContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 100%;\n max-height: 100%;\n max-width: 100%;\n"]))); function DataTableModalFactory(DataTable, DataTableConfig) { var DataTableModal = /*#__PURE__*/function (_React$Component) { function DataTableModal() { var _this; (0, _classCallCheck2["default"])(this, DataTableModal); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, DataTableModal, [].concat(args)); (0, _defineProperty2["default"])(_this, "state", { showConfig: false }); (0, _defineProperty2["default"])(_this, "datasetCellSizeCache", {}); (0, _defineProperty2["default"])(_this, "dataId", function (_ref2) { var _ref2$dataId = _ref2.dataId, dataId = _ref2$dataId === void 0 ? '' : _ref2$dataId; return dataId; }); (0, _defineProperty2["default"])(_this, "datasets", function (props) { return props.datasets; }); (0, _defineProperty2["default"])(_this, "fields", function (_ref3) { var datasets = _ref3.datasets, _ref3$dataId = _ref3.dataId, dataId = _ref3$dataId === void 0 ? '' : _ref3$dataId; return (datasets[dataId] || {}).fields; }); (0, _defineProperty2["default"])(_this, "columns", (0, _reselect.createSelector)(_this.fields, function (fields) { return fields.map(function (f) { return f.name; }); })); (0, _defineProperty2["default"])(_this, "colMeta", (0, _reselect.createSelector)([_this.fields, _this.datasets], function (fields) { return fields.reduce(function (acc, _ref4) { var name = _ref4.name, displayName = _ref4.displayName, type = _ref4.type, filterProps = _ref4.filterProps, format = _ref4.format, displayFormat = _ref4.displayFormat; return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, name, _objectSpread(_objectSpread(_objectSpread({ name: displayName || name, type: type }, format ? { format: format } : {}), displayFormat ? { displayFormat: displayFormat } : {}), filterProps !== null && filterProps !== void 0 && filterProps.columnStats ? { columnStats: filterProps.columnStats } : {}))); }, {}); })); (0, _defineProperty2["default"])(_this, "cellSizeCache", (0, _reselect.createSelector)(_this.dataId, _this.datasets, function (dataId, datasets) { if (!datasets[dataId]) { return {}; } var _datasets$dataId = datasets[dataId], fields = _datasets$dataId.fields, dataContainer = _datasets$dataId.dataContainer; var showCalculate = null; if (!_this.datasetCellSizeCache[dataId]) { showCalculate = true; } else if (_this.datasetCellSizeCache[dataId].fields !== fields || _this.datasetCellSizeCache[dataId].dataContainer !== dataContainer) { showCalculate = true; } if (!showCalculate) { return _this.datasetCellSizeCache[dataId].cellSizeCache; } var cellSizeCache = fields.reduce(function (acc, field, colIdx) { return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, field.name, (0, _cellSize.renderedSize)({ text: { dataContainer: dataContainer, column: field.displayName }, colIdx: colIdx, type: field.type, fontSize: _this.props.theme.cellFontSize, font: _this.props.theme.fontFamily, minCellSize: MIN_STATS_CELL_SIZE }))); }, {}); // save it to cache _this.datasetCellSizeCache[dataId] = { cellSizeCache: cellSizeCache, fields: fields, dataContainer: dataContainer }; return cellSizeCache; })); (0, _defineProperty2["default"])(_this, "copyTableColumn", function (column) { var _this$props = _this.props, _this$props$dataId = _this$props.dataId, dataId = _this$props$dataId === void 0 ? '' : _this$props$dataId, copyTableColumn = _this$props.copyTableColumn; copyTableColumn(dataId, column); }); (0, _defineProperty2["default"])(_this, "pinTableColumn", function (column) { var _this$props2 = _this.props, _this$props2$dataId = _this$props2.dataId, dataId = _this$props2$dataId === void 0 ? '' : _this$props2$dataId, pinTableColumn = _this$props2.pinTableColumn; pinTableColumn(dataId, column); }); (0, _defineProperty2["default"])(_this, "sortTableColumn", function (column, mode) { var _this$props3 = _this.props, _this$props3$dataId = _this$props3.dataId, dataId = _this$props3$dataId === void 0 ? '' : _this$props3$dataId, sortTableColumn = _this$props3.sortTableColumn; sortTableColumn(dataId, column, mode); }); (0, _defineProperty2["default"])(_this, "setColumnDisplayFormat", function (formats) { var _this$props4 = _this.props, dataId = _this$props4.dataId, setColumnDisplayFormat = _this$props4.setColumnDisplayFormat; if (dataId) setColumnDisplayFormat(dataId, formats); }); (0, _defineProperty2["default"])(_this, "onOpenConfig", function () { _this.setState({ showConfig: true }); }); (0, _defineProperty2["default"])(_this, "onCloseConfig", function () { _this.setState({ showConfig: false }); }); return _this; } (0, _inherits2["default"])(DataTableModal, _React$Component); return (0, _createClass2["default"])(DataTableModal, [{ key: "render", value: function render() { var _this$props5 = this.props, datasets = _this$props5.datasets, dataId = _this$props5.dataId, showDatasetTable = _this$props5.showDatasetTable, _this$props5$showTab = _this$props5.showTab, showTab = _this$props5$showTab === void 0 ? true : _this$props5$showTab; if (!datasets || !dataId) { return null; } var activeDataset = datasets[dataId]; var columns = this.columns(this.props); var colMeta = this.colMeta(this.props); var cellSizeCache = this.cellSizeCache(this.props); return /*#__PURE__*/_react["default"].createElement(StyledModal, { className: "dataset-modal", id: "dataset-modal" }, /*#__PURE__*/_react["default"].createElement(_canvas["default"], null), /*#__PURE__*/_react["default"].createElement(TableContainer, null, showTab ? /*#__PURE__*/_react["default"].createElement(DatasetTabs, { activeDataset: activeDataset, datasets: datasets, showDatasetTable: showDatasetTable }) : null, /*#__PURE__*/_react["default"].createElement(StyledConfigureButton, { className: "display-config-button" }, /*#__PURE__*/_react["default"].createElement(_icons.Gear, { onClick: this.onOpenConfig }), /*#__PURE__*/_react["default"].createElement(_portaled["default"], { right: 240, top: 20, isOpened: this.state.showConfig, onClose: this.onCloseConfig }, /*#__PURE__*/_react["default"].createElement(DataTableConfig, { columns: columns, colMeta: colMeta, setColumnDisplayFormat: this.setColumnDisplayFormat, onClose: this.onCloseConfig }))), datasets[dataId] ? /*#__PURE__*/_react["default"].createElement(DataTable, { key: dataId, dataId: dataId, columns: columns, colMeta: colMeta, cellSizeCache: cellSizeCache, dataContainer: activeDataset.dataContainer, pinnedColumns: activeDataset.pinnedColumns, sortOrder: activeDataset.sortOrder, sortColumn: activeDataset.sortColumn || DEFAULT_SORT_COLUMN, copyTableColumn: this.copyTableColumn, pinTableColumn: this.pinTableColumn, sortTableColumn: this.sortTableColumn, setColumnDisplayFormat: this.setColumnDisplayFormat, hasStats: false }) : null)); } }]); }(_react["default"].Component); // @ts-expect-error figure out the proper way to type return (0, _styledComponents.withTheme)(DataTableModal); } var _default = exports["default"] = DataTableModalFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZGF0YXNldExhYmVsIiwiX2RhdGFUYWJsZSIsIl9yZXNlbGVjdCIsIl9jZWxsU2l6ZSIsIl9jYW52YXMiLCJfaWNvbnMiLCJfcG9ydGFsZWQiLCJfZGlzcGxheUZvcm1hdCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIk1JTl9TVEFUU19DRUxMX1NJWkUiLCJERUZBVUxUX1NPUlRfQ09MVU1OIiwiZGdTZXR0aW5ncyIsInNpZGVQYWRkaW5nIiwidmVydGljYWxQYWRkaW5nIiwiaGVpZ2h0IiwiU3R5bGVkTW9kYWwiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkRhdGFzZXRDYXRhbG9nIiwicHJvcHMiLCJ0aGVtZSIsIm1vZGFsU2Nyb2xsQmFyIiwiRGF0YXNldE1vZGFsVGFiIiwiZXhwb3J0cyIsImFjdGl2ZSIsIlN0eWxlZENvbmZpZ3VyZUJ1dHRvbiIsIkRhdGFzZXRUYWJzVW5tZW1vaXplZCIsIl9yZWYiLCJhY3RpdmVEYXRhc2V0IiwiZGF0YXNldHMiLCJzaG93RGF0YXNldFRhYmxlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInZhbHVlcyIsIm1hcCIsImRhdGFzZXQiLCJrZXkiLCJpZCIsIm9uQ2xpY2siLCJEYXRhc2V0VGFicyIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiRGF0YVRhYmxlTW9kYWxGYWN0b3J5IiwiZGVwcyIsIkRhdGFUYWJsZUZhY3RvcnkiLCJEYXRhVGFibGVDb25maWdGYWN0b3J5IiwiVGFibGVDb250YWluZXIiLCJEYXRhVGFibGUiLCJEYXRhVGFibGVDb25maWciLCJEYXRhVGFibGVNb2RhbCIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsInNob3dDb25maWciLCJfcmVmMiIsIl9yZWYyJGRhdGFJZCIsImRhdGFJZCIsIl9yZWYzIiwiX3JlZjMkZGF0YUlkIiwiZmllbGRzIiwiY3JlYXRlU2VsZWN0b3IiLCJmIiwibmFtZSIsInJlZHVjZSIsImFjYyIsIl9yZWY0IiwidHlwZSIsImZpbHRlclByb3BzIiwiZm9ybWF0IiwiZGlzcGxheUZvcm1hdCIsImNvbHVtblN0YXRzIiwiX2RhdGFzZXRzJGRhdGFJZCIsImRhdGFDb250YWluZXIiLCJzaG93Q2FsY3VsYXRlIiwiZGF0YXNldENlbGxTaXplQ2FjaGUiLCJjZWxsU2l6ZUNhY2hlIiwiZmllbGQiLCJjb2xJZHgiLCJyZW5kZXJlZFNpemUiLCJ0ZXh0IiwiY29sdW1uIiwiZm9udFNpemUiLCJjZWxsRm9udFNpemUiLCJmb250IiwiZm9udEZhbWlseSIsIm1pbkNlbGxTaXplIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRkYXRhSWQiLCJjb3B5VGFibGVDb2x1bW4iLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczIkZGF0YUlkIiwicGluVGFibGVDb2x1bW4iLCJtb2RlIiwiX3RoaXMkcHJvcHMzIiwiX3RoaXMkcHJvcHMzJGRhdGFJZCIsInNvcnRUYWJsZUNvbHVtbiIsImZvcm1hdHMiLCJfdGhpcyRwcm9wczQiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0Iiwic2V0U3RhdGUiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkcHJvcHM1JHNob3dUYWIiLCJzaG93VGFiIiwiY29sdW1ucyIsImNvbE1ldGEiLCJHZWFyIiwib25PcGVuQ29uZmlnIiwicmlnaHQiLCJ0b3AiLCJpc09wZW5lZCIsInN0YXRlIiwib25DbG9zZSIsIm9uQ2xvc2VDb25maWciLCJwaW5uZWRDb2x1bW5zIiwic29ydE9yZGVyIiwic29ydENvbHVtbiIsImhhc1N0YXRzIiwiQ29tcG9uZW50Iiwid2l0aFRoZW1lIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kYWxzL2RhdGEtdGFibGUtbW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lLCBJU3R5bGVkQ29tcG9uZW50fSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgRGF0YXNldExhYmVsIGZyb20gJy4uL2NvbW1vbi9kYXRhc2V0LWxhYmVsJztcbmltcG9ydCBEYXRhVGFibGVGYWN0b3J5IGZyb20gJy4uL2NvbW1vbi9kYXRhLXRhYmxlJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7cmVuZGVyZWRTaXplfSBmcm9tICcuLi9jb21tb24vZGF0YS10YWJsZS9jZWxsLXNpemUnO1xuaW1wb3J0IENhbnZhc0hhY2sgZnJvbSAnLi4vY29tbW9uL2RhdGEtdGFibGUvY2FudmFzJztcbmltcG9ydCBLZXBsZXJUYWJsZSwge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VUlTdGF0ZUFjdGlvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1VpU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtHZWFyfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IFBvcnRhbGVkIGZyb20gJy4uL2NvbW1vbi9wb3J0YWxlZCc7XG5pbXBvcnQgRGF0YVRhYmxlQ29uZmlnRmFjdG9yeSBmcm9tICcuLi9jb21tb24vZGF0YS10YWJsZS9kaXNwbGF5LWZvcm1hdCc7XG5pbXBvcnQge0Jhc2VDb21wb25lbnRQcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBNSU5fU1RBVFNfQ0VMTF9TSVpFID0gMTIyO1xuY29uc3QgREVGQVVMVF9TT1JUX0NPTFVNTiA9IHt9O1xuXG4vLyBzaWRlUGFkZGluZyBjaGFuZ2VzIGZyb20gMzggdG8gNjgsIDMwcHggZm9yIGNvbmZpZ3VyYXRpb24gYnV0dG9uXG5jb25zdCBkZ1NldHRpbmdzID0ge1xuICBzaWRlUGFkZGluZzogJzY4cHgnLFxuICB2ZXJ0aWNhbFBhZGRpbmc6ICcxNnB4JyxcbiAgaGVpZ2h0OiAnMzZweCdcbn07XG5cbmNvbnN0IFN0eWxlZE1vZGFsID0gc3R5bGVkLmRpdmBcbiAgbWluLWhlaWdodDogODV2aDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IERhdGFzZXRDYXRhbG9nID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogJHtkZ1NldHRpbmdzLnZlcnRpY2FsUGFkZGluZ30gJHtkZ1NldHRpbmdzLnNpZGVQYWRkaW5nfSAwIDA7XG5cbiAgLm92ZXJmbG93LWhvcml6b250YWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsU2Nyb2xsQmFyfVxuICB9XG5gO1xuXG5leHBvcnQgdHlwZSBEYXRhc2V0TW9kYWxUYWJQcm9wcyA9IEJhc2VDb21wb25lbnRQcm9wcyAmIHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEYXRhc2V0TW9kYWxUYWI6IElTdHlsZWRDb21wb25lbnQ8XG4gICd3ZWInLFxuICBEYXRhc2V0TW9kYWxUYWJQcm9wc1xuPiA9IHN0eWxlZC5kaXY8RGF0YXNldE1vZGFsVGFiUHJvcHM+YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAzcHggc29saWQgJHtwcm9wcyA9PiAocHJvcHMuYWN0aXZlID8gJ2JsYWNrJyA6ICd0cmFuc3BhcmVudCcpfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDM1cHg7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHBhZGRpbmc6IDAgNXB4O1xuXG4gICY6aG92ZXIge1xuICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCBibGFjaztcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkQ29uZmlndXJlQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDI0cHg7XG4gIHJpZ2h0OiA0OHB4O1xuICBzdmcge1xuICAgIHN0cm9rZTogYmxhY2s7XG4gIH1cbiAgY3Vyc29yOiBwb2ludGVyO1xuYDtcblxuaW50ZXJmYWNlIERhdGFzZXRUYWJzVW5tZW1vaXplZFByb3BzIHtcbiAgYWN0aXZlRGF0YXNldDogS2VwbGVyVGFibGU7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgc2hvd0RhdGFzZXRUYWJsZTogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IERhdGFzZXRUYWJzVW5tZW1vaXplZDogUmVhY3QuRkM8RGF0YXNldFRhYnNVbm1lbW9pemVkUHJvcHM+ID0gKHtcbiAgYWN0aXZlRGF0YXNldCxcbiAgZGF0YXNldHMsXG4gIHNob3dEYXRhc2V0VGFibGVcbn0pID0+IChcbiAgPERhdGFzZXRDYXRhbG9nIGNsYXNzTmFtZT1cImRhdGFzZXQtbW9kYWwtY2F0YWxvZ1wiPlxuICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3ctaG9yaXpvbnRhbFwiPlxuICAgICAge09iamVjdC52YWx1ZXMoZGF0YXNldHMpLm1hcCgoZGF0YXNldDogS2VwbGVyVGFibGUpID0+IChcbiAgICAgICAgPERhdGFzZXRNb2RhbFRhYlxuICAgICAgICAgIGNsYXNzTmFtZT1cImRhdGFzZXQtbW9kYWwtdGFiXCJcbiAgICAgICAgICBhY3RpdmU9e2RhdGFzZXQgPT09IGFjdGl2ZURhdGFzZXR9XG4gICAgICAgICAga2V5PXtkYXRhc2V0LmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNob3dEYXRhc2V0VGFibGUoZGF0YXNldC5pZCl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGF0YXNldExhYmVsIGRhdGFzZXQ9e2RhdGFzZXR9IC8+XG4gICAgICAgIDwvRGF0YXNldE1vZGFsVGFiPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIDwvRGF0YXNldENhdGFsb2c+XG4pO1xuXG5leHBvcnQgY29uc3QgRGF0YXNldFRhYnMgPSBSZWFjdC5tZW1vKERhdGFzZXRUYWJzVW5tZW1vaXplZCk7XG5cbkRhdGFzZXRUYWJzLmRpc3BsYXlOYW1lID0gJ0RhdGFzZXRUYWJzJztcblxuRGF0YVRhYmxlTW9kYWxGYWN0b3J5LmRlcHMgPSBbRGF0YVRhYmxlRmFjdG9yeSwgRGF0YVRhYmxlQ29uZmlnRmFjdG9yeV07XG5cbmNvbnN0IFRhYmxlQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG5gO1xuXG5pbnRlcmZhY2UgRGF0YVRhYmxlTW9kYWxQcm9wcyB7XG4gIHRoZW1lOiBhbnk7XG4gIGRhdGFJZD86IHN0cmluZztcbiAgc29ydFRhYmxlQ29sdW1uOiAoaWQ6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIG1vZGU/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHBpblRhYmxlQ29sdW1uOiAoaWQ6IHN0cmluZywgY29sdW1uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvcHlUYWJsZUNvbHVtbjogKGlkOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKSA9PiB2b2lkO1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIHNob3dEYXRhc2V0VGFibGU6IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICBzaG93VGFiPzogYm9vbGVhbjtcbiAgc2V0Q29sdW1uRGlzcGxheUZvcm1hdDogKFxuICAgIGRhdGFJZDogc3RyaW5nLFxuICAgIGZvcm1hdHM6IHtcbiAgICAgIGNvbHVtbjogc3RyaW5nO1xuICAgICAgZGlzcGxheUZvcm1hdDogc3RyaW5nO1xuICAgIH1cbiAgKSA9PiB2b2lkO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlOiBVaVN0YXRlO1xufVxuXG5mdW5jdGlvbiBEYXRhVGFibGVNb2RhbEZhY3RvcnkoXG4gIERhdGFUYWJsZTogUmV0dXJuVHlwZTx0eXBlb2YgRGF0YVRhYmxlRmFjdG9yeT4sXG4gIERhdGFUYWJsZUNvbmZpZzogUmV0dXJuVHlwZTx0eXBlb2YgRGF0YVRhYmxlQ29uZmlnRmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8T21pdDxEYXRhVGFibGVNb2RhbFByb3BzLCAndGhlbWUnPj4ge1xuICBjbGFzcyBEYXRhVGFibGVNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxEYXRhVGFibGVNb2RhbFByb3BzPiB7XG4gICAgc3RhdGUgPSB7XG4gICAgICBzaG93Q29uZmlnOiBmYWxzZVxuICAgIH07XG5cbiAgICBkYXRhc2V0Q2VsbFNpemVDYWNoZSA9IHt9O1xuICAgIGRhdGFJZCA9ICh7ZGF0YUlkID0gJyd9OiBEYXRhVGFibGVNb2RhbFByb3BzKSA9PiBkYXRhSWQ7XG4gICAgZGF0YXNldHMgPSAocHJvcHM6IERhdGFUYWJsZU1vZGFsUHJvcHMpID0+IHByb3BzLmRhdGFzZXRzO1xuICAgIGZpZWxkcyA9ICh7ZGF0YXNldHMsIGRhdGFJZCA9ICcnfTogRGF0YVRhYmxlTW9kYWxQcm9wcykgPT4gKGRhdGFzZXRzW2RhdGFJZF0gfHwge30pLmZpZWxkcztcbiAgICBjb2x1bW5zID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWVsZHMsIGZpZWxkcyA9PiBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gICAgY29sTWV0YSA9IGNyZWF0ZVNlbGVjdG9yKFt0aGlzLmZpZWxkcywgdGhpcy5kYXRhc2V0c10sIGZpZWxkcyA9PlxuICAgICAgZmllbGRzLnJlZHVjZShcbiAgICAgICAgKGFjYywge25hbWUsIGRpc3BsYXlOYW1lLCB0eXBlLCBmaWx0ZXJQcm9wcywgZm9ybWF0LCBkaXNwbGF5Rm9ybWF0fSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICBuYW1lOiBkaXNwbGF5TmFtZSB8fCBuYW1lLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIC4uLihmb3JtYXQgPyB7Zm9ybWF0fSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihkaXNwbGF5Rm9ybWF0ID8ge2Rpc3BsYXlGb3JtYXR9IDoge30pLFxuICAgICAgICAgICAgLi4uKGZpbHRlclByb3BzPy5jb2x1bW5TdGF0cyA/IHtjb2x1bW5TdGF0czogZmlsdGVyUHJvcHMuY29sdW1uU3RhdHN9IDoge30pXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICApO1xuXG4gICAgY2VsbFNpemVDYWNoZSA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZGF0YUlkLCB0aGlzLmRhdGFzZXRzLCAoZGF0YUlkLCBkYXRhc2V0cykgPT4ge1xuICAgICAgaWYgKCFkYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtmaWVsZHMsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICAgICAgbGV0IHNob3dDYWxjdWxhdGU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdKSB7XG4gICAgICAgIHNob3dDYWxjdWxhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdLmZpZWxkcyAhPT0gZmllbGRzIHx8XG4gICAgICAgIHRoaXMuZGF0YXNldENlbGxTaXplQ2FjaGVbZGF0YUlkXS5kYXRhQ29udGFpbmVyICE9PSBkYXRhQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgc2hvd0NhbGN1bGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvd0NhbGN1bGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc2V0Q2VsbFNpemVDYWNoZVtkYXRhSWRdLmNlbGxTaXplQ2FjaGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxTaXplQ2FjaGUgPSBmaWVsZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBmaWVsZCwgY29sSWR4KSA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbZmllbGQubmFtZV06IHJlbmRlcmVkU2l6ZSh7XG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgICAgICAgIGNvbHVtbjogZmllbGQuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2xJZHgsXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMucHJvcHMudGhlbWUuY2VsbEZvbnRTaXplLFxuICAgICAgICAgICAgZm9udDogdGhpcy5wcm9wcy50aGVtZS5mb250RmFtaWx5LFxuICAgICAgICAgICAgbWluQ2VsbFNpemU6IE1JTl9TVEFUU19DRUxMX1NJWkVcbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG4gICAgICAvLyBzYXZlIGl0IHRvIGNhY2hlXG4gICAgICB0aGlzLmRhdGFzZXRDZWxsU2l6ZUNhY2hlW2RhdGFJZF0gPSB7XG4gICAgICAgIGNlbGxTaXplQ2FjaGUsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgfTtcbiAgICAgIHJldHVybiBjZWxsU2l6ZUNhY2hlO1xuICAgIH0pO1xuXG4gICAgY29weVRhYmxlQ29sdW1uID0gKGNvbHVtbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7ZGF0YUlkID0gJycsIGNvcHlUYWJsZUNvbHVtbn0gPSB0aGlzLnByb3BzO1xuICAgICAgY29weVRhYmxlQ29sdW1uKGRhdGFJZCwgY29sdW1uKTtcbiAgICB9O1xuXG4gICAgcGluVGFibGVDb2x1bW4gPSAoY29sdW1uOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHtkYXRhSWQgPSAnJywgcGluVGFibGVDb2x1bW59ID0gdGhpcy5wcm9wcztcbiAgICAgIHBpblRhYmxlQ29sdW1uKGRhdGFJZCwgY29sdW1uKTtcbiAgICB9O1xuXG4gICAgc29ydFRhYmxlQ29sdW1uID0gKGNvbHVtbjogc3RyaW5nLCBtb2RlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7ZGF0YUlkID0gJycsIHNvcnRUYWJsZUNvbHVtbn0gPSB0aGlzLnByb3BzO1xuICAgICAgc29ydFRhYmxlQ29sdW1uKGRhdGFJZCwgY29sdW1uLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgc2V0Q29sdW1uRGlzcGxheUZvcm1hdCA9IGZvcm1hdHMgPT4ge1xuICAgICAgY29uc3Qge2RhdGFJZCwgc2V0Q29sdW1uRGlzcGxheUZvcm1hdH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKGRhdGFJZCkgc2V0Q29sdW1uRGlzcGxheUZvcm1hdChkYXRhSWQsIGZvcm1hdHMpO1xuICAgIH07XG5cbiAgICBvbk9wZW5Db25maWcgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93Q29uZmlnOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIG9uQ2xvc2VDb25maWcgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93Q29uZmlnOiBmYWxzZX0pO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7ZGF0YXNldHMsIGRhdGFJZCwgc2hvd0RhdGFzZXRUYWJsZSwgc2hvd1RhYiA9IHRydWV9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghZGF0YXNldHMgfHwgIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGl2ZURhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGNvbE1ldGEgPSB0aGlzLmNvbE1ldGEodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBjZWxsU2l6ZUNhY2hlID0gdGhpcy5jZWxsU2l6ZUNhY2hlKHRoaXMucHJvcHMpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTW9kYWwgY2xhc3NOYW1lPVwiZGF0YXNldC1tb2RhbFwiIGlkPVwiZGF0YXNldC1tb2RhbFwiPlxuICAgICAgICAgIDxDYW52YXNIYWNrIC8+XG4gICAgICAgICAgPFRhYmxlQ29udGFpbmVyPlxuICAgICAgICAgICAge3Nob3dUYWIgPyAoXG4gICAgICAgICAgICAgIDxEYXRhc2V0VGFic1xuICAgICAgICAgICAgICAgIGFjdGl2ZURhdGFzZXQ9e2FjdGl2ZURhdGFzZXR9XG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIHNob3dEYXRhc2V0VGFibGU9e3Nob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxTdHlsZWRDb25maWd1cmVCdXR0b24gY2xhc3NOYW1lPVwiZGlzcGxheS1jb25maWctYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDxHZWFyIG9uQ2xpY2s9e3RoaXMub25PcGVuQ29uZmlnfSAvPlxuICAgICAgICAgICAgICA8UG9ydGFsZWRcbiAgICAgICAgICAgICAgICByaWdodD17MjQwfVxuICAgICAgICAgICAgICAgIHRvcD17MjB9XG4gICAgICAgICAgICAgICAgaXNPcGVuZWQ9e3RoaXMuc3RhdGUuc2hvd0NvbmZpZ31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXt0aGlzLm9uQ2xvc2VDb25maWd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RGF0YVRhYmxlQ29uZmlnXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgY29sTWV0YT17Y29sTWV0YX1cbiAgICAgICAgICAgICAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXQ9e3RoaXMuc2V0Q29sdW1uRGlzcGxheUZvcm1hdH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e3RoaXMub25DbG9zZUNvbmZpZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1BvcnRhbGVkPlxuICAgICAgICAgICAgPC9TdHlsZWRDb25maWd1cmVCdXR0b24+XG4gICAgICAgICAgICB7ZGF0YXNldHNbZGF0YUlkXSA/IChcbiAgICAgICAgICAgICAgPERhdGFUYWJsZVxuICAgICAgICAgICAgICAgIGtleT17ZGF0YUlkfVxuICAgICAgICAgICAgICAgIGRhdGFJZD17ZGF0YUlkfVxuICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgY29sTWV0YT17Y29sTWV0YX1cbiAgICAgICAgICAgICAgICBjZWxsU2l6ZUNhY2hlPXtjZWxsU2l6ZUNhY2hlfVxuICAgICAgICAgICAgICAgIGRhdGFDb250YWluZXI9e2FjdGl2ZURhdGFzZXQuZGF0YUNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICBwaW5uZWRDb2x1bW5zPXthY3RpdmVEYXRhc2V0LnBpbm5lZENvbHVtbnN9XG4gICAgICAgICAgICAgICAgc29ydE9yZGVyPXthY3RpdmVEYXRhc2V0LnNvcnRPcmRlcn1cbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uPXthY3RpdmVEYXRhc2V0LnNvcnRDb2x1bW4gfHwgREVGQVVMVF9TT1JUX0NPTFVNTn1cbiAgICAgICAgICAgICAgICBjb3B5VGFibGVDb2x1bW49e3RoaXMuY29weVRhYmxlQ29sdW1ufVxuICAgICAgICAgICAgICAgIHBpblRhYmxlQ29sdW1uPXt0aGlzLnBpblRhYmxlQ29sdW1ufVxuICAgICAgICAgICAgICAgIHNvcnRUYWJsZUNvbHVtbj17dGhpcy5zb3J0VGFibGVDb2x1bW59XG4gICAgICAgICAgICAgICAgc2V0Q29sdW1uRGlzcGxheUZvcm1hdD17dGhpcy5zZXRDb2x1bW5EaXNwbGF5Rm9ybWF0fVxuICAgICAgICAgICAgICAgIGhhc1N0YXRzPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVGFibGVDb250YWluZXI+XG4gICAgICAgIDwvU3R5bGVkTW9kYWw+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgZmlndXJlIG91dCB0aGUgcHJvcGVyIHdheSB0byB0eXBlXG4gIHJldHVybiB3aXRoVGhlbWUoRGF0YVRhYmxlTW9kYWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhVGFibGVNb2RhbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFJQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxTQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFBeUUsSUFBQVcsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQWZ6RTtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEs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