UNPKG

kepler.gl

Version:

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

149 lines (148 loc) 28.8 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"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _classnames2 = _interopRequireDefault(require("classnames")); var _button = _interopRequireDefault(require("./button")); var _icons = require("../../common/icons"); var _constants = require("@kepler.gl/constants"); var _optionDropdown = _interopRequireWildcard(require("./option-dropdown")); var _utils = require("@kepler.gl/utils"); var _fieldToken = _interopRequireDefault(require("../../common/field-token")); 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; } var StyledHeaderCell = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 1px solid ", ";\n border-top: 1px solid ", ";\n padding-top: ", "px;\n padding-right: 0;\n padding-bottom: ", "px;\n padding-left: ", "px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n flex-direction: row;\n background-color: ", ";\n\n .n-sort-idx {\n font-size: 9px;\n }\n .details {\n font-weight: 500;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n height: 100%;\n overflow: hidden;\n flex-grow: 1;\n\n .col-name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n .col-name__left {\n display: flex;\n align-items: center;\n overflow: hidden;\n\n svg {\n margin-left: 6px;\n }\n }\n .col-name__name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .more {\n margin-left: 5px;\n }\n\n .col-name__format svg {\n width: 10px;\n height: 10px;\n stroke-width: 1;\n }\n"])), function (props) { return props.theme.headerCellBorderColor; }, function (props) { return props.theme.headerCellBorderColor; }, function (props) { return props.theme.headerPaddingTop; }, function (props) { return props.theme.headerPaddingBottom; }, function (props) { return props.theme.cellPaddingSide; }, function (props) { return props.theme.headerCellBackground; }); var HeaderCellFactory = function HeaderCellFactory(FieldToken) { var HeaderCell = function HeaderCell(_ref) { var _colMeta$column; var cellInfo = _ref.cellInfo, columns = _ref.columns, isPinned = _ref.isPinned, props = _ref.props, toggleMoreOptions = _ref.toggleMoreOptions, moreOptionsColumn = _ref.moreOptionsColumn; var columnIndex = cellInfo.columnIndex, key = cellInfo.key, style = cellInfo.style; var colMeta = props.colMeta, sortColumn = props.sortColumn, sortTableColumn = props.sortTableColumn, pinTableColumn = props.pinTableColumn, copyTableColumn = props.copyTableColumn, setColumnDisplayFormat = props.setColumnDisplayFormat; var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), showFormatter = _useState2[0], setShowFormatter = _useState2[1]; var column = columns[columnIndex]; var isGhost = column.ghost; var isSorted = sortColumn[column]; var firstCell = columnIndex === 0; var isFormatted = Boolean((_colMeta$column = colMeta[column]) === null || _colMeta$column === void 0 ? void 0 : _colMeta$column.displayFormat); var formatLabels = isFormatted ? (0, _utils.getFieldFormatLabels)(colMeta[column].type) : []; var onSortTable = (0, _react.useCallback)(function () { return sortTableColumn === null || sortTableColumn === void 0 ? void 0 : sortTableColumn(column); }, [sortTableColumn, column]); var onToggleOptionMenu = (0, _react.useCallback)(function () { return toggleMoreOptions(column); }, [toggleMoreOptions, column]); var onPin = (0, _react.useCallback)(function () { return pinTableColumn(column); }, [pinTableColumn, column]); var onCopy = (0, _react.useCallback)(function () { return copyTableColumn(column); }, [copyTableColumn, column]); var onSetDisplayFormat = (0, _react.useCallback)(function (displayFormat) { setColumnDisplayFormat === null || setColumnDisplayFormat === void 0 || setColumnDisplayFormat((0, _defineProperty2["default"])({}, column, displayFormat.format)); }, [column, setColumnDisplayFormat]); var onToggleDisplayFormat = (0, _react.useCallback)(function () { setShowFormatter(!showFormatter); }, [showFormatter]); return /*#__PURE__*/_react["default"].createElement(StyledHeaderCell, { className: (0, _classnames2["default"])('header-cell', (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "column-".concat(columnIndex), true), 'pinned-header-cell', isPinned), 'first-cell', firstCell)), key: key, style: style, onClick: function onClick(e) { e.shiftKey ? sortTableColumn(column) : null; }, onDoubleClick: onSortTable, title: column }, isGhost ? /*#__PURE__*/_react["default"].createElement("div", null) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("section", { className: "details" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name__left" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name__name" }, colMeta[column].name), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "col-name__sort", onClick: onSortTable }, isSorted ? isSorted === _constants.SORT_ORDER.ASCENDING ? /*#__PURE__*/_react["default"].createElement(_icons.ArrowUp, { height: "14px" }) : /*#__PURE__*/_react["default"].createElement(_icons.ArrowDown, { height: "14px" }) : null), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "col-name__format", onClick: onToggleDisplayFormat }, isFormatted ? /*#__PURE__*/_react["default"].createElement(_icons.Hash, { height: "14px" }) : null, /*#__PURE__*/_react["default"].createElement(_optionDropdown.FormatterDropdown, { left: 0, top: 0, isOpened: isFormatted && showFormatter, displayFormat: colMeta[column].displayFormat, setDisplayFormat: onSetDisplayFormat, onClose: function onClose() { return setShowFormatter(false); }, formatLabels: formatLabels }))), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "more", onClick: onToggleOptionMenu }, /*#__PURE__*/_react["default"].createElement(_icons.VertThreeDots, { height: "14px" }))), /*#__PURE__*/_react["default"].createElement(FieldToken, { type: colMeta[column].type })), /*#__PURE__*/_react["default"].createElement("section", { className: "options" }, /*#__PURE__*/_react["default"].createElement(_optionDropdown["default"], { isOpened: moreOptionsColumn === column, column: column, colMeta: colMeta, toggleMoreOptions: toggleMoreOptions, sortTableColumn: sortTableColumn ? function (mode) { return sortTableColumn(column, mode); } : undefined, pinTableColumn: onPin, copyTableColumn: onCopy, setDisplayFormat: setColumnDisplayFormat ? onSetDisplayFormat : undefined })))); }; return HeaderCell; }; HeaderCellFactory.deps = [_fieldToken["default"]]; var _default = exports["default"] = HeaderCellFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczIiLCJfYnV0dG9uIiwiX2ljb25zIiwiX2NvbnN0YW50cyIsIl9vcHRpb25Ecm9wZG93biIsIl91dGlscyIsIl9maWVsZFRva2VuIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkSGVhZGVyQ2VsbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImhlYWRlckNlbGxCb3JkZXJDb2xvciIsImhlYWRlclBhZGRpbmdUb3AiLCJoZWFkZXJQYWRkaW5nQm90dG9tIiwiY2VsbFBhZGRpbmdTaWRlIiwiaGVhZGVyQ2VsbEJhY2tncm91bmQiLCJIZWFkZXJDZWxsRmFjdG9yeSIsIkZpZWxkVG9rZW4iLCJIZWFkZXJDZWxsIiwiX3JlZiIsIl9jb2xNZXRhJGNvbHVtbiIsImNlbGxJbmZvIiwiY29sdW1ucyIsImlzUGlubmVkIiwidG9nZ2xlTW9yZU9wdGlvbnMiLCJtb3JlT3B0aW9uc0NvbHVtbiIsImNvbHVtbkluZGV4Iiwia2V5Iiwic3R5bGUiLCJjb2xNZXRhIiwic29ydENvbHVtbiIsInNvcnRUYWJsZUNvbHVtbiIsInBpblRhYmxlQ29sdW1uIiwiY29weVRhYmxlQ29sdW1uIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNob3dGb3JtYXR0ZXIiLCJzZXRTaG93Rm9ybWF0dGVyIiwiY29sdW1uIiwiaXNHaG9zdCIsImdob3N0IiwiaXNTb3J0ZWQiLCJmaXJzdENlbGwiLCJpc0Zvcm1hdHRlZCIsIkJvb2xlYW4iLCJkaXNwbGF5Rm9ybWF0IiwiZm9ybWF0TGFiZWxzIiwiZ2V0RmllbGRGb3JtYXRMYWJlbHMiLCJ0eXBlIiwib25Tb3J0VGFibGUiLCJ1c2VDYWxsYmFjayIsIm9uVG9nZ2xlT3B0aW9uTWVudSIsIm9uUGluIiwib25Db3B5Iiwib25TZXREaXNwbGF5Rm9ybWF0IiwiX2RlZmluZVByb3BlcnR5MiIsImZvcm1hdCIsIm9uVG9nZ2xlRGlzcGxheUZvcm1hdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwiY29uY2F0Iiwib25DbGljayIsInNoaWZ0S2V5Iiwib25Eb3VibGVDbGljayIsInRpdGxlIiwiRnJhZ21lbnQiLCJuYW1lIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIkFycm93VXAiLCJoZWlnaHQiLCJBcnJvd0Rvd24iLCJIYXNoIiwiRm9ybWF0dGVyRHJvcGRvd24iLCJsZWZ0IiwidG9wIiwiaXNPcGVuZWQiLCJzZXREaXNwbGF5Rm9ybWF0Iiwib25DbG9zZSIsIlZlcnRUaHJlZURvdHMiLCJtb2RlIiwidW5kZWZpbmVkIiwiZGVwcyIsIkZpZWxkVG9rZW5GYWN0b3J5IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kYXRhLXRhYmxlL2hlYWRlci1jZWxsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDU1NQcm9wZXJ0aWVzLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcbmltcG9ydCB7QXJyb3dVcCwgQXJyb3dEb3duLCBWZXJ0VGhyZWVEb3RzLCBIYXNofSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtTT1JUX09SREVSfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgT3B0aW9uRHJvcGRvd24sIHtGb3JtYXR0ZXJEcm9wZG93bn0gZnJvbSAnLi9vcHRpb24tZHJvcGRvd24nO1xuaW1wb3J0IHtnZXRGaWVsZEZvcm1hdExhYmVsc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0NvbE1ldGF9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IEZpZWxkVG9rZW5GYWN0b3J5LCB7RmllbGRUb2tlblByb3BzfSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtdG9rZW4nO1xuaW1wb3J0IHtEYXRhVGFibGVQcm9wc30gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IFN0eWxlZEhlYWRlckNlbGwgPSBzdHlsZWQuZGl2YFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQm9yZGVyQ29sb3J9O1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nVG9wfXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJQYWRkaW5nQm90dG9tfXB4O1xuICBwYWRkaW5nLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuY2VsbFBhZGRpbmdTaWRlfXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGVhZGVyQ2VsbEJhY2tncm91bmR9O1xuXG4gIC5uLXNvcnQtaWR4IHtcbiAgICBmb250LXNpemU6IDlweDtcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZsZXgtZ3JvdzogMTtcblxuICAgIC5jb2wtbmFtZSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgLmNvbC1uYW1lX19sZWZ0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5jb2wtbmFtZV9fbmFtZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tb3JlIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG5cbiAgLmNvbC1uYW1lX19mb3JtYXQgc3ZnIHtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG5gO1xuXG50eXBlIENlbGxJbmZvID0ge1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBpc1Njcm9sbGluZzogYm9vbGVhbjtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcGFyZW50OiBhbnk7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIHN0eWxlOiBDU1NQcm9wZXJ0aWVzO1xufTtcblxudHlwZSBIZWFkZXJDZWxsUHJvcHMgPSB7XG4gIC8vIHBhc3NlZCBkb3duIGZyb20gcmVhY3QgdmlydHVhbGl6ZWQgR3JpZFxuICBjZWxsSW5mbzogQ2VsbEluZm87XG4gIGNvbHVtbnM6IERhdGFUYWJsZVByb3BzWydjb2x1bW5zJ107XG4gIGNvbE1ldGE/OiBDb2xNZXRhO1xuICBpc1Bpbm5lZD86IGJvb2xlYW47XG4gIHNob3dTdGF0cz86IGJvb2xlYW47XG4gIHByb3BzOiBEYXRhVGFibGVQcm9wcztcbiAgdG9nZ2xlTW9yZU9wdGlvbnM6IChtb3JlT3B0aW9uc0NvbHVtbjogc3RyaW5nKSA9PiB2b2lkO1xuICBtb3JlT3B0aW9uc0NvbHVtbjogbnVsbCB8IHN0cmluZztcbiAgc3R5bGU6IENTU1Byb3BlcnRpZXM7XG59O1xuXG5jb25zdCBIZWFkZXJDZWxsRmFjdG9yeSA9IChGaWVsZFRva2VuOiBSZWFjdC5GQzxGaWVsZFRva2VuUHJvcHM+KSA9PiB7XG4gIGNvbnN0IEhlYWRlckNlbGwgPSAoe1xuICAgIGNlbGxJbmZvLFxuICAgIGNvbHVtbnMsXG4gICAgaXNQaW5uZWQsXG4gICAgcHJvcHMsXG4gICAgdG9nZ2xlTW9yZU9wdGlvbnMsXG4gICAgbW9yZU9wdGlvbnNDb2x1bW5cbiAgfTogSGVhZGVyQ2VsbFByb3BzKSA9PiB7XG4gICAgY29uc3Qge2NvbHVtbkluZGV4LCBrZXksIHN0eWxlfSA9IGNlbGxJbmZvO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbE1ldGEsXG4gICAgICBzb3J0Q29sdW1uLFxuICAgICAgc29ydFRhYmxlQ29sdW1uLFxuICAgICAgcGluVGFibGVDb2x1bW4sXG4gICAgICBjb3B5VGFibGVDb2x1bW4sXG4gICAgICBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0XG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzaG93Rm9ybWF0dGVyLCBzZXRTaG93Rm9ybWF0dGVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbkluZGV4XTtcblxuICAgIGNvbnN0IGlzR2hvc3QgPSBjb2x1bW4uZ2hvc3Q7XG4gICAgY29uc3QgaXNTb3J0ZWQgPSBzb3J0Q29sdW1uW2NvbHVtbl07XG4gICAgY29uc3QgZmlyc3RDZWxsID0gY29sdW1uSW5kZXggPT09IDA7XG4gICAgY29uc3QgaXNGb3JtYXR0ZWQgPSBCb29sZWFuKGNvbE1ldGFbY29sdW1uXT8uZGlzcGxheUZvcm1hdCk7XG4gICAgY29uc3QgZm9ybWF0TGFiZWxzID0gaXNGb3JtYXR0ZWQgPyBnZXRGaWVsZEZvcm1hdExhYmVscyhjb2xNZXRhW2NvbHVtbl0udHlwZSkgOiBbXTtcbiAgICBjb25zdCBvblNvcnRUYWJsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHNvcnRUYWJsZUNvbHVtbj8uKGNvbHVtbiksIFtzb3J0VGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uVG9nZ2xlT3B0aW9uTWVudSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gdG9nZ2xlTW9yZU9wdGlvbnMoY29sdW1uKSxcbiAgICAgIFt0b2dnbGVNb3JlT3B0aW9ucywgY29sdW1uXVxuICAgICk7XG4gICAgY29uc3Qgb25QaW4gPSB1c2VDYWxsYmFjaygoKSA9PiBwaW5UYWJsZUNvbHVtbihjb2x1bW4pLCBbcGluVGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IGNvcHlUYWJsZUNvbHVtbihjb2x1bW4pLCBbY29weVRhYmxlQ29sdW1uLCBjb2x1bW5dKTtcbiAgICBjb25zdCBvblNldERpc3BsYXlGb3JtYXQgPSB1c2VDYWxsYmFjayhcbiAgICAgIGRpc3BsYXlGb3JtYXQgPT4ge1xuICAgICAgICBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0Py4oe1tjb2x1bW5dOiBkaXNwbGF5Rm9ybWF0LmZvcm1hdH0pO1xuICAgICAgfSxcbiAgICAgIFtjb2x1bW4sIHNldENvbHVtbkRpc3BsYXlGb3JtYXRdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uVG9nZ2xlRGlzcGxheUZvcm1hdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldFNob3dGb3JtYXR0ZXIoIXNob3dGb3JtYXR0ZXIpO1xuICAgIH0sIFtzaG93Rm9ybWF0dGVyXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEhlYWRlckNlbGxcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdoZWFkZXItY2VsbCcsIHtcbiAgICAgICAgICBbYGNvbHVtbi0ke2NvbHVtbkluZGV4fWBdOiB0cnVlLFxuICAgICAgICAgICdwaW5uZWQtaGVhZGVyLWNlbGwnOiBpc1Bpbm5lZCxcbiAgICAgICAgICAnZmlyc3QtY2VsbCc6IGZpcnN0Q2VsbFxuICAgICAgICB9KX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgZS5zaGlmdEtleSA/IHNvcnRUYWJsZUNvbHVtbihjb2x1bW4pIDogbnVsbDtcbiAgICAgICAgfX1cbiAgICAgICAgb25Eb3VibGVDbGljaz17b25Tb3J0VGFibGV9XG4gICAgICAgIHRpdGxlPXtjb2x1bW59XG4gICAgICA+XG4gICAgICAgIHtpc0dob3N0ID8gKFxuICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZGV0YWlsc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fbmFtZVwiPntjb2xNZXRhW2NvbHVtbl0ubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiY29sLW5hbWVfX3NvcnRcIiBvbkNsaWNrPXtvblNvcnRUYWJsZX0+XG4gICAgICAgICAgICAgICAgICAgIHtpc1NvcnRlZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICBpc1NvcnRlZCA9PT0gU09SVF9PUkRFUi5BU0NFTkRJTkcgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFycm93RG93biBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImNvbC1uYW1lX19mb3JtYXRcIiBvbkNsaWNrPXtvblRvZ2dsZURpc3BsYXlGb3JtYXR9PlxuICAgICAgICAgICAgICAgICAgICB7aXNGb3JtYXR0ZWQgPyA8SGFzaCBoZWlnaHQ9XCIxNHB4XCIgLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVyRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgICAgICAgICAgICAgIHRvcD17MH1cbiAgICAgICAgICAgICAgICAgICAgICBpc09wZW5lZD17aXNGb3JtYXR0ZWQgJiYgc2hvd0Zvcm1hdHRlcn1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PXtjb2xNZXRhW2NvbHVtbl0uZGlzcGxheUZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREaXNwbGF5Rm9ybWF0PXtvblNldERpc3BsYXlGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Zvcm1hdHRlcihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0TGFiZWxzPXtmb3JtYXRMYWJlbHN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cIm1vcmVcIiBvbkNsaWNrPXtvblRvZ2dsZU9wdGlvbk1lbnV9PlxuICAgICAgICAgICAgICAgICAgPFZlcnRUaHJlZURvdHMgaGVpZ2h0PVwiMTRweFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8RmllbGRUb2tlbiB0eXBlPXtjb2xNZXRhW2NvbHVtbl0udHlwZX0gLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8T3B0aW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICBpc09wZW5lZD17bW9yZU9wdGlvbnNDb2x1bW4gPT09IGNvbHVtbn1cbiAgICAgICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAgICAgICBjb2xNZXRhPXtjb2xNZXRhfVxuICAgICAgICAgICAgICAgIHRvZ2dsZU1vcmVPcHRpb25zPXt0b2dnbGVNb3JlT3B0aW9uc31cbiAgICAgICAgICAgICAgICBzb3J0VGFibGVDb2x1bW49e1xuICAgICAgICAgICAgICAgICAgc29ydFRhYmxlQ29sdW1uID8gbW9kZSA9PiBzb3J0VGFibGVDb2x1bW4oY29sdW1uLCBtb2RlKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwaW5UYWJsZUNvbHVtbj17b25QaW59XG4gICAgICAgICAgICAgICAgY29weVRhYmxlQ29sdW1uPXtvbkNvcHl9XG4gICAgICAgICAgICAgICAgc2V0RGlzcGxheUZvcm1hdD17c2V0Q29sdW1uRGlzcGxheUZvcm1hdCA/IG9uU2V0RGlzcGxheUZvcm1hdCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvU3R5bGVkSGVhZGVyQ2VsbD5cbiAgICApO1xuICB9O1xuICByZXR1cm4gSGVhZGVyQ2VsbDtcbn07XG5IZWFkZXJDZWxsRmFjdG9yeS5kZXBzID0gW0ZpZWxkVG9rZW5GYWN0b3J5XTtcbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxlQUFBLEdBQUFSLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxXQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFBNEUsSUFBQVUsZUFBQSxFQVo1RTtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFiLHdCQUFBYSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBY0EsSUFBTVcsZ0JBQWdCLEdBQUdDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXZCLGVBQUEsS0FBQUEsZUFBQSxPQUFBd0IsdUJBQUEsb2tDQUNOLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0MscUJBQXFCO0FBQUEsR0FDN0MsVUFBQUYsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxxQkFBcUI7QUFBQSxHQUNuRCxVQUFBRixLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNFLGdCQUFnQjtBQUFBLEdBRWxDLFVBQUFILEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0csbUJBQW1CO0FBQUEsR0FDMUMsVUFBQUosS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDSSxlQUFlO0FBQUEsR0FLaEMsVUFBQUwsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDSyxvQkFBb0I7QUFBQSxFQTZDOUQ7QUF5QkQsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsVUFBcUMsRUFBSztFQUNuRSxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBQUMsSUFBQSxFQU9PO0lBQUEsSUFBQUMsZUFBQTtJQUFBLElBTnJCQyxRQUFRLEdBQUFGLElBQUEsQ0FBUkUsUUFBUTtNQUNSQyxPQUFPLEdBQUFILElBQUEsQ0FBUEcsT0FBTztNQUNQQyxRQUFRLEdBQUFKLElBQUEsQ0FBUkksUUFBUTtNQUNSZCxLQUFLLEdBQUFVLElBQUEsQ0FBTFYsS0FBSztNQUNMZSxpQkFBaUIsR0FBQUwsSUFBQSxDQUFqQkssaUJBQWlCO01BQ2pCQyxpQkFBaUIsR0FBQU4sSUFBQSxDQUFqQk0saUJBQWlCO0lBRWpCLElBQU9DLFdBQVcsR0FBZ0JMLFFBQVEsQ0FBbkNLLFdBQVc7TUFBRUMsR0FBRyxHQUFXTixRQUFRLENBQXRCTSxHQUFHO01BQUVDLEtBQUssR0FBSVAsUUFBUSxDQUFqQk8sS0FBSztJQUM5QixJQUNFQyxPQUFPLEdBTUxwQixLQUFLLENBTlBvQixPQUFPO01BQ1BDLFVBQVUsR0FLUnJCLEtBQUssQ0FMUHFCLFVBQVU7TUFDVkMsZUFBZSxHQUlidEIsS0FBSyxDQUpQc0IsZUFBZTtNQUNmQyxjQUFjLEdBR1p2QixLQUFLLENBSFB1QixjQUFjO01BQ2RDLGVBQWUsR0FFYnhCLEtBQUssQ0FGUHdCLGVBQWU7TUFDZkMsc0JBQXNCLEdBQ3BCekIsS0FBSyxDQURQeUIsc0JBQXNCO0lBRXhCLElBQUFDLFNBQUEsR0FBMEMsSUFBQUMsZUFBUSxFQUFDLEtBQUssQ0FBQztNQUFBQyxVQUFBLE9BQUFDLGVBQUEsYUFBQUgsU0FBQTtNQUFsREksYUFBYSxHQUFBRixVQUFBO01BQUVHLGdCQUFnQixHQUFBSCxVQUFBO0lBQ3RDLElBQU1JLE1BQU0sR0FBR25CLE9BQU8sQ0FBQ0ksV0FBVyxDQUFDO0lBRW5DLElBQU1nQixPQUFPLEdBQUdELE1BQU0sQ0FBQ0UsS0FBSztJQUM1QixJQUFNQyxRQUFRLEdBQUdkLFVBQVUsQ0FBQ1csTUFBTSxDQUFDO0lBQ25DLElBQU1JLFNBQVMsR0FBR25CLFdBQVcsS0FBSyxDQUFDO0lBQ25DLElBQU1vQixXQUFXLEdBQUdDLE9BQU8sRUFBQTNCLGVBQUEsR0FBQ1MsT0FBTyxDQUFDWSxNQUFNLENBQUMsY0FBQXJCLGVBQUEsdUJBQWZBLGVBQUEsQ0FBaUI0QixhQUFhLENBQUM7SUFDM0QsSUFBTUMsWUFBWSxHQUFHSCxXQUFXLEdBQUcsSUFBQUksMkJBQW9CLEVBQUNyQixPQUFPLENBQUNZLE1BQU0sQ0FBQyxDQUFDVSxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2xGLElBQU1DLFdBQVcsR0FBRyxJQUFBQyxrQkFBVyxFQUFDO01BQUEsT0FBTXRCLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFHVSxNQUFNLENBQUM7SUFBQSxHQUFFLENBQUNWLGVBQWUsRUFBRVUsTUFBTSxDQUFDLENBQUM7SUFDM0YsSUFBTWEsa0JBQWtCLEdBQUcsSUFBQUQsa0JBQVcsRUFDcEM7TUFBQSxPQUFNN0IsaUJBQWlCLENBQUNpQixNQUFNLENBQUM7SUFBQSxHQUMvQixDQUFDakIsaUJBQWlCLEVBQUVpQixNQUFNLENBQzVCLENBQUM7SUFDRCxJQUFNYyxLQUFLLEdBQUcsSUFBQUYsa0JBQVcsRUFBQztNQUFBLE9BQU1yQixjQUFjLENBQUNTLE1BQU0sQ0FBQztJQUFBLEdBQUUsQ0FBQ1QsY0FBYyxFQUFFUyxNQUFNLENBQUMsQ0FBQztJQUNqRixJQUFNZSxNQUFNLEdBQUcsSUFBQUgsa0JBQVcsRUFBQztNQUFBLE9BQU1wQixlQUFlLENBQUNRLE1BQU0sQ0FBQztJQUFBLEdBQUUsQ0FBQ1IsZUFBZSxFQUFFUSxNQUFNLENBQUMsQ0FBQztJQUNwRixJQUFNZ0Isa0JBQWtCLEdBQUcsSUFBQUosa0JBQVcsRUFDcEMsVUFBQUwsYUFBYSxFQUFJO01BQ2ZkLHNCQUFzQixhQUF0QkEsc0JBQXNCLGVBQXRCQSxzQkFBc0IsS0FBQXdCLGdCQUFBLGlCQUFLakIsTUFBTSxFQUFHTyxhQUFhLENBQUNXLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUMsRUFDRCxDQUFDbEIsTUFBTSxFQUFFUCxzQkFBc0IsQ0FDakMsQ0FBQztJQUVELElBQU0wQixxQkFBcUIsR0FBRyxJQUFBUCxrQkFBVyxFQUFDLFlBQU07TUFDOUNiLGdCQUFnQixDQUFDLENBQUNELGFBQWEsQ0FBQztJQUNsQyxDQUFDLEVBQUUsQ0FBQ0EsYUFBYSxDQUFDLENBQUM7SUFFbkIsb0JBQ0VuRSxNQUFBLFlBQUF5RixhQUFBLENBQUN4RCxnQkFBZ0I7TUFDZnlELFNBQVMsRUFBRSxJQUFBQyx1QkFBVSxFQUFDLGFBQWEsTUFBQUwsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSwyQkFBQU0sTUFBQSxDQUN0QnRDLFdBQVcsR0FBSyxJQUFJLEdBQy9CLG9CQUFvQixFQUFFSCxRQUFRLEdBQzlCLFlBQVksRUFBRXNCLFNBQVMsQ0FDeEIsQ0FBRTtNQUNIbEIsR0FBRyxFQUFFQSxHQUFJO01BQ1RDLEtBQUssRUFBRUEsS0FBTTtNQUNicUMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUUvRSxDQUFDLEVBQUk7UUFDWkEsQ0FBQyxDQUFDZ0YsUUFBUSxHQUFHbkMsZUFBZSxDQUFDVSxNQUFNLENBQUMsR0FBRyxJQUFJO01BQzdDLENBQUU7TUFDRjBCLGFBQWEsRUFBRWYsV0FBWTtNQUMzQmdCLEtBQUssRUFBRTNCO0lBQU8sR0FFYkMsT0FBTyxnQkFDTnRFLE1BQUEsWUFBQXlGLGFBQUEsWUFBTSxDQUFDLGdCQUVQekYsTUFBQSxZQUFBeUYsYUFBQSxDQUFBekYsTUFBQSxZQUFBaUcsUUFBQSxxQkFDRWpHLE1BQUEsWUFBQXlGLGFBQUE7TUFBU0MsU0FBUyxFQUFDO0lBQVMsZ0JBQzFCMUYsTUFBQSxZQUFBeUYsYUFBQTtNQUFLQyxTQUFTLEVBQUM7SUFBVSxnQkFDdkIxRixNQUFBLFlBQUF5RixhQUFBO01BQUtDLFNBQVMsRUFBQztJQUFnQixnQkFDN0IxRixNQUFBLFlBQUF5RixhQUFBO01BQUtDLFNBQVMsRUFBQztJQUFnQixHQUFFakMsT0FBTyxDQUFDWSxNQUFNLENBQUMsQ0FBQzZCLElBQVUsQ0FBQyxlQUM1RGxHLE1BQUEsWUFBQXlGLGFBQUEsQ0FBQ25GLE9BQUEsV0FBTTtNQUFDb0YsU0FBUyxFQUFDLGdCQUFnQjtNQUFDRyxPQUFPLEVBQUViO0lBQVksR0FDckRSLFFBQVEsR0FDUEEsUUFBUSxLQUFLMkIscUJBQVUsQ0FBQ0MsU0FBUyxnQkFDL0JwRyxNQUFBLFlBQUF5RixhQUFBLENBQUNsRixNQUFBLENBQUE4RixPQUFPO01BQUNDLE1BQU0sRUFBQztJQUFNLENBQUUsQ0FBQyxnQkFFekJ0RyxNQUFBLFlBQUF5RixhQUFBLENBQUNsRixNQUFBLENBQUFnRyxTQUFTO01BQUNELE1BQU0sRUFBQztJQUFNLENBQUUsQ0FDM0IsR0FDQyxJQUNFLENBQUMsZUFDVHRHLE1BQUEsWUFBQXlGLGFBQUEsQ0FBQ25GLE9BQUEsV0FBTTtNQUFDb0YsU0FBUyxFQUFDLGtCQUFrQjtNQUFDRyxPQUFPLEVBQUVMO0lBQXNCLEdBQ2pFZCxXQUFXLGdCQUFHMUUsTUFBQSxZQUFBeUYsYUFBQSxDQUFDbEYsTUFBQSxDQUFBaUcsSUFBSTtNQUFDRixNQUFNLEVBQUM7SUFBTSxDQUFFLENBQUMsR0FBRyxJQUFJLGVBQzVDdEcsTUFBQSxZQUFBeUYsYUFBQSxDQUFDaEYsZUFBQSxDQUFBZ0csaUJBQWlCO01BQ2hCQyxJQUFJLEVBQUUsQ0FBRTtNQUNSQyxHQUFHLEVBQUUsQ0FBRTtNQUNQQyxRQUFRLEVBQUVsQyxXQUFXLElBQUlQLGFBQWM7TUFDdkNTLGFBQWEsRUFBRW5CLE9BQU8sQ0FBQ1ksTUFBTSxDQUFDLENBQUNPLGFBQWM7TUFDN0NpQyxnQkFBZ0IsRUFBRXhCLGtCQUFtQjtNQUNyQ3lCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUTFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztNQUFBLENBQUM7TUFDdkNTLFlBQVksRUFBRUE7SUFBYSxDQUM1QixDQUNLLENBQ0wsQ0FBQyxlQUNON0UsTUFBQSxZQUFBeUYsYUFBQSxDQUFDbkYsT0FBQSxXQUFNO01BQUNvRixTQUFTLEVBQUMsTUFBTTtNQUFDRyxPQUFPLEVBQUVYO0lBQW1CLGdCQUNuRGxGLE1BQUEsWUFBQXlGLGFBQUEsQ0FBQ2xGLE1BQUEsQ0FBQXdHLGFBQWE7TUFBQ1QsTUFBTSxFQUFDO0lBQU0sQ0FBRSxDQUN4QixDQUNMLENBQUMsZUFDTnRHLE1BQUEsWUFBQXlGLGFBQUEsQ0FBQzVDLFVBQVU7TUFBQ2tDLElBQUksRUFBRXRCLE9BQU8sQ0FBQ1ksTUFBTSxDQUFDLENBQUNVO0lBQUssQ0FBRSxDQUNsQyxDQUFDLGVBRVYvRSxNQUFBLFlBQUF5RixhQUFBO01BQVNDLFNBQVMsRUFBQztJQUFTLGdCQUMxQjFGLE1BQUEsWUFBQXlGLGFBQUEsQ0FBQ2hGLGVBQUEsV0FBYztNQUNibUcsUUFBUSxFQUFFdkQsaUJBQWlCLEtBQUtnQixNQUFPO01BQ3ZDQSxNQUFNLEVBQUVBLE1BQU87TUFDZlosT0FBTyxFQUFFQSxPQUFRO01BQ2pCTCxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDTyxlQUFlLEVBQ2JBLGVBQWUsR0FBRyxVQUFBcUQsSUFBSTtRQUFBLE9BQUlyRCxlQUFlLENBQUNVLE1BQU0sRUFBRTJDLElBQUksQ0FBQztNQUFBLElBQUdDLFNBQzNEO01BQ0RyRCxjQUFjLEVBQUV1QixLQUFNO01BQ3RCdEIsZUFBZSxFQUFFdUIsTUFBTztNQUN4QnlCLGdCQUFnQixFQUFFL0Msc0JBQXNCLEdBQUd1QixrQkFBa0IsR0FBRzRCO0lBQVUsQ0FDM0UsQ0FDTSxDQUNULENBRVksQ0FBQztFQUV2QixDQUFDO0VBQ0QsT0FBT25FLFVBQVU7QUFDbkIsQ0FBQztBQUNERixpQkFBaUIsQ0FBQ3NFLElBQUksR0FBRyxDQUFDQyxzQkFBaUIsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxjQUM5QnpFLGlCQUFpQiIsImlnbm9yZUxpc3QiOltdfQ==