UNPKG

kepler.gl

Version:

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

200 lines (198 loc) 40.5 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.LayerBlendingSelector = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl"); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/localization/src"); var _layerList = _interopRequireDefault(require("./layer-panel/layer-list")); var _datasetLayerGroup = _interopRequireDefault(require("./layer-panel/dataset-layer-group")); var _panelViewListToggle = _interopRequireDefault(require("./panel-view-list-toggle")); var _panelTitle = _interopRequireDefault(require("./panel-title")); var _datasetSection = _interopRequireDefault(require("./layer-panel/dataset-section")); var _addLayerButton = _interopRequireDefault(require("./layer-panel/add-layer-button")); var _itemSelector = _interopRequireDefault(require("../common/item-selector/item-selector")); var _styledComponents2 = require("../common/styled-components"); var _infoHelper = _interopRequireDefault(require("../common/info-helper")); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _src3 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _excluded = ["rasterTile"], _excluded2 = ["wms"]; var _templateObject, _templateObject2; 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var LayerBlendingSelector = exports.LayerBlendingSelector = _react["default"].memo(function (_ref) { var layerBlending = _ref.layerBlending, updateLayerBlending = _ref.updateLayerBlending, intl = _ref.intl, className = _ref.className; var labeledLayerBlendings = Object.keys(_src2.LAYER_BLENDINGS).reduce(function (acc, current) { return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, intl.formatMessage({ id: _src2.LAYER_BLENDINGS[current].label }), current)); }, {}); var onChange = (0, _react.useCallback)(function (blending) { return updateLayerBlending(labeledLayerBlendings[blending]); }, [updateLayerBlending, labeledLayerBlendings]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, { className: className }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: "layerBlending.title" })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { selectedItems: intl.formatMessage({ id: _src2.LAYER_BLENDINGS[layerBlending].label }), options: Object.keys(labeledLayerBlendings), multiSelect: false, searchable: false, onChange: onChange })); }); LayerBlendingSelector.displayName = 'LayerBlendingSelector'; var InfoHelperWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n float: right;\n"]))); var OverlayBlendingSelectorTitleRow = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n align-items: center;\n"]))); var OverlayBlendingSelector = _react["default"].memo(function (_ref2) { var overlayBlending = _ref2.overlayBlending, updateOverlayBlending = _ref2.updateOverlayBlending, intl = _ref2.intl, infoHelper = _ref2.infoHelper; var labeledOverlayBlendings = Object.keys(_src2.OVERLAY_BLENDINGS).reduce(function (acc, current) { return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, intl.formatMessage({ id: _src2.OVERLAY_BLENDINGS[current].label }), current)); }, {}); var onChange = (0, _react.useCallback)(function (blending) { return updateOverlayBlending(labeledOverlayBlendings[blending]); }, [updateOverlayBlending, labeledOverlayBlendings]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(OverlayBlendingSelectorTitleRow, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: "overlayBlending.title" })), /*#__PURE__*/_react["default"].createElement(InfoHelperWrapper, null, infoHelper)), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { selectedItems: intl.formatMessage({ id: _src2.OVERLAY_BLENDINGS[overlayBlending].label }), options: Object.keys(labeledOverlayBlendings), multiSelect: false, searchable: false, onChange: onChange })); }); OverlayBlendingSelector.displayName = 'OverlayBlendingSelector'; LayerManagerFactory.deps = [_layerList["default"], _datasetLayerGroup["default"], _panelViewListToggle["default"], _panelTitle["default"], _datasetSection["default"], _addLayerButton["default"], _infoHelper["default"]]; function LayerManagerFactory(LayerList, DatasetLayerGroup, PanelViewListToggle, PanelTitle, DatasetSection, AddLayerButton, InfoHelper) { var LayerManager = function LayerManager(_ref3) { var layers = _ref3.layers, datasets = _ref3.datasets, intl = _ref3.intl, layerOrder = _ref3.layerOrder, panelListView = _ref3.panelListView, panelMetadata = _ref3.panelMetadata, layerClasses = _ref3.layerClasses, layerBlending = _ref3.layerBlending, overlayBlending = _ref3.overlayBlending, showAddDataModal = _ref3.showAddDataModal, updateTableColor = _ref3.updateTableColor, showDatasetTable = _ref3.showDatasetTable, removeDataset = _ref3.removeDataset, uiStateActions = _ref3.uiStateActions, visStateActions = _ref3.visStateActions, mapStateActions = _ref3.mapStateActions; var addLayer = visStateActions.addLayer; var togglePanelListView = uiStateActions.togglePanelListView; var onAddLayer = (0, _react.useCallback)(function (dataset) { addLayer(undefined, dataset); }, [addLayer]); var onTogglePanelListView = (0, _react.useCallback)(function (listView) { togglePanelListView({ panelId: 'layer', listView: listView }); }, [togglePanelListView]); var isSortByDatasetMode = panelListView === _src2.PANEL_VIEW_TOGGLES.byDataset; // temp patch to hide layers that are in development var enableRasterTileLayer = (0, _src3.getApplicationConfig)().enableRasterTileLayer; var enableWMSLayer = (0, _src3.getApplicationConfig)().enableWMSLayer; var filteredLayerClasses = (0, _react.useMemo)(function () { var filteredClasses = layerClasses; if (!enableRasterTileLayer) { var _filteredClasses = filteredClasses, _rasterTile = _filteredClasses.rasterTile, rest = (0, _objectWithoutProperties2["default"])(_filteredClasses, _excluded); filteredClasses = rest; } if (!enableWMSLayer) { var _filteredClasses2 = filteredClasses, _wms = _filteredClasses2.wms, _rest = (0, _objectWithoutProperties2["default"])(_filteredClasses2, _excluded2); filteredClasses = _rest; } return filteredClasses; }, [enableRasterTileLayer, enableWMSLayer, layerClasses]); return /*#__PURE__*/_react["default"].createElement("div", { className: "layer-manager" }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(PanelViewListToggle, { togglePanelListView: onTogglePanelListView, mode: panelListView })), /*#__PURE__*/_react["default"].createElement(DatasetSection, { datasets: datasets, showDatasetTable: showDatasetTable, updateTableColor: updateTableColor, removeDataset: removeDataset, showDeleteDataset: true, showDatasetList: !isSortByDatasetMode, showAddDataModal: showAddDataModal }), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelDivider, null), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(PanelTitle, { className: "layer-manager-title", title: intl.formatMessage({ id: panelMetadata.label }) }, /*#__PURE__*/_react["default"].createElement(AddLayerButton, { datasets: datasets, onAdd: onAddLayer }))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, isSortByDatasetMode ? /*#__PURE__*/_react["default"].createElement(DatasetLayerGroup, { datasets: datasets, showDatasetTable: showDatasetTable, layers: layers, updateTableColor: updateTableColor, removeDataset: removeDataset, layerOrder: layerOrder, layerClasses: filteredLayerClasses, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, showDeleteDataset: true }) : /*#__PURE__*/_react["default"].createElement(LayerList, { layers: layers, datasets: datasets, layerOrder: layerOrder, uiStateActions: uiStateActions, visStateActions: visStateActions, mapStateActions: mapStateActions, layerClasses: filteredLayerClasses })), /*#__PURE__*/_react["default"].createElement(LayerBlendingSelector, { layerBlending: layerBlending, updateLayerBlending: visStateActions.updateLayerBlending, intl: intl }), /*#__PURE__*/_react["default"].createElement(OverlayBlendingSelector, { overlayBlending: overlayBlending, updateOverlayBlending: visStateActions.updateOverlayBlending, intl: intl, infoHelper: /*#__PURE__*/_react["default"].createElement(InfoHelper, { id: "overlayBlending-description", description: 'overlayBlending.description' }) })); }; return (0, _reactIntl.injectIntl)(LayerManager); } var _default = exports["default"] = LayerManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3NyYyIsIl9sYXllckxpc3QiLCJfZGF0YXNldExheWVyR3JvdXAiLCJfcGFuZWxWaWV3TGlzdFRvZ2dsZSIsIl9wYW5lbFRpdGxlIiwiX2RhdGFzZXRTZWN0aW9uIiwiX2FkZExheWVyQnV0dG9uIiwiX2l0ZW1TZWxlY3RvciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pbmZvSGVscGVyIiwiX3NyYzIiLCJfc3JjMyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiTGF5ZXJCbGVuZGluZ1NlbGVjdG9yIiwiZXhwb3J0cyIsIlJlYWN0IiwibWVtbyIsIl9yZWYiLCJsYXllckJsZW5kaW5nIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsImludGwiLCJjbGFzc05hbWUiLCJsYWJlbGVkTGF5ZXJCbGVuZGluZ3MiLCJMQVlFUl9CTEVORElOR1MiLCJyZWR1Y2UiLCJhY2MiLCJjdXJyZW50IiwiZm9ybWF0TWVzc2FnZSIsImlkIiwibGFiZWwiLCJvbkNoYW5nZSIsInVzZUNhbGxiYWNrIiwiYmxlbmRpbmciLCJjcmVhdGVFbGVtZW50IiwiU2lkZVBhbmVsU2VjdGlvbiIsIlBhbmVsTGFiZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwic2VsZWN0ZWRJdGVtcyIsIm9wdGlvbnMiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiLCJkaXNwbGF5TmFtZSIsIkluZm9IZWxwZXJXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJPdmVybGF5QmxlbmRpbmdTZWxlY3RvclRpdGxlUm93IiwiT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3IiLCJfcmVmMiIsIm92ZXJsYXlCbGVuZGluZyIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZyIsImluZm9IZWxwZXIiLCJsYWJlbGVkT3ZlcmxheUJsZW5kaW5ncyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiTGF5ZXJNYW5hZ2VyRmFjdG9yeSIsImRlcHMiLCJMYXllckxpc3RGYWN0b3J5IiwiRGF0YXNldExheWVyR3JvdXBGYWN0b3J5IiwiUGFuZWxWaWV3TGlzdFRvZ2dsZUZhY3RvcnkiLCJQYW5lbFRpdGxlRmFjdG9yeSIsIkRhdGFzZXRTZWN0aW9uRmFjdG9yeSIsIkFkZExheWVyQnV0dG9uRmFjdG9yeSIsIkluZm9IZWxwZXJGYWN0b3J5IiwiTGF5ZXJMaXN0IiwiRGF0YXNldExheWVyR3JvdXAiLCJQYW5lbFZpZXdMaXN0VG9nZ2xlIiwiUGFuZWxUaXRsZSIsIkRhdGFzZXRTZWN0aW9uIiwiQWRkTGF5ZXJCdXR0b24iLCJJbmZvSGVscGVyIiwiTGF5ZXJNYW5hZ2VyIiwiX3JlZjMiLCJsYXllcnMiLCJkYXRhc2V0cyIsImxheWVyT3JkZXIiLCJwYW5lbExpc3RWaWV3IiwicGFuZWxNZXRhZGF0YSIsImxheWVyQ2xhc3NlcyIsInNob3dBZGREYXRhTW9kYWwiLCJ1cGRhdGVUYWJsZUNvbG9yIiwic2hvd0RhdGFzZXRUYWJsZSIsInJlbW92ZURhdGFzZXQiLCJ1aVN0YXRlQWN0aW9ucyIsInZpc1N0YXRlQWN0aW9ucyIsIm1hcFN0YXRlQWN0aW9ucyIsImFkZExheWVyIiwidG9nZ2xlUGFuZWxMaXN0VmlldyIsIm9uQWRkTGF5ZXIiLCJkYXRhc2V0IiwidW5kZWZpbmVkIiwib25Ub2dnbGVQYW5lbExpc3RWaWV3IiwibGlzdFZpZXciLCJwYW5lbElkIiwiaXNTb3J0QnlEYXRhc2V0TW9kZSIsIlBBTkVMX1ZJRVdfVE9HR0xFUyIsImJ5RGF0YXNldCIsImVuYWJsZVJhc3RlclRpbGVMYXllciIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZW5hYmxlV01TTGF5ZXIiLCJmaWx0ZXJlZExheWVyQ2xhc3NlcyIsInVzZU1lbW8iLCJmaWx0ZXJlZENsYXNzZXMiLCJfZmlsdGVyZWRDbGFzc2VzIiwiX3Jhc3RlclRpbGUiLCJyYXN0ZXJUaWxlIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJfZmlsdGVyZWRDbGFzc2VzMiIsIl93bXMiLCJ3bXMiLCJtb2RlIiwic2hvd0RlbGV0ZURhdGFzZXQiLCJzaG93RGF0YXNldExpc3QiLCJTaWRlUGFuZWxEaXZpZGVyIiwidGl0bGUiLCJvbkFkZCIsImRlc2NyaXB0aW9uIiwiaW5qZWN0SW50bCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3JjL3NpZGUtcGFuZWwvbGF5ZXItbWFuYWdlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtpbmplY3RJbnRsLCBXcmFwcGVkQ29tcG9uZW50UHJvcHN9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IExheWVyTGlzdEZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC9sYXllci1saXN0JztcbmltcG9ydCBEYXRhc2V0TGF5ZXJHcm91cEZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC9kYXRhc2V0LWxheWVyLWdyb3VwJztcbmltcG9ydCBQYW5lbFZpZXdMaXN0VG9nZ2xlRmFjdG9yeSBmcm9tICcuL3BhbmVsLXZpZXctbGlzdC10b2dnbGUnO1xuaW1wb3J0IFBhbmVsVGl0bGVGYWN0b3J5IGZyb20gJy4vcGFuZWwtdGl0bGUnO1xuaW1wb3J0IERhdGFzZXRTZWN0aW9uRmFjdG9yeSBmcm9tICcuL2xheWVyLXBhbmVsL2RhdGFzZXQtc2VjdGlvbic7XG5pbXBvcnQgQWRkTGF5ZXJCdXR0b25GYWN0b3J5IGZyb20gJy4vbGF5ZXItcGFuZWwvYWRkLWxheWVyLWJ1dHRvbic7XG5cbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnLi4vY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5pbXBvcnQge1BhbmVsTGFiZWwsIFNpZGVQYW5lbERpdmlkZXIsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSW5mb0hlbHBlckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL2luZm8taGVscGVyJztcblxuaW1wb3J0IHtMQVlFUl9CTEVORElOR1MsIE9WRVJMQVlfQkxFTkRJTkdTLCBQQU5FTF9WSUVXX1RPR0dMRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3Nlc1R5cGV9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7VUlTdGF0ZUFjdGlvbnMsIFZpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBBY3Rpb25IYW5kbGVyfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtTaWRlUGFuZWxJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1BhbmVsTGlzdFZpZXd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxudHlwZSBMYXllckJsZW5kaW5nU2VsZWN0b3JQcm9wcyA9IHtcbiAgbGF5ZXJCbGVuZGluZzogc3RyaW5nO1xuICB1cGRhdGVMYXllckJsZW5kaW5nOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMudXBkYXRlTGF5ZXJCbGVuZGluZz47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn0gJiBXcmFwcGVkQ29tcG9uZW50UHJvcHM7XG5cbnR5cGUgT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JQcm9wcyA9IHtcbiAgb3ZlcmxheUJsZW5kaW5nOiBzdHJpbmc7XG4gIHVwZGF0ZU92ZXJsYXlCbGVuZGluZzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnVwZGF0ZU92ZXJsYXlCbGVuZGluZz47XG4gIGluZm9IZWxwZXI6IFJlYWN0LlJlYWN0Tm9kZTtcbn0gJiBXcmFwcGVkQ29tcG9uZW50UHJvcHM7XG5cbnR5cGUgTGF5ZXJNYW5hZ2VyUHJvcHMgPSB7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllck9yZGVyOiBzdHJpbmdbXTtcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlO1xuICBsYXllckJsZW5kaW5nOiBzdHJpbmc7XG4gIG92ZXJsYXlCbGVuZGluZzogc3RyaW5nO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgc2hvd0FkZERhdGFNb2RhbDogKCkgPT4gdm9pZDtcbiAgcmVtb3ZlRGF0YXNldDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVUlTdGF0ZUFjdGlvbnMub3BlbkRlbGV0ZU1vZGFsPjtcbiAgc2hvd0RhdGFzZXRUYWJsZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnNob3dEYXRhc2V0VGFibGU+O1xuICB1cGRhdGVUYWJsZUNvbG9yOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMudXBkYXRlVGFibGVDb2xvcj47XG4gIHBhbmVsTGlzdFZpZXc6IFBhbmVsTGlzdFZpZXc7XG4gIHBhbmVsTWV0YWRhdGE6IFNpZGVQYW5lbEl0ZW07XG59ICYgV3JhcHBlZENvbXBvbmVudFByb3BzO1xuXG5leHBvcnQgY29uc3QgTGF5ZXJCbGVuZGluZ1NlbGVjdG9yID0gUmVhY3QubWVtbyhcbiAgKHtsYXllckJsZW5kaW5nLCB1cGRhdGVMYXllckJsZW5kaW5nLCBpbnRsLCBjbGFzc05hbWV9OiBMYXllckJsZW5kaW5nU2VsZWN0b3JQcm9wcykgPT4ge1xuICAgIGNvbnN0IGxhYmVsZWRMYXllckJsZW5kaW5ncyA9IE9iamVjdC5rZXlzKExBWUVSX0JMRU5ESU5HUykucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudCkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogTEFZRVJfQkxFTkRJTkdTW2N1cnJlbnRdLmxhYmVsfSldOiBjdXJyZW50XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICBibGVuZGluZyA9PiB1cGRhdGVMYXllckJsZW5kaW5nKGxhYmVsZWRMYXllckJsZW5kaW5nc1tibGVuZGluZ10pLFxuICAgICAgW3VwZGF0ZUxheWVyQmxlbmRpbmcsIGxhYmVsZWRMYXllckJsZW5kaW5nc11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTaWRlUGFuZWxTZWN0aW9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJsYXllckJsZW5kaW5nLnRpdGxlXCIgLz5cbiAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddLmxhYmVsfSl9XG4gICAgICAgICAgb3B0aW9ucz17T2JqZWN0LmtleXMobGFiZWxlZExheWVyQmxlbmRpbmdzKX1cbiAgICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgICAgc2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICk7XG4gIH1cbik7XG5MYXllckJsZW5kaW5nU2VsZWN0b3IuZGlzcGxheU5hbWUgPSAnTGF5ZXJCbGVuZGluZ1NlbGVjdG9yJztcblxuY29uc3QgSW5mb0hlbHBlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBmbG9hdDogcmlnaHQ7XG5gO1xuXG5jb25zdCBPdmVybGF5QmxlbmRpbmdTZWxlY3RvclRpdGxlUm93ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yID0gUmVhY3QubWVtbyhcbiAgKHtvdmVybGF5QmxlbmRpbmcsIHVwZGF0ZU92ZXJsYXlCbGVuZGluZywgaW50bCwgaW5mb0hlbHBlcn06IE92ZXJsYXlCbGVuZGluZ1NlbGVjdG9yUHJvcHMpID0+IHtcbiAgICBjb25zdCBsYWJlbGVkT3ZlcmxheUJsZW5kaW5ncyA9IE9iamVjdC5rZXlzKE9WRVJMQVlfQkxFTkRJTkdTKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBPVkVSTEFZX0JMRU5ESU5HU1tjdXJyZW50XS5sYWJlbH0pXTogY3VycmVudFxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgYmxlbmRpbmcgPT4gdXBkYXRlT3ZlcmxheUJsZW5kaW5nKGxhYmVsZWRPdmVybGF5QmxlbmRpbmdzW2JsZW5kaW5nXSksXG4gICAgICBbdXBkYXRlT3ZlcmxheUJsZW5kaW5nLCBsYWJlbGVkT3ZlcmxheUJsZW5kaW5nc11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICA8T3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JUaXRsZVJvdz5cbiAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwib3ZlcmxheUJsZW5kaW5nLnRpdGxlXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPEluZm9IZWxwZXJXcmFwcGVyPntpbmZvSGVscGVyfTwvSW5mb0hlbHBlcldyYXBwZXI+XG4gICAgICAgIDwvT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JUaXRsZVJvdz5cbiAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6IE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10ubGFiZWx9KX1cbiAgICAgICAgICBvcHRpb25zPXtPYmplY3Qua2V5cyhsYWJlbGVkT3ZlcmxheUJsZW5kaW5ncyl9XG4gICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICApO1xuICB9XG4pO1xuT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3IuZGlzcGxheU5hbWUgPSAnT3ZlcmxheUJsZW5kaW5nU2VsZWN0b3InO1xuXG5MYXllck1hbmFnZXJGYWN0b3J5LmRlcHMgPSBbXG4gIExheWVyTGlzdEZhY3RvcnksXG4gIERhdGFzZXRMYXllckdyb3VwRmFjdG9yeSxcbiAgUGFuZWxWaWV3TGlzdFRvZ2dsZUZhY3RvcnksXG4gIFBhbmVsVGl0bGVGYWN0b3J5LFxuICBEYXRhc2V0U2VjdGlvbkZhY3RvcnksXG4gIEFkZExheWVyQnV0dG9uRmFjdG9yeSxcbiAgSW5mb0hlbHBlckZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIExheWVyTWFuYWdlckZhY3RvcnkoXG4gIExheWVyTGlzdDogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJMaXN0RmFjdG9yeT4sXG4gIERhdGFzZXRMYXllckdyb3VwOiBSZXR1cm5UeXBlPHR5cGVvZiBEYXRhc2V0TGF5ZXJHcm91cEZhY3Rvcnk+LFxuICBQYW5lbFZpZXdMaXN0VG9nZ2xlOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbFZpZXdMaXN0VG9nZ2xlRmFjdG9yeT4sXG4gIFBhbmVsVGl0bGU6IFJldHVyblR5cGU8dHlwZW9mIFBhbmVsVGl0bGVGYWN0b3J5PixcbiAgRGF0YXNldFNlY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIERhdGFzZXRTZWN0aW9uRmFjdG9yeT4sXG4gIEFkZExheWVyQnV0dG9uOiBSZXR1cm5UeXBlPHR5cGVvZiBBZGRMYXllckJ1dHRvbkZhY3Rvcnk+LFxuICBJbmZvSGVscGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBJbmZvSGVscGVyRmFjdG9yeT5cbikge1xuICBjb25zdCBMYXllck1hbmFnZXI6IFJlYWN0LkZDPExheWVyTWFuYWdlclByb3BzPiA9ICh7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzLFxuICAgIGludGwsXG4gICAgbGF5ZXJPcmRlcixcbiAgICBwYW5lbExpc3RWaWV3LFxuICAgIHBhbmVsTWV0YWRhdGEsXG4gICAgbGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQmxlbmRpbmcsXG4gICAgb3ZlcmxheUJsZW5kaW5nLFxuICAgIHNob3dBZGREYXRhTW9kYWwsXG4gICAgdXBkYXRlVGFibGVDb2xvcixcbiAgICBzaG93RGF0YXNldFRhYmxlLFxuICAgIHJlbW92ZURhdGFzZXQsXG4gICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgIG1hcFN0YXRlQWN0aW9uc1xuICB9KSA9PiB7XG4gICAgY29uc3Qge2FkZExheWVyfSA9IHZpc1N0YXRlQWN0aW9ucztcbiAgICBjb25zdCB7dG9nZ2xlUGFuZWxMaXN0Vmlld30gPSB1aVN0YXRlQWN0aW9ucztcbiAgICBjb25zdCBvbkFkZExheWVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZGF0YXNldDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGFkZExheWVyKHVuZGVmaW5lZCwgZGF0YXNldCk7XG4gICAgICB9LFxuICAgICAgW2FkZExheWVyXVxuICAgICk7XG5cbiAgICBjb25zdCBvblRvZ2dsZVBhbmVsTGlzdFZpZXcgPSB1c2VDYWxsYmFjayhcbiAgICAgIChsaXN0Vmlldzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRvZ2dsZVBhbmVsTGlzdFZpZXcoe3BhbmVsSWQ6ICdsYXllcicsIGxpc3RWaWV3fSk7XG4gICAgICB9LFxuICAgICAgW3RvZ2dsZVBhbmVsTGlzdFZpZXddXG4gICAgKTtcblxuICAgIGNvbnN0IGlzU29ydEJ5RGF0YXNldE1vZGUgPSBwYW5lbExpc3RWaWV3ID09PSBQQU5FTF9WSUVXX1RPR0dMRVMuYnlEYXRhc2V0O1xuXG4gICAgLy8gdGVtcCBwYXRjaCB0byBoaWRlIGxheWVycyB0aGF0IGFyZSBpbiBkZXZlbG9wbWVudFxuICAgIGNvbnN0IGVuYWJsZVJhc3RlclRpbGVMYXllciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmFzdGVyVGlsZUxheWVyO1xuICAgIGNvbnN0IGVuYWJsZVdNU0xheWVyID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVXTVNMYXllcjtcbiAgICBjb25zdCBmaWx0ZXJlZExheWVyQ2xhc3NlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgbGV0IGZpbHRlcmVkQ2xhc3NlcyA9IGxheWVyQ2xhc3NlcztcbiAgICAgIGlmICghZW5hYmxlUmFzdGVyVGlsZUxheWVyKSB7XG4gICAgICAgIGNvbnN0IHtyYXN0ZXJUaWxlOiBfcmFzdGVyVGlsZSwgLi4ucmVzdH0gPSBmaWx0ZXJlZENsYXNzZXM7XG4gICAgICAgIGZpbHRlcmVkQ2xhc3NlcyA9IHJlc3QgYXMgTGF5ZXJDbGFzc2VzVHlwZTtcbiAgICAgIH1cbiAgICAgIGlmICghZW5hYmxlV01TTGF5ZXIpIHtcbiAgICAgICAgY29uc3Qge3dtczogX3dtcywgLi4ucmVzdH0gPSBmaWx0ZXJlZENsYXNzZXM7XG4gICAgICAgIGZpbHRlcmVkQ2xhc3NlcyA9IHJlc3QgYXMgTGF5ZXJDbGFzc2VzVHlwZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWx0ZXJlZENsYXNzZXMgYXMgTGF5ZXJDbGFzc2VzVHlwZTtcbiAgICB9LCBbZW5hYmxlUmFzdGVyVGlsZUxheWVyLCBlbmFibGVXTVNMYXllciwgbGF5ZXJDbGFzc2VzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllci1tYW5hZ2VyXCI+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbFZpZXdMaXN0VG9nZ2xlIHRvZ2dsZVBhbmVsTGlzdFZpZXc9e29uVG9nZ2xlUGFuZWxMaXN0Vmlld30gbW9kZT17cGFuZWxMaXN0Vmlld30gLz5cbiAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICA8RGF0YXNldFNlY3Rpb25cbiAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICB1cGRhdGVUYWJsZUNvbG9yPXt1cGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgc2hvd0RlbGV0ZURhdGFzZXRcbiAgICAgICAgICBzaG93RGF0YXNldExpc3Q9eyFpc1NvcnRCeURhdGFzZXRNb2RlfVxuICAgICAgICAgIHNob3dBZGREYXRhTW9kYWw9e3Nob3dBZGREYXRhTW9kYWx9XG4gICAgICAgIC8+XG4gICAgICAgIDxTaWRlUGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbFRpdGxlXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllci1tYW5hZ2VyLXRpdGxlXCJcbiAgICAgICAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiBwYW5lbE1ldGFkYXRhLmxhYmVsfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFkZExheWVyQnV0dG9uIGRhdGFzZXRzPXtkYXRhc2V0c30gb25BZGQ9e29uQWRkTGF5ZXJ9IC8+XG4gICAgICAgICAgPC9QYW5lbFRpdGxlPlxuICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIHtpc1NvcnRCeURhdGFzZXRNb2RlID8gKFxuICAgICAgICAgICAgPERhdGFzZXRMYXllckdyb3VwXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17c2hvd0RhdGFzZXRUYWJsZX1cbiAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgIHVwZGF0ZVRhYmxlQ29sb3I9e3VwZGF0ZVRhYmxlQ29sb3J9XG4gICAgICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e3JlbW92ZURhdGFzZXR9XG4gICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgIGxheWVyQ2xhc3Nlcz17ZmlsdGVyZWRMYXllckNsYXNzZXN9XG4gICAgICAgICAgICAgIHVpU3RhdGVBY3Rpb25zPXt1aVN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zPXt2aXNTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBzaG93RGVsZXRlRGF0YXNldFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExheWVyTGlzdFxuICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICB1aVN0YXRlQWN0aW9ucz17dWlTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucz17dmlzU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnM9e21hcFN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzPXtmaWx0ZXJlZExheWVyQ2xhc3Nlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICA8TGF5ZXJCbGVuZGluZ1NlbGVjdG9yXG4gICAgICAgICAgbGF5ZXJCbGVuZGluZz17bGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICB1cGRhdGVMYXllckJsZW5kaW5nPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlTGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICBpbnRsPXtpbnRsfVxuICAgICAgICAvPlxuICAgICAgICA8T3ZlcmxheUJsZW5kaW5nU2VsZWN0b3JcbiAgICAgICAgICBvdmVybGF5QmxlbmRpbmc9e292ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmc9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVPdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgaW50bD17aW50bH1cbiAgICAgICAgICBpbmZvSGVscGVyPXtcbiAgICAgICAgICAgIDxJbmZvSGVscGVyXG4gICAgICAgICAgICAgIGlkPXtgb3ZlcmxheUJsZW5kaW5nLWRlc2NyaXB0aW9uYH1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249eydvdmVybGF5QmxlbmRpbmcuZGVzY3JpcHRpb24nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBpbmplY3RJbnRsKExheWVyTWFuYWdlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyTWFuYWdlckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLElBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFNLGtCQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxvQkFBQSxHQUFBSixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFB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