UNPKG

kepler.gl

Version:

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

129 lines (128 loc) 21.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["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _classnames3 = _interopRequireDefault(require("classnames")); var _utilities = require("@dnd-kit/utilities"); var _sortable = require("@dnd-kit/sortable"); var _constants = require("@kepler.gl/constants"); var _utils = require("@kepler.gl/utils"); var _effectPanel = _interopRequireDefault(require("./effect-panel")); var _templateObject, _templateObject2; // 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 Container = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"]))); var SortableStyledItem = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n z-index: ", ";\n transition: ", ";\n transform: ", ";\n outline: none;\n &.sorting {\n opacity: 0.3;\n pointer-events: none;\n }\n &.sorting-effects .effect-panel__header {\n background-color: ", ";\n font-family: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n .effect__drag-handle {\n opacity: 1;\n color: ", ";\n }\n }\n"])), function (props) { return props.theme.dropdownWrapperZ + 1; }, function (props) { return props.transition; }, function (props) { return props.transform; }, function (props) { return props.theme.panelBackgroundHover; }, function (props) { return props.theme.fontFamily; }, function (props) { return props.theme.fontWeight; }, function (props) { return props.theme.fontSize; }, function (props) { return props.theme.lineHeight; }, function (props) { return props.theme.textColorHl; }); EffectListFactory.deps = [_effectPanel["default"]]; function EffectListFactory(EffectPanel) { var SortableItem = function SortableItem(_ref) { var effect = _ref.effect, idx = _ref.idx, panelProps = _ref.panelProps, disabled = _ref.disabled; var _useSortable = (0, _sortable.useSortable)({ id: effect.id, data: { type: _constants.SORTABLE_EFFECT_TYPE, parent: _constants.SORTABLE_EFFECT_PANEL_TYPE }, disabled: disabled }), attributes = _useSortable.attributes, listeners = _useSortable.listeners, setNodeRef = _useSortable.setNodeRef, isDragging = _useSortable.isDragging, transform = _useSortable.transform, transition = _useSortable.transition; return /*#__PURE__*/_react["default"].createElement(SortableStyledItem, (0, _extends2["default"])({ ref: setNodeRef, className: (0, _classnames3["default"])((0, _defineProperty2["default"])({}, _constants.dataTestIds.sortableEffectItem, !disabled), (0, _defineProperty2["default"])({}, _constants.dataTestIds.staticEffectItem, disabled), { sorting: isDragging }), "data-testid": disabled ? _constants.dataTestIds.staticEffectItem : _constants.dataTestIds.sortableEffectItem, transform: _utilities.CSS.Transform.toString(transform), transition: transition || '' }, attributes), /*#__PURE__*/_react["default"].createElement(EffectPanel, (0, _extends2["default"])({}, panelProps, { key: effect.id, idx: idx, effect: effect, listeners: listeners, isDraggable: !disabled }))); }; var EffectList = function EffectList(props) { var effects = props.effects, effectOrder = props.effectOrder, visStateActions = props.visStateActions; var effectsToShow = (0, _react.useMemo)(function () { return effectOrder.reduce(function (acc, effectId) { var effect = (0, _utils.findById)(effectId)(effects.filter(Boolean)); if (!effect) { return acc; } return [].concat((0, _toConsumableArray2["default"])(acc), [effect]); }, []); }, [effects, effectOrder]); var sidePanelDndItems = (0, _react.useMemo)(function () { return effectsToShow.map(function (_ref2) { var id = _ref2.id; return id; }); }, [effectsToShow]); var panelProps = (0, _react.useMemo)(function () { return { effects: effects, effectOrder: effectOrder, removeEffect: visStateActions.removeEffect, updateEffect: visStateActions.updateEffect }; }, [effects, effectOrder, visStateActions]); return /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(_sortable.SortableContext, { id: _constants.SORTABLE_EFFECT_PANEL_TYPE, items: sidePanelDndItems, strategy: _sortable.verticalListSortingStrategy, disabled: false }, effectsToShow.map(function (effect) { return /*#__PURE__*/_react["default"].createElement(SortableItem, { key: effect.id, effect: effect, idx: effects.findIndex(function (l) { return (l === null || l === void 0 ? void 0 : l.id) === effect.id; }), panelProps: panelProps, disabled: false }); }))); }; return EffectList; } var _default = exports["default"] = EffectListFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczMiLCJfdXRpbGl0aWVzIiwiX3NvcnRhYmxlIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9lZmZlY3RQYW5lbCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlNvcnRhYmxlU3R5bGVkSXRlbSIsInByb3BzIiwidGhlbWUiLCJkcm9wZG93bldyYXBwZXJaIiwidHJhbnNpdGlvbiIsInRyYW5zZm9ybSIsInBhbmVsQmFja2dyb3VuZEhvdmVyIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJ0ZXh0Q29sb3JIbCIsIkVmZmVjdExpc3RGYWN0b3J5IiwiZGVwcyIsIkVmZmVjdFBhbmVsRmFjdG9yeSIsIkVmZmVjdFBhbmVsIiwiU29ydGFibGVJdGVtIiwiX3JlZiIsImVmZmVjdCIsImlkeCIsInBhbmVsUHJvcHMiLCJkaXNhYmxlZCIsIl91c2VTb3J0YWJsZSIsInVzZVNvcnRhYmxlIiwiaWQiLCJkYXRhIiwidHlwZSIsIlNPUlRBQkxFX0VGRkVDVF9UWVBFIiwicGFyZW50IiwiU09SVEFCTEVfRUZGRUNUX1BBTkVMX1RZUEUiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwic2V0Tm9kZVJlZiIsImlzRHJhZ2dpbmciLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwicmVmIiwiY2xhc3NOYW1lIiwiY2xhc3NuYW1lcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkYXRhVGVzdElkcyIsInNvcnRhYmxlRWZmZWN0SXRlbSIsInN0YXRpY0VmZmVjdEl0ZW0iLCJzb3J0aW5nIiwiQ1NTIiwiVHJhbnNmb3JtIiwidG9TdHJpbmciLCJrZXkiLCJpc0RyYWdnYWJsZSIsIkVmZmVjdExpc3QiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJlZmZlY3RzVG9TaG93IiwidXNlTWVtbyIsInJlZHVjZSIsImFjYyIsImVmZmVjdElkIiwiZmluZEJ5SWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInNpZGVQYW5lbERuZEl0ZW1zIiwibWFwIiwiX3JlZjIiLCJyZW1vdmVFZmZlY3QiLCJ1cGRhdGVFZmZlY3QiLCJTb3J0YWJsZUNvbnRleHQiLCJpdGVtcyIsInN0cmF0ZWd5IiwidmVydGljYWxMaXN0U29ydGluZ1N0cmF0ZWd5IiwiZmluZEluZGV4IiwibCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZmZlY3RzL2VmZmVjdC1saXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHtDU1N9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5pbXBvcnQge3VzZVNvcnRhYmxlLCBTb3J0YWJsZUNvbnRleHQsIHZlcnRpY2FsTGlzdFNvcnRpbmdTdHJhdGVneX0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuXG5pbXBvcnQge2RhdGFUZXN0SWRzLCBTT1JUQUJMRV9FRkZFQ1RfVFlQRSwgU09SVEFCTEVfRUZGRUNUX1BBTkVMX1RZUEV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7ZmluZEJ5SWR9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgYWRkRWZmZWN0LFxuICB1cGRhdGVFZmZlY3QsXG4gIHJlbW92ZUVmZmVjdCxcbiAgcmVvcmRlckVmZmVjdCxcbiAgQWN0aW9uSGFuZGxlclxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG5pbXBvcnQgRWZmZWN0UGFuZWxGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXBhbmVsJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0TGlzdFByb3BzID0ge1xuICBlZmZlY3RzOiBFZmZlY3RbXTtcbiAgZWZmZWN0T3JkZXI6IHN0cmluZ1tdO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHtcbiAgICBhZGRFZmZlY3Q6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIGFkZEVmZmVjdD47XG4gICAgdXBkYXRlRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiB1cGRhdGVFZmZlY3Q+O1xuICAgIHJlbW92ZUVmZmVjdDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgcmVtb3ZlRWZmZWN0PjtcbiAgICByZW9yZGVyRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiByZW9yZGVyRWZmZWN0PjtcbiAgfTtcbiAgaXNTb3J0YWJsZTogYm9vbGVhbjtcbn07XG5cbmNvbnN0IENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG50eXBlIFNvcnRhYmxlU3R5bGVkSXRlbVByb3BzID0ge3RyYW5zaXRpb24/OiBzdHJpbmc7IHRyYW5zZm9ybT86IHN0cmluZ307XG5jb25zdCBTb3J0YWJsZVN0eWxlZEl0ZW0gPSBzdHlsZWQuZGl2PFNvcnRhYmxlU3R5bGVkSXRlbVByb3BzPmBcbiAgei1pbmRleDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bldyYXBwZXJaICsgMX07XG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMudHJhbnNpdGlvbn07XG4gIHRyYW5zZm9ybTogJHtwcm9wcyA9PiBwcm9wcy50cmFuc2Zvcm19O1xuICBvdXRsaW5lOiBub25lO1xuICAmLnNvcnRpbmcge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuICAmLnNvcnRpbmctZWZmZWN0cyAuZWZmZWN0LXBhbmVsX19oZWFkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuICAgIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICAgIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250U2l6ZX07XG4gICAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGluZUhlaWdodH07XG4gICAgKixcbiAgICAqOmJlZm9yZSxcbiAgICAqOmFmdGVyIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5lZmZlY3RfX2RyYWctaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgfVxuICB9XG5gO1xuXG5FZmZlY3RMaXN0RmFjdG9yeS5kZXBzID0gW0VmZmVjdFBhbmVsRmFjdG9yeV07XG5cbmZ1bmN0aW9uIEVmZmVjdExpc3RGYWN0b3J5KFxuICBFZmZlY3RQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0UGFuZWxGYWN0b3J5PlxuKTogUmVhY3QuRkM8RWZmZWN0TGlzdFByb3BzPiB7XG4gIGNvbnN0IFNvcnRhYmxlSXRlbSA9ICh7ZWZmZWN0LCBpZHgsIHBhbmVsUHJvcHMsIGRpc2FibGVkfSkgPT4ge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbn0gPSB1c2VTb3J0YWJsZSh7XG4gICAgICBpZDogZWZmZWN0LmlkLFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBTT1JUQUJMRV9FRkZFQ1RfVFlQRSxcbiAgICAgICAgcGFyZW50OiBTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRVxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNvcnRhYmxlU3R5bGVkSXRlbVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhcbiAgICAgICAgICB7W2RhdGFUZXN0SWRzLnNvcnRhYmxlRWZmZWN0SXRlbV06ICFkaXNhYmxlZH0sXG4gICAgICAgICAge1tkYXRhVGVzdElkcy5zdGF0aWNFZmZlY3RJdGVtXTogZGlzYWJsZWR9LFxuICAgICAgICAgIHtzb3J0aW5nOiBpc0RyYWdnaW5nfVxuICAgICAgICApfVxuICAgICAgICBkYXRhLXRlc3RpZD17ZGlzYWJsZWQgPyBkYXRhVGVzdElkcy5zdGF0aWNFZmZlY3RJdGVtIDogZGF0YVRlc3RJZHMuc29ydGFibGVFZmZlY3RJdGVtfVxuICAgICAgICB0cmFuc2Zvcm09e0NTUy5UcmFuc2Zvcm0udG9TdHJpbmcodHJhbnNmb3JtKX1cbiAgICAgICAgdHJhbnNpdGlvbj17dHJhbnNpdGlvbiB8fCAnJ31cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICA+XG4gICAgICAgIDxFZmZlY3RQYW5lbFxuICAgICAgICAgIHsuLi5wYW5lbFByb3BzfVxuICAgICAgICAgIGtleT17ZWZmZWN0LmlkfVxuICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgIGVmZmVjdD17ZWZmZWN0fVxuICAgICAgICAgIGxpc3RlbmVycz17bGlzdGVuZXJzfVxuICAgICAgICAgIGlzRHJhZ2dhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgIC8+XG4gICAgICA8L1NvcnRhYmxlU3R5bGVkSXRlbT5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IEVmZmVjdExpc3QgPSAocHJvcHM6IEVmZmVjdExpc3RQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlciwgdmlzU3RhdGVBY3Rpb25zfSA9IHByb3BzO1xuXG4gICAgY29uc3QgZWZmZWN0c1RvU2hvdyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGVmZmVjdE9yZGVyLnJlZHVjZSgoYWNjLCBlZmZlY3RJZCkgPT4ge1xuICAgICAgICBjb25zdCBlZmZlY3QgPSBmaW5kQnlJZChlZmZlY3RJZCkoZWZmZWN0cy5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICBpZiAoIWVmZmVjdCkge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5hY2MsIGVmZmVjdF07XG4gICAgICB9LCBbXSBhcyBFZmZlY3RbXSk7XG4gICAgfSwgW2VmZmVjdHMsIGVmZmVjdE9yZGVyXSk7XG5cbiAgICBjb25zdCBzaWRlUGFuZWxEbmRJdGVtcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGVmZmVjdHNUb1Nob3cubWFwKCh7aWR9KSA9PiBpZCk7XG4gICAgfSwgW2VmZmVjdHNUb1Nob3ddKTtcblxuICAgIGNvbnN0IHBhbmVsUHJvcHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgZWZmZWN0T3JkZXIsXG4gICAgICAgIHJlbW92ZUVmZmVjdDogdmlzU3RhdGVBY3Rpb25zLnJlbW92ZUVmZmVjdCxcbiAgICAgICAgdXBkYXRlRWZmZWN0OiB2aXNTdGF0ZUFjdGlvbnMudXBkYXRlRWZmZWN0XG4gICAgICB9KSxcbiAgICAgIFtlZmZlY3RzLCBlZmZlY3RPcmRlciwgdmlzU3RhdGVBY3Rpb25zXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRhaW5lcj5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dFxuICAgICAgICAgIGlkPXtTT1JUQUJMRV9FRkZFQ1RfUEFORUxfVFlQRX1cbiAgICAgICAgICBpdGVtcz17c2lkZVBhbmVsRG5kSXRlbXN9XG4gICAgICAgICAgc3RyYXRlZ3k9e3ZlcnRpY2FsTGlzdFNvcnRpbmdTdHJhdGVneX1cbiAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgID5cbiAgICAgICAgICB7ZWZmZWN0c1RvU2hvdy5tYXAoZWZmZWN0ID0+IChcbiAgICAgICAgICAgIDxTb3J0YWJsZUl0ZW1cbiAgICAgICAgICAgICAga2V5PXtlZmZlY3QuaWR9XG4gICAgICAgICAgICAgIGVmZmVjdD17ZWZmZWN0fVxuICAgICAgICAgICAgICBpZHg9e2VmZmVjdHMuZmluZEluZGV4KGwgPT4gbD8uaWQgPT09IGVmZmVjdC5pZCl9XG4gICAgICAgICAgICAgIHBhbmVsUHJvcHM9e3BhbmVsUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU29ydGFibGVDb250ZXh0PlxuICAgICAgPC9Db250YWluZXI+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIEVmZmVjdExpc3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVmZmVjdExpc3RGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7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TixHQUFHLElBQUV0QyxNQUFNO01BQ3hCLENBQUMsRUFBRSxFQUFjLENBQUM7SUFDcEIsQ0FBQyxFQUFFLENBQUNnQyxPQUFPLEVBQUVDLFdBQVcsQ0FBQyxDQUFDO0lBRTFCLElBQU1ZLGlCQUFpQixHQUFHLElBQUFULGNBQU8sRUFBQyxZQUFNO01BQ3RDLE9BQU9ELGFBQWEsQ0FBQ1csR0FBRyxDQUFDLFVBQUFDLEtBQUE7UUFBQSxJQUFFekMsRUFBRSxHQUFBeUMsS0FBQSxDQUFGekMsRUFBRTtRQUFBLE9BQU1BLEVBQUU7TUFBQSxFQUFDO0lBQ3hDLENBQUMsRUFBRSxDQUFDNkIsYUFBYSxDQUFDLENBQUM7SUFFbkIsSUFBTWpDLFVBQVUsR0FBRyxJQUFBa0MsY0FBTyxFQUN4QjtNQUFBLE9BQU87UUFDTEosT0FBTyxFQUFQQSxPQUFPO1FBQ1BDLFdBQVcsRUFBWEEsV0FBVztRQUNYZSxZQUFZLEVBQUVkLGVBQWUsQ0FBQ2MsWUFBWTtRQUMxQ0MsWUFBWSxFQUFFZixlQUFlLENBQUNlO01BQ2hDLENBQUM7SUFBQSxDQUFDLEVBQ0YsQ0FBQ2pCLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxlQUFlLENBQ3hDLENBQUM7SUFFRCxvQkFDRXpGLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ3RDLFNBQVMscUJBQ1JqQyxNQUFBLFlBQUF1RSxhQUFBLENBQUNoRSxTQUFBLENBQUFrRyxlQUFlO01BQ2Q1QyxFQUFFLEVBQUVLLHFDQUEyQjtNQUMvQndDLEtBQUssRUFBRU4saUJBQWtCO01BQ3pCTyxRQUFRLEVBQUVDLHFDQUE0QjtNQUN0Q2xELFFBQVEsRUFBRTtJQUFNLEdBRWZnQyxhQUFhLENBQUNXLEdBQUcsQ0FBQyxVQUFBOUMsTUFBTTtNQUFBLG9CQUN2QnZELE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ2xCLFlBQVk7UUFDWCtCLEdBQUcsRUFBRTdCLE1BQU0sQ0FBQ00sRUFBRztRQUNmTixNQUFNLEVBQUVBLE1BQU87UUFDZkMsR0FBRyxFQUFFK0IsT0FBTyxDQUFDc0IsU0FBUyxDQUFDLFVBQUFDLENBQUM7VUFBQSxPQUFJLENBQUFBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFakQsRUFBRSxNQUFLTixNQUFNLENBQUNNLEVBQUU7UUFBQSxFQUFFO1FBQ2pESixVQUFVLEVBQUVBLFVBQVc7UUFDdkJDLFFBQVEsRUFBRTtNQUFNLENBQ2pCLENBQUM7SUFBQSxDQUNILENBQ2MsQ0FDUixDQUFDO0VBRWhCLENBQUM7RUFDRCxPQUFPNEIsVUFBVTtBQUNuQjtBQUFDLElBQUF5QixRQUFBLEdBQUFDLE9BQUEsY0FFYy9ELGlCQUFpQiIsImlnbm9yZUxpc3QiOltdfQ==