UNPKG

kepler.gl

Version:

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

230 lines (226 loc) 40.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.StyledSidePanelContent = void 0; exports["default"] = SidePanelFactory; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _constants = require("@kepler.gl/constants"); var _icons = require("./common/icons"); var _sideBar = _interopRequireDefault(require("./side-panel/side-bar")); var _panelHeader = _interopRequireDefault(require("./side-panel/panel-header")); var _panelToggle = _interopRequireDefault(require("./side-panel/panel-toggle")); var _layerManager = _interopRequireDefault(require("./side-panel/layer-manager")); var _filterManager = _interopRequireDefault(require("./side-panel/filter-manager")); var _interactionManager = _interopRequireDefault(require("./side-panel/interaction-manager")); var _mapManager = _interopRequireDefault(require("./side-panel/map-manager")); var _customPanel = _interopRequireDefault(require("./side-panel/custom-panel")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _templateObject; // 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; } var StyledSidePanelContent = exports.StyledSidePanelContent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n flex-grow: 1;\n padding: ", "px;\n overflow-y: scroll;\n overflow-x: hidden;\n\n .side-panel__content__inner {\n display: flex;\n height: 100%;\n flex-direction: column;\n }\n"])), function (props) { return props.theme.sidePanelScrollBar; }, function (props) { return props.theme.sidePanelInnerPadding; }); SidePanelFactory.deps = [_sideBar["default"], _panelHeader["default"], _panelToggle["default"], _layerManager["default"], _filterManager["default"], _interactionManager["default"], _mapManager["default"], _customPanel["default"]]; /** * Vertical sidebar containing input components for the rendering layers */ function SidePanelFactory(Sidebar, PanelHeader, PanelToggle, LayerManager, FilterManager, InteractionManager, MapManager, CustomPanels) { // inject components var SIDEBAR_COMPONENTS = { layer: LayerManager, filter: FilterManager, interaction: InteractionManager, map: MapManager }; var SIDEBAR_ICONS = { layer: function layer(props) { return /*#__PURE__*/_react["default"].createElement(_icons.Layers, (0, _extends2["default"])({}, props, { height: "18px" })); }, filter: function filter(props) { return /*#__PURE__*/_react["default"].createElement(_icons.FilterFunnel, (0, _extends2["default"])({}, props, { height: "18px" })); }, interaction: function interaction(props) { return /*#__PURE__*/_react["default"].createElement(_icons.PointerClick, (0, _extends2["default"])({}, props, { height: "18px" })); }, map: function map(props) { return /*#__PURE__*/_react["default"].createElement(_icons.BaseMap, (0, _extends2["default"])({}, props, { height: "18px" })); } }; // We should defined sidebar panels here but keeping them for backward compatible var defaultSidePanels = _constants.SIDEBAR_PANELS.map(function (component) { return _objectSpread(_objectSpread({}, component), {}, { component: SIDEBAR_COMPONENTS[component.id], iconComponent: SIDEBAR_ICONS[component.id] }); }); var fullPanels = [].concat((0, _toConsumableArray2["default"])(defaultSidePanels), (0, _toConsumableArray2["default"])(CustomPanels.panels || [])); var getCustomPanelProps = CustomPanels.getProps || function () { return {}; }; // eslint-disable-next-line max-statements var SidePanel = function SidePanel(props) { var appName = props.appName, appWebsite = props.appWebsite, _props$availableProvi = props.availableProviders, availableProviders = _props$availableProvi === void 0 ? {} : _props$availableProvi, datasets = props.datasets, filters = props.filters, layers = props.layers, layerBlending = props.layerBlending, overlayBlending = props.overlayBlending, layerClasses = props.layerClasses, layerOrder = props.layerOrder, interactionConfig = props.interactionConfig, _props$panels = props.panels, panels = _props$panels === void 0 ? fullPanels : _props$panels, _props$mapInfo = props.mapInfo, mapInfo = _props$mapInfo === void 0 ? {} : _props$mapInfo, mapSaved = props.mapSaved, mapStateActions = props.mapStateActions, mapStyle = props.mapStyle, mapStyleActions = props.mapStyleActions, onSaveMap = props.onSaveMap, uiState = props.uiState, uiStateActions = props.uiStateActions, visStateActions = props.visStateActions, version = props.version, width = props.width; var openDeleteModal = uiStateActions.openDeleteModal, toggleModal = uiStateActions.toggleModal, toggleSidePanel = uiStateActions.toggleSidePanel; var activeSidePanel = uiState.activeSidePanel; var setMapInfo = visStateActions.setMapInfo, showDatasetTable = visStateActions.showDatasetTable, updateTableColor = visStateActions.updateTableColor; var hasShare = availableProviders.hasShare, hasStorage = availableProviders.hasStorage; var title = mapInfo.title; var isOpen = Boolean(activeSidePanel); var _onOpenOrClose = (0, _react.useCallback)(function () { return toggleSidePanel(activeSidePanel ? '' : 'layer'); }, [activeSidePanel, toggleSidePanel]); var onClickExportImage = (0, _react.useCallback)(function () { return toggleModal(_constants.EXPORT_IMAGE_ID); }, [toggleModal]); var onClickExportData = (0, _react.useCallback)(function () { return toggleModal(_constants.EXPORT_DATA_ID); }, [toggleModal]); var onClickExportMap = (0, _react.useCallback)(function () { return toggleModal(_constants.EXPORT_MAP_ID); }, [toggleModal]); var onClickSaveToStorage = (0, _react.useCallback)(function () { return toggleModal(mapSaved ? _constants.OVERWRITE_MAP_ID : _constants.SAVE_MAP_ID); }, [mapSaved, toggleModal]); var onClickSaveAsToStorage = (0, _react.useCallback)(function () { setMapInfo({ title: "".concat(title || 'Kepler.gl', " (Copy)") }); toggleModal(_constants.SAVE_MAP_ID); }, [title, setMapInfo, toggleModal]); var onClickShareMap = (0, _react.useCallback)(function () { return toggleModal(_constants.SHARE_MAP_ID); }, [toggleModal]); var onShowDatasetTable = (0, _react.useCallback)(function (dataId) { return showDatasetTable(dataId); }, [showDatasetTable]); var onUpdateTableColor = (0, _react.useCallback)(function (dataId, newColor) { return updateTableColor(dataId, newColor); }, [updateTableColor]); var onShowAddDataModal = (0, _react.useCallback)(function () { return toggleModal(_constants.ADD_DATA_ID); }, [toggleModal]); var onShowAddMapStyleModal = (0, _react.useCallback)(function () { return toggleModal(_constants.ADD_MAP_STYLE_ID); }, [toggleModal]); var onRemoveDataset = (0, _react.useCallback)(function (dataId) { return openDeleteModal(dataId); }, [openDeleteModal]); var currentPanel = (0, _react.useMemo)(function () { return panels.find(function (_ref) { var id = _ref.id; return id === activeSidePanel; }) || null; }, [activeSidePanel, panels]); var customPanelProps = (0, _react.useMemo)(function () { return getCustomPanelProps(props); }, [props]); var PanelComponent = currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.component; return /*#__PURE__*/_react["default"].createElement(Sidebar, { width: width, isOpen: isOpen, shouldShowCollapseButton: uiState.isSidePanelCloseButtonVisible, minifiedWidth: 0, onOpenOrClose: _onOpenOrClose }, /*#__PURE__*/_react["default"].createElement(PanelHeader, { appName: appName, version: version, appWebsite: appWebsite, visibleDropdown: uiState.visibleDropdown, showExportDropdown: uiStateActions.showExportDropdown, hideExportDropdown: uiStateActions.hideExportDropdown, onExportImage: onClickExportImage, onExportData: onClickExportData, onExportMap: onClickExportMap, onSaveMap: hasStorage ? onSaveMap : undefined, onSaveToStorage: hasStorage ? onClickSaveToStorage : null, onSaveAsToStorage: hasStorage && mapSaved ? onClickSaveAsToStorage : null, onShareMap: hasShare ? onClickShareMap : null }), /*#__PURE__*/_react["default"].createElement(PanelToggle, { panels: panels, activePanel: activeSidePanel, togglePanel: uiStateActions.toggleSidePanel }), /*#__PURE__*/_react["default"].createElement(StyledSidePanelContent, { className: "side-panel__content" }, /*#__PURE__*/_react["default"].createElement("div", { className: "side-panel__content__inner" }, PanelComponent ? /*#__PURE__*/_react["default"].createElement(PanelComponent, { datasets: datasets, filters: filters, layers: layers, layerClasses: layerClasses, layerOrder: layerOrder, layerBlending: layerBlending, overlayBlending: overlayBlending, mapStyle: mapStyle, mapStyleActions: mapStyleActions, mapStateActions: mapStateActions, interactionConfig: interactionConfig, removeDataset: onRemoveDataset, showDatasetTable: onShowDatasetTable, updateTableColor: onUpdateTableColor, showAddDataModal: onShowAddDataModal, showAddMapStyleModal: onShowAddMapStyleModal, uiStateActions: uiStateActions, visStateActions: visStateActions, panelMetadata: currentPanel, panelListView: (currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.id) === 'layer' ? uiState.layerPanelListView : (currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.id) === 'filter' ? uiState.filterPanelListView : null }) : null, /*#__PURE__*/_react["default"].createElement(CustomPanels, (0, _extends2["default"])({}, customPanelProps, { activeSidePanel: activeSidePanel, updateTableColor: onUpdateTableColor }))))); }; SidePanel.defaultPanels = fullPanels; return SidePanel; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2ljb25zIiwiX3NpZGVCYXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BhbmVsSGVhZGVyIiwiX3BhbmVsVG9nZ2xlIiwiX2xheWVyTWFuYWdlciIsIl9maWx0ZXJNYW5hZ2VyIiwiX2ludGVyYWN0aW9uTWFuYWdlciIsIl9tYXBNYW5hZ2VyIiwiX2N1c3RvbVBhbmVsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJTdHlsZWRTaWRlUGFuZWxDb250ZW50IiwiZXhwb3J0cyIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsInNpZGVQYW5lbFNjcm9sbEJhciIsInNpZGVQYW5lbElubmVyUGFkZGluZyIsIlNpZGVQYW5lbEZhY3RvcnkiLCJkZXBzIiwiU2lkZWJhckZhY3RvcnkiLCJQYW5lbEhlYWRlckZhY3RvcnkiLCJQYW5lbFRvZ2dsZUZhY3RvcnkiLCJMYXllck1hbmFnZXJGYWN0b3J5IiwiRmlsdGVyTWFuYWdlckZhY3RvcnkiLCJJbnRlcmFjdGlvbk1hbmFnZXJGYWN0b3J5IiwiTWFwTWFuYWdlckZhY3RvcnkiLCJDdXN0b21QYW5lbHNGYWN0b3J5IiwiU2lkZWJhciIsIlBhbmVsSGVhZGVyIiwiUGFuZWxUb2dnbGUiLCJMYXllck1hbmFnZXIiLCJGaWx0ZXJNYW5hZ2VyIiwiSW50ZXJhY3Rpb25NYW5hZ2VyIiwiTWFwTWFuYWdlciIsIkN1c3RvbVBhbmVscyIsIlNJREVCQVJfQ09NUE9ORU5UUyIsImxheWVyIiwiaW50ZXJhY3Rpb24iLCJtYXAiLCJTSURFQkFSX0lDT05TIiwiY3JlYXRlRWxlbWVudCIsIkxheWVycyIsIl9leHRlbmRzMiIsImhlaWdodCIsIkZpbHRlckZ1bm5lbCIsIlBvaW50ZXJDbGljayIsIkJhc2VNYXAiLCJkZWZhdWx0U2lkZVBhbmVscyIsIlNJREVCQVJfUEFORUxTIiwiY29tcG9uZW50IiwiaWQiLCJpY29uQ29tcG9uZW50IiwiZnVsbFBhbmVscyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJwYW5lbHMiLCJnZXRDdXN0b21QYW5lbFByb3BzIiwiZ2V0UHJvcHMiLCJTaWRlUGFuZWwiLCJhcHBOYW1lIiwiYXBwV2Vic2l0ZSIsIl9wcm9wcyRhdmFpbGFibGVQcm92aSIsImF2YWlsYWJsZVByb3ZpZGVycyIsImRhdGFzZXRzIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJsYXllckNsYXNzZXMiLCJsYXllck9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJfcHJvcHMkcGFuZWxzIiwiX3Byb3BzJG1hcEluZm8iLCJtYXBJbmZvIiwibWFwU2F2ZWQiLCJtYXBTdGF0ZUFjdGlvbnMiLCJtYXBTdHlsZSIsIm1hcFN0eWxlQWN0aW9ucyIsIm9uU2F2ZU1hcCIsInVpU3RhdGUiLCJ1aVN0YXRlQWN0aW9ucyIsInZpc1N0YXRlQWN0aW9ucyIsInZlcnNpb24iLCJ3aWR0aCIsIm9wZW5EZWxldGVNb2RhbCIsInRvZ2dsZU1vZGFsIiwidG9nZ2xlU2lkZVBhbmVsIiwiYWN0aXZlU2lkZVBhbmVsIiwic2V0TWFwSW5mbyIsInNob3dEYXRhc2V0VGFibGUiLCJ1cGRhdGVUYWJsZUNvbG9yIiwiaGFzU2hhcmUiLCJoYXNTdG9yYWdlIiwidGl0bGUiLCJpc09wZW4iLCJCb29sZWFuIiwiX29uT3Blbk9yQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uQ2xpY2tFeHBvcnRJbWFnZSIsIkVYUE9SVF9JTUFHRV9JRCIsIm9uQ2xpY2tFeHBvcnREYXRhIiwiRVhQT1JUX0RBVEFfSUQiLCJvbkNsaWNrRXhwb3J0TWFwIiwiRVhQT1JUX01BUF9JRCIsIm9uQ2xpY2tTYXZlVG9TdG9yYWdlIiwiT1ZFUldSSVRFX01BUF9JRCIsIlNBVkVfTUFQX0lEIiwib25DbGlja1NhdmVBc1RvU3RvcmFnZSIsIm9uQ2xpY2tTaGFyZU1hcCIsIlNIQVJFX01BUF9JRCIsIm9uU2hvd0RhdGFzZXRUYWJsZSIsImRhdGFJZCIsIm9uVXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwib25TaG93QWRkRGF0YU1vZGFsIiwiQUREX0RBVEFfSUQiLCJvblNob3dBZGRNYXBTdHlsZU1vZGFsIiwiQUREX01BUF9TVFlMRV9JRCIsIm9uUmVtb3ZlRGF0YXNldCIsImN1cnJlbnRQYW5lbCIsInVzZU1lbW8iLCJmaW5kIiwiX3JlZiIsImN1c3RvbVBhbmVsUHJvcHMiLCJQYW5lbENvbXBvbmVudCIsInNob3VsZFNob3dDb2xsYXBzZUJ1dHRvbiIsImlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlIiwibWluaWZpZWRXaWR0aCIsIm9uT3Blbk9yQ2xvc2UiLCJ2aXNpYmxlRHJvcGRvd24iLCJzaG93RXhwb3J0RHJvcGRvd24iLCJoaWRlRXhwb3J0RHJvcGRvd24iLCJvbkV4cG9ydEltYWdlIiwib25FeHBvcnREYXRhIiwib25FeHBvcnRNYXAiLCJ1bmRlZmluZWQiLCJvblNhdmVUb1N0b3JhZ2UiLCJvblNhdmVBc1RvU3RvcmFnZSIsIm9uU2hhcmVNYXAiLCJhY3RpdmVQYW5lbCIsInRvZ2dsZVBhbmVsIiwiY2xhc3NOYW1lIiwicmVtb3ZlRGF0YXNldCIsInNob3dBZGREYXRhTW9kYWwiLCJzaG93QWRkTWFwU3R5bGVNb2RhbCIsInBhbmVsTWV0YWRhdGEiLCJwYW5lbExpc3RWaWV3IiwibGF5ZXJQYW5lbExpc3RWaWV3IiwiZmlsdGVyUGFuZWxMaXN0VmlldyIsImRlZmF1bHRQYW5lbHMiXSwic291cmNlcyI6WyIuLi9zcmMvc2lkZS1wYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtcbiAgRVhQT1JUX0RBVEFfSUQsXG4gIEVYUE9SVF9NQVBfSUQsXG4gIFNIQVJFX01BUF9JRCxcbiAgU0lERUJBUl9QQU5FTFMsXG4gIE9WRVJXUklURV9NQVBfSUQsXG4gIFNBVkVfTUFQX0lELFxuICBFWFBPUlRfSU1BR0VfSUQsXG4gIEFERF9EQVRBX0lELFxuICBBRERfTUFQX1NUWUxFX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtCYXNlTWFwLCBMYXllcnMsIEZpbHRlckZ1bm5lbCwgUG9pbnRlckNsaWNrfSBmcm9tICcuL2NvbW1vbi9pY29ucyc7XG5cbmltcG9ydCBTaWRlYmFyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvc2lkZS1iYXInO1xuaW1wb3J0IFBhbmVsSGVhZGVyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyJztcbmltcG9ydCBQYW5lbFRvZ2dsZUZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL3BhbmVsLXRvZ2dsZSc7XG5pbXBvcnQgTGF5ZXJNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvbGF5ZXItbWFuYWdlcic7XG5pbXBvcnQgRmlsdGVyTWFuYWdlckZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL2ZpbHRlci1tYW5hZ2VyJztcbmltcG9ydCBJbnRlcmFjdGlvbk1hbmFnZXJGYWN0b3J5IGZyb20gJy4vc2lkZS1wYW5lbC9pbnRlcmFjdGlvbi1tYW5hZ2VyJztcbmltcG9ydCBNYXBNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvbWFwLW1hbmFnZXInO1xuaW1wb3J0IEN1c3RvbVBhbmVsc0ZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL2N1c3RvbS1wYW5lbCc7XG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtTaWRlUGFuZWxQcm9wcywgU2lkZVBhbmVsSXRlbX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRTaWRlUGFuZWxDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxTY3JvbGxCYXJ9O1xuICBmbGV4LWdyb3c6IDE7XG4gIHBhZGRpbmc6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsSW5uZXJQYWRkaW5nfXB4O1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcblxuICAuc2lkZS1wYW5lbF9fY29udGVudF9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cbmA7XG5cblNpZGVQYW5lbEZhY3RvcnkuZGVwcyA9IFtcbiAgU2lkZWJhckZhY3RvcnksXG4gIFBhbmVsSGVhZGVyRmFjdG9yeSxcbiAgUGFuZWxUb2dnbGVGYWN0b3J5LFxuICBMYXllck1hbmFnZXJGYWN0b3J5LFxuICBGaWx0ZXJNYW5hZ2VyRmFjdG9yeSxcbiAgSW50ZXJhY3Rpb25NYW5hZ2VyRmFjdG9yeSxcbiAgTWFwTWFuYWdlckZhY3RvcnksXG4gIEN1c3RvbVBhbmVsc0ZhY3Rvcnlcbl07XG5cbi8qKlxuICogVmVydGljYWwgc2lkZWJhciBjb250YWluaW5nIGlucHV0IGNvbXBvbmVudHMgZm9yIHRoZSByZW5kZXJpbmcgbGF5ZXJzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNpZGVQYW5lbEZhY3RvcnkoXG4gIFNpZGViYXI6IFJldHVyblR5cGU8dHlwZW9mIFNpZGViYXJGYWN0b3J5PixcbiAgUGFuZWxIZWFkZXI6IFJldHVyblR5cGU8dHlwZW9mIFBhbmVsSGVhZGVyRmFjdG9yeT4sXG4gIFBhbmVsVG9nZ2xlOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbFRvZ2dsZUZhY3Rvcnk+LFxuICBMYXllck1hbmFnZXI6IFJldHVyblR5cGU8dHlwZW9mIExheWVyTWFuYWdlckZhY3Rvcnk+LFxuICBGaWx0ZXJNYW5hZ2VyOiBSZXR1cm5UeXBlPHR5cGVvZiBGaWx0ZXJNYW5hZ2VyRmFjdG9yeT4sXG4gIEludGVyYWN0aW9uTWFuYWdlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW50ZXJhY3Rpb25NYW5hZ2VyRmFjdG9yeT4sXG4gIE1hcE1hbmFnZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcE1hbmFnZXJGYWN0b3J5PixcbiAgQ3VzdG9tUGFuZWxzOiBSZXR1cm5UeXBlPHR5cGVvZiBDdXN0b21QYW5lbHNGYWN0b3J5PlxuKSB7XG4gIC8vIGluamVjdCBjb21wb25lbnRzXG4gIGNvbnN0IFNJREVCQVJfQ09NUE9ORU5UUyA9IHtcbiAgICBsYXllcjogTGF5ZXJNYW5hZ2VyLFxuICAgIGZpbHRlcjogRmlsdGVyTWFuYWdlcixcbiAgICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb25NYW5hZ2VyLFxuICAgIG1hcDogTWFwTWFuYWdlclxuICB9O1xuXG4gIGNvbnN0IFNJREVCQVJfSUNPTlMgPSB7XG4gICAgbGF5ZXI6IHByb3BzID0+IDxMYXllcnMgey4uLnByb3BzfSBoZWlnaHQ9XCIxOHB4XCIgLz4sXG4gICAgZmlsdGVyOiBwcm9wcyA9PiA8RmlsdGVyRnVubmVsIHsuLi5wcm9wc30gaGVpZ2h0PVwiMThweFwiIC8+LFxuICAgIGludGVyYWN0aW9uOiBwcm9wcyA9PiA8UG9pbnRlckNsaWNrIHsuLi5wcm9wc30gaGVpZ2h0PVwiMThweFwiIC8+LFxuICAgIG1hcDogcHJvcHMgPT4gPEJhc2VNYXAgey4uLnByb3BzfSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgfTtcblxuICAvLyBXZSBzaG91bGQgZGVmaW5lZCBzaWRlYmFyIHBhbmVscyBoZXJlIGJ1dCBrZWVwaW5nIHRoZW0gZm9yIGJhY2t3YXJkIGNvbXBhdGlibGVcbiAgY29uc3QgZGVmYXVsdFNpZGVQYW5lbHM6IFNpZGVQYW5lbEl0ZW1bXSA9IFNJREVCQVJfUEFORUxTLm1hcChjb21wb25lbnQgPT4gKHtcbiAgICAuLi5jb21wb25lbnQsXG4gICAgY29tcG9uZW50OiBTSURFQkFSX0NPTVBPTkVOVFNbY29tcG9uZW50LmlkXSxcbiAgICBpY29uQ29tcG9uZW50OiBTSURFQkFSX0lDT05TW2NvbXBvbmVudC5pZF1cbiAgfSkpO1xuXG4gIGNvbnN0IGZ1bGxQYW5lbHMgPSBbLi4uZGVmYXVsdFNpZGVQYW5lbHMsIC4uLihDdXN0b21QYW5lbHMucGFuZWxzIHx8IFtdKV07XG5cbiAgY29uc3QgZ2V0Q3VzdG9tUGFuZWxQcm9wcyA9IEN1c3RvbVBhbmVscy5nZXRQcm9wcyB8fCAoKCkgPT4gKHt9KSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIGNvbnN0IFNpZGVQYW5lbDogUmVhY3QuRkM8U2lkZVBhbmVsUHJvcHM+ICYge2RlZmF1bHRQYW5lbHM6IFNpZGVQYW5lbFByb3BzWydwYW5lbHMnXX0gPSAoXG4gICAgcHJvcHM6IFNpZGVQYW5lbFByb3BzXG4gICkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcE5hbWUsXG4gICAgICBhcHBXZWJzaXRlLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzID0ge30sXG4gICAgICBkYXRhc2V0cyxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBsYXllcnMsXG4gICAgICBsYXllckJsZW5kaW5nLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nLFxuICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgbGF5ZXJPcmRlcixcbiAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgcGFuZWxzID0gZnVsbFBhbmVscyxcbiAgICAgIG1hcEluZm8gPSB7fSxcbiAgICAgIG1hcFNhdmVkLFxuICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgbWFwU3R5bGUsXG4gICAgICBtYXBTdHlsZUFjdGlvbnMsXG4gICAgICBvblNhdmVNYXAsXG4gICAgICB1aVN0YXRlLFxuICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgd2lkdGhcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge29wZW5EZWxldGVNb2RhbCwgdG9nZ2xlTW9kYWwsIHRvZ2dsZVNpZGVQYW5lbH0gPSB1aVN0YXRlQWN0aW9ucztcbiAgICBjb25zdCB7YWN0aXZlU2lkZVBhbmVsfSA9IHVpU3RhdGU7XG4gICAgY29uc3Qge3NldE1hcEluZm8sIHNob3dEYXRhc2V0VGFibGUsIHVwZGF0ZVRhYmxlQ29sb3J9ID0gdmlzU3RhdGVBY3Rpb25zO1xuICAgIGNvbnN0IHtoYXNTaGFyZSwgaGFzU3RvcmFnZX0gPSBhdmFpbGFibGVQcm92aWRlcnM7XG5cbiAgICBjb25zdCB7dGl0bGV9ID0gbWFwSW5mbztcblxuICAgIGNvbnN0IGlzT3BlbiA9IEJvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKTtcblxuICAgIGNvbnN0IF9vbk9wZW5PckNsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiB0b2dnbGVTaWRlUGFuZWwoYWN0aXZlU2lkZVBhbmVsID8gJycgOiAnbGF5ZXInKSxcbiAgICAgIFthY3RpdmVTaWRlUGFuZWwsIHRvZ2dsZVNpZGVQYW5lbF1cbiAgICApO1xuXG4gICAgY29uc3Qgb25DbGlja0V4cG9ydEltYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4gdG9nZ2xlTW9kYWwoRVhQT1JUX0lNQUdFX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25DbGlja0V4cG9ydERhdGEgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChFWFBPUlRfREFUQV9JRCksIFt0b2dnbGVNb2RhbF0pO1xuICAgIGNvbnN0IG9uQ2xpY2tFeHBvcnRNYXAgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChFWFBPUlRfTUFQX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25DbGlja1NhdmVUb1N0b3JhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICgpID0+IHRvZ2dsZU1vZGFsKG1hcFNhdmVkID8gT1ZFUldSSVRFX01BUF9JRCA6IFNBVkVfTUFQX0lEKSxcbiAgICAgIFttYXBTYXZlZCwgdG9nZ2xlTW9kYWxdXG4gICAgKTtcbiAgICBjb25zdCBvbkNsaWNrU2F2ZUFzVG9TdG9yYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0TWFwSW5mbyh7XG4gICAgICAgIHRpdGxlOiBgJHt0aXRsZSB8fCAnS2VwbGVyLmdsJ30gKENvcHkpYFxuICAgICAgfSk7XG5cbiAgICAgIHRvZ2dsZU1vZGFsKFNBVkVfTUFQX0lEKTtcbiAgICB9LCBbdGl0bGUsIHNldE1hcEluZm8sIHRvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25DbGlja1NoYXJlTWFwID0gdXNlQ2FsbGJhY2soKCkgPT4gdG9nZ2xlTW9kYWwoU0hBUkVfTUFQX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25TaG93RGF0YXNldFRhYmxlID0gdXNlQ2FsbGJhY2soZGF0YUlkID0+IHNob3dEYXRhc2V0VGFibGUoZGF0YUlkKSwgW3Nob3dEYXRhc2V0VGFibGVdKTtcbiAgICBjb25zdCBvblVwZGF0ZVRhYmxlQ29sb3IgPSB1c2VDYWxsYmFjayhcbiAgICAgIChkYXRhSWQsIG5ld0NvbG9yKSA9PiB1cGRhdGVUYWJsZUNvbG9yKGRhdGFJZCwgbmV3Q29sb3IpLFxuICAgICAgW3VwZGF0ZVRhYmxlQ29sb3JdXG4gICAgKTtcbiAgICBjb25zdCBvblNob3dBZGREYXRhTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChBRERfREFUQV9JRCksIFt0b2dnbGVNb2RhbF0pO1xuICAgIGNvbnN0IG9uU2hvd0FkZE1hcFN0eWxlTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChBRERfTUFQX1NUWUxFX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25SZW1vdmVEYXRhc2V0ID0gdXNlQ2FsbGJhY2soZGF0YUlkID0+IG9wZW5EZWxldGVNb2RhbChkYXRhSWQpLCBbb3BlbkRlbGV0ZU1vZGFsXSk7XG5cbiAgICBjb25zdCBjdXJyZW50UGFuZWwgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gcGFuZWxzLmZpbmQoKHtpZH0pID0+IGlkID09PSBhY3RpdmVTaWRlUGFuZWwpIHx8IG51bGwsXG4gICAgICBbYWN0aXZlU2lkZVBhbmVsLCBwYW5lbHNdXG4gICAgKTtcblxuICAgIGNvbnN0IGN1c3RvbVBhbmVsUHJvcHMgPSB1c2VNZW1vKCgpID0+IGdldEN1c3RvbVBhbmVsUHJvcHMocHJvcHMpLCBbcHJvcHNdKSBhcyBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBhbnlcbiAgICA+O1xuICAgIGNvbnN0IFBhbmVsQ29tcG9uZW50ID0gY3VycmVudFBhbmVsPy5jb21wb25lbnQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNpZGViYXJcbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgc2hvdWxkU2hvd0NvbGxhcHNlQnV0dG9uPXt1aVN0YXRlLmlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlfVxuICAgICAgICBtaW5pZmllZFdpZHRoPXswfVxuICAgICAgICBvbk9wZW5PckNsb3NlPXtfb25PcGVuT3JDbG9zZX1cbiAgICAgID5cbiAgICAgICAgPFBhbmVsSGVhZGVyXG4gICAgICAgICAgYXBwTmFtZT17YXBwTmFtZX1cbiAgICAgICAgICB2ZXJzaW9uPXt2ZXJzaW9ufVxuICAgICAgICAgIGFwcFdlYnNpdGU9e2FwcFdlYnNpdGV9XG4gICAgICAgICAgdmlzaWJsZURyb3Bkb3duPXt1aVN0YXRlLnZpc2libGVEcm9wZG93bn1cbiAgICAgICAgICBzaG93RXhwb3J0RHJvcGRvd249e3VpU3RhdGVBY3Rpb25zLnNob3dFeHBvcnREcm9wZG93bn1cbiAgICAgICAgICBoaWRlRXhwb3J0RHJvcGRvd249e3VpU3RhdGVBY3Rpb25zLmhpZGVFeHBvcnREcm9wZG93bn1cbiAgICAgICAgICBvbkV4cG9ydEltYWdlPXtvbkNsaWNrRXhwb3J0SW1hZ2V9XG4gICAgICAgICAgb25FeHBvcnREYXRhPXtvbkNsaWNrRXhwb3J0RGF0YX1cbiAgICAgICAgICBvbkV4cG9ydE1hcD17b25DbGlja0V4cG9ydE1hcH1cbiAgICAgICAgICBvblNhdmVNYXA9e2hhc1N0b3JhZ2UgPyBvblNhdmVNYXAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25TYXZlVG9TdG9yYWdlPXtoYXNTdG9yYWdlID8gb25DbGlja1NhdmVUb1N0b3JhZ2UgOiBudWxsfVxuICAgICAgICAgIG9uU2F2ZUFzVG9TdG9yYWdlPXtoYXNTdG9yYWdlICYmIG1hcFNhdmVkID8gb25DbGlja1NhdmVBc1RvU3RvcmFnZSA6IG51bGx9XG4gICAgICAgICAgb25TaGFyZU1hcD17aGFzU2hhcmUgPyBvbkNsaWNrU2hhcmVNYXAgOiBudWxsfVxuICAgICAgICAvPlxuICAgICAgICB7LyogdGhlIG5leHQgdHdvIGNvbXBvbmVudHMgc2hvdWxkIGJlIG1vdmVkIGludG8gb25lICovfVxuICAgICAgICB7LyogYnV0IGkgYW0ga2VlcGluZyB0aGVtIGJlY2F1c2Ugb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL31cbiAgICAgICAgPFBhbmVsVG9nZ2xlXG4gICAgICAgICAgcGFuZWxzPXtwYW5lbHN9XG4gICAgICAgICAgYWN0aXZlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICB0b2dnbGVQYW5lbD17dWlTdGF0ZUFjdGlvbnMudG9nZ2xlU2lkZVBhbmVsfVxuICAgICAgICAvPlxuICAgICAgICA8U3R5bGVkU2lkZVBhbmVsQ29udGVudCBjbGFzc05hbWU9XCJzaWRlLXBhbmVsX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzaWRlLXBhbmVsX19jb250ZW50X19pbm5lclwiPlxuICAgICAgICAgICAge1BhbmVsQ29tcG9uZW50ID8gKFxuICAgICAgICAgICAgICA8UGFuZWxDb21wb25lbnRcbiAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgICBsYXllckNsYXNzZXM9e2xheWVyQ2xhc3Nlc31cbiAgICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICAgIGxheWVyQmxlbmRpbmc9e2xheWVyQmxlbmRpbmd9XG4gICAgICAgICAgICAgICAgb3ZlcmxheUJsZW5kaW5nPXtvdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlfVxuICAgICAgICAgICAgICAgIG1hcFN0eWxlQWN0aW9ucz17bWFwU3R5bGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnPXtpbnRlcmFjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgICByZW1vdmVEYXRhc2V0PXtvblJlbW92ZURhdGFzZXR9XG4gICAgICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17b25TaG93RGF0YXNldFRhYmxlfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVRhYmxlQ29sb3I9e29uVXBkYXRlVGFibGVDb2xvcn1cbiAgICAgICAgICAgICAgICBzaG93QWRkRGF0YU1vZGFsPXtvblNob3dBZGREYXRhTW9kYWx9XG4gICAgICAgICAgICAgICAgc2hvd0FkZE1hcFN0eWxlTW9kYWw9e29uU2hvd0FkZE1hcFN0eWxlTW9kYWx9XG4gICAgICAgICAgICAgICAgdWlTdGF0ZUFjdGlvbnM9e3VpU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucz17dmlzU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICAgIHBhbmVsTWV0YWRhdGE9e2N1cnJlbnRQYW5lbH1cbiAgICAgICAgICAgICAgICBwYW5lbExpc3RWaWV3PXtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYW5lbD8uaWQgPT09ICdsYXllcidcbiAgICAgICAgICAgICAgICAgICAgPyB1aVN0YXRlLmxheWVyUGFuZWxMaXN0Vmlld1xuICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRQYW5lbD8uaWQgPT09ICdmaWx0ZXInXG4gICAgICAgICAgICAgICAgICAgID8gdWlTdGF0ZS5maWx0ZXJQYW5lbExpc3RWaWV3XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPEN1c3RvbVBhbmVsc1xuICAgICAgICAgICAgICB7Li4uY3VzdG9tUGFuZWxQcm9wc31cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXthY3RpdmVTaWRlUGFuZWx9XG4gICAgICAgICAgICAgIHVwZGF0ZVRhYmxlQ29sb3I9e29uVXBkYXRlVGFibGVDb2xvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU3R5bGVkU2lkZVBhbmVsQ29udGVudD5cbiAgICAgIDwvU2lkZWJhcj5cbiAgICApO1xuICB9O1xuXG4gIFNpZGVQYW5lbC5kZWZhdWx0UGFuZWxzID0gZnVsbFBhbmVscztcbiAgcmV0dXJuIFNpZGVQYW5lbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQVlBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUQsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQUYsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFPLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFRLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFTLG1CQUFBLEdBQUFMLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBVSxXQUFBLEdBQUFOLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBVyxZQUFBLEdBQUFQLHNCQUFBLENBQUFKLE9BQUE7QUFFQSxJQUFBWSxpQkFBQSxHQUFBUixzQkFBQSxDQUFBSixPQUFBO0FBQXVDLElBQUFhLGVBQUEsRUE1QnZDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWhCLHdCQUFBZ0IsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEs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