UNPKG

kepler.gl

Version:

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

171 lines (170 loc) 34.7 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.ModalTitle = exports.ModalFooter = exports.ModalDialog = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _localization = require("@kepler.gl/localization"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _reactModal = _interopRequireDefault(require("react-modal")); var _icons = require("./icons"); var _styledComponents2 = require("./styled-components"); var _styles = require("@kepler.gl/styles"); var _excluded = ["disabled"]; var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13; // 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 _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } 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 ModalContentWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n overflow-y: auto;\n max-width: 70vw;\n max-height: 85vh;\n padding: 24px 72px 40px;\n position: relative;\n top: 92px;\n left: 0;\n right: 0;\n margin: 0 auto;\n background-color: #ffffff;\n border-radius: 4px;\n transition: ", ";\n box-sizing: border-box;\n font-size: 12px;\n color: ", ";\n\n ", "\n\n ", "\n\n ", ";\n"])), function (props) { return props.theme.transition; }, function (props) { return props.theme.labelColorLT; }, _styles.media.portable(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 12px 36px 24px;\n max-width: 80vw;\n "]))), _styles.media.palm(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n max-width: 100vw;\n "]))), function (props) { return props.cssStyle || ''; }); var ModalContent = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n z-index: ", ";\n"])), function (props) { return props.theme.modalContentZ; }); var ModalTitle = exports.ModalTitle = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n margin-bottom: 10px;\n position: relative;\n z-index: ", ";\n"])), function (props) { return props.theme.modalTitleFontSize; }, function (props) { return props.theme.modalTitleColor; }, function (props) { return props.theme.modalTitleZ; }); var StyledModalFooter = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n left: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding-top: 24px;\n ", ";\n\n ", ";\n z-index: ", ";\n"])), _styles.media.portable(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: 24px;\n "]))), _styles.media.palm(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: 16px;\n "]))), function (props) { return props.theme.modalFooterZ; }); var CloseButton = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n justify-content: flex-end;\n z-index: ", ";\n position: absolute;\n top: 24px;\n right: 24px;\n\n &:hover {\n cursor: pointer;\n }\n"])), function (props) { return props.theme.titleColorLT; }, function (props) { return props.theme.modalButtonZ; }); var FooterActionWrapper = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: flex-end;\n"]))); var defaultCancelButton = { link: true, large: true, children: 'modal.button.defaultCancel' }; var defaultConfirmButton = { cta: true, large: true, width: '160px', children: 'modal.button.defaultConfirm' }; /** * this method removes the `disabled` property from button props when disabled is set to false * to avoid issue with the disabled tag * * @param props */ var processDisabledProperty = function processDisabledProperty(props) { if (!props.disabled) { // eslint-disable-next-line @typescript-eslint/no-unused-vars var disabled = props.disabled, newProps = (0, _objectWithoutProperties2["default"])(props, _excluded); return newProps; } return props; }; var ModalFooter = exports.ModalFooter = function ModalFooter(_ref) { var _cancelButtonProps$ch, _confirmButtonProps$c; var cancel = _ref.cancel, confirm = _ref.confirm, cancelButton = _ref.cancelButton, confirmButton = _ref.confirmButton; var cancelButtonProps = processDisabledProperty(_objectSpread(_objectSpread({}, defaultCancelButton), cancelButton)); var confirmButtonProps = processDisabledProperty(_objectSpread(_objectSpread({}, defaultConfirmButton), confirmButton)); return /*#__PURE__*/_react["default"].createElement(StyledModalFooter, { className: "modal--footer" }, /*#__PURE__*/_react["default"].createElement(FooterActionWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, (0, _extends2["default"])({ className: "modal--footer--cancel-button" }, cancelButtonProps, { onClick: cancel }), /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: (_cancelButtonProps$ch = cancelButtonProps.children) !== null && _cancelButtonProps$ch !== void 0 ? _cancelButtonProps$ch : '' })), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, (0, _extends2["default"])({ className: "modal--footer--confirm-button" }, confirmButtonProps, { onClick: confirm }), /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: (_confirmButtonProps$c = confirmButtonProps.children) !== null && _confirmButtonProps$c !== void 0 ? _confirmButtonProps$c : '' })))); }; var ModalDialog = exports.ModalDialog = /*#__PURE__*/function (_Component) { function ModalDialog() { (0, _classCallCheck2["default"])(this, ModalDialog); return _callSuper(this, ModalDialog, arguments); } (0, _inherits2["default"])(ModalDialog, _Component); return (0, _createClass2["default"])(ModalDialog, [{ key: "render", value: function render() { var props = this.props; return /*#__PURE__*/_react["default"].createElement(_reactModal["default"], (0, _extends2["default"])({ className: props.className }, props, { testId: props['data-testid'], ariaHideApp: false, style: { overlay: _objectSpread({ backgroundColor: props.theme && props.theme.modalOverlayBgd || 'rgba(0, 0, 0, 0.5)', zIndex: props.theme && props.theme.modalOverLayZ || 1000 }, props.style) } }), /*#__PURE__*/_react["default"].createElement(ModalContentWrapper, { className: "modal--wrapper", cssStyle: props.cssStyle }, props.close && /*#__PURE__*/_react["default"].createElement(CloseButton, { className: "modal--close", onClick: props.onCancel }, /*#__PURE__*/_react["default"].createElement(_icons.Delete, { height: "14px" })), /*#__PURE__*/_react["default"].createElement("div", null, props.title && /*#__PURE__*/_react["default"].createElement(ModalTitle, { className: "modal--title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: props.title })), /*#__PURE__*/_react["default"].createElement(ModalContent, { className: "modal--body" }, props.children), props.footer && /*#__PURE__*/_react["default"].createElement(ModalFooter, { cancel: props.onCancel, confirm: props.onConfirm, cancelButton: props.cancelButton, confirmButton: props.confirmButton })))); } }]); }(_react.Component); (0, _defineProperty2["default"])(ModalDialog, "defaultProps", { footer: false, close: true, onConfirm: function onConfirm() { return; }, onCancel: function onCancel() { return; }, cancelButton: defaultCancelButton, confirmButton: defaultConfirmButton, cssStyle: [] }); var StyledModal = (0, _styledComponents["default"])(ModalDialog)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n top: 0;\n left: 0;\n transition: ", ";\n padding-left: 40px;\n padding-right: 40px;\n outline: none;\n\n ", ";\n\n ", ";\n\n &:focus {\n outline: 0;\n }\n"])), function (props) { return props.theme.transition; }, _styles.media.portable(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n padding-left: 24px;\n padding-right: 24px;\n "]))), _styles.media.palm(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n padding-left: 0;\n padding-right: 0;\n "])))); var _default = exports["default"] = StyledModal; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9jYWxpemF0aW9uIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0TW9kYWwiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3R5bGVzIiwiX2V4Y2x1ZGVkIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX3RlbXBsYXRlT2JqZWN0OCIsIl90ZW1wbGF0ZU9iamVjdDkiLCJfdGVtcGxhdGVPYmplY3QxMCIsIl90ZW1wbGF0ZU9iamVjdDExIiwiX3RlbXBsYXRlT2JqZWN0MTIiLCJfdGVtcGxhdGVPYmplY3QxMyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiTW9kYWxDb250ZW50V3JhcHBlciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsInRyYW5zaXRpb24iLCJsYWJlbENvbG9yTFQiLCJtZWRpYSIsInBvcnRhYmxlIiwicGFsbSIsImNzc1N0eWxlIiwiTW9kYWxDb250ZW50IiwibW9kYWxDb250ZW50WiIsIk1vZGFsVGl0bGUiLCJleHBvcnRzIiwibW9kYWxUaXRsZUZvbnRTaXplIiwibW9kYWxUaXRsZUNvbG9yIiwibW9kYWxUaXRsZVoiLCJTdHlsZWRNb2RhbEZvb3RlciIsIm1vZGFsRm9vdGVyWiIsIkNsb3NlQnV0dG9uIiwidGl0bGVDb2xvckxUIiwibW9kYWxCdXR0b25aIiwiRm9vdGVyQWN0aW9uV3JhcHBlciIsImRlZmF1bHRDYW5jZWxCdXR0b24iLCJsaW5rIiwibGFyZ2UiLCJjaGlsZHJlbiIsImRlZmF1bHRDb25maXJtQnV0dG9uIiwiY3RhIiwid2lkdGgiLCJwcm9jZXNzRGlzYWJsZWRQcm9wZXJ0eSIsImRpc2FibGVkIiwibmV3UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiTW9kYWxGb290ZXIiLCJfcmVmIiwiX2NhbmNlbEJ1dHRvblByb3BzJGNoIiwiX2NvbmZpcm1CdXR0b25Qcm9wcyRjIiwiY2FuY2VsIiwiY29uZmlybSIsImNhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b24iLCJjYW5jZWxCdXR0b25Qcm9wcyIsImNvbmZpcm1CdXR0b25Qcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJCdXR0b24iLCJfZXh0ZW5kczIiLCJvbkNsaWNrIiwiRm9ybWF0dGVkTWVzc2FnZSIsImlkIiwiTW9kYWxEaWFsb2ciLCJfQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJyZW5kZXIiLCJ0ZXN0SWQiLCJhcmlhSGlkZUFwcCIsInN0eWxlIiwib3ZlcmxheSIsImJhY2tncm91bmRDb2xvciIsIm1vZGFsT3ZlcmxheUJnZCIsInpJbmRleCIsIm1vZGFsT3ZlckxheVoiLCJjbG9zZSIsIm9uQ2FuY2VsIiwiRGVsZXRlIiwiaGVpZ2h0IiwidGl0bGUiLCJmb290ZXIiLCJvbkNvbmZpcm0iLCJDb21wb25lbnQiLCJTdHlsZWRNb2RhbCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9tb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBSZWFjdE5vZGUsIFByb3BzV2l0aENoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IHN0eWxlZCwge2Nzc30gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCB7RGVsZXRlfSBmcm9tICcuL2ljb25zJztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICcuL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7bWVkaWF9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcblxudHlwZSBDc3NTdHlsZVR5cGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBjc3M+O1xuXG5pbnRlcmZhY2UgTW9kYWxDb250ZW50V3JhcHBlclByb3BzIHtcbiAgY3NzU3R5bGU/OiBDc3NTdHlsZVR5cGUgfCBzdHJpbmc7XG59XG5cbmNvbnN0IE1vZGFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2PE1vZGFsQ29udGVudFdyYXBwZXJQcm9wcz5gXG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1heC13aWR0aDogNzB2dztcbiAgbWF4LWhlaWdodDogODV2aDtcbiAgcGFkZGluZzogMjRweCA3MnB4IDQwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiA5MnB4O1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgdHJhbnNpdGlvbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50cmFuc2l0aW9ufTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yTFR9O1xuXG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgcGFkZGluZzogMTJweCAzNnB4IDI0cHg7XG4gICAgbWF4LXdpZHRoOiA4MHZ3O1xuICBgfVxuXG4gICR7bWVkaWEucGFsbWBcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBgfVxuXG4gICR7cHJvcHMgPT4gcHJvcHMuY3NzU3R5bGUgfHwgJyd9O1xuYDtcblxuY29uc3QgTW9kYWxDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsQ29udGVudFp9O1xuYDtcblxudHlwZSBNb2RhbFRpdGxlUHJvcHMgPSBQcm9wc1dpdGhDaGlsZHJlbjx7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufT47XG5cbmV4cG9ydCBjb25zdCBNb2RhbFRpdGxlID0gc3R5bGVkLmRpdjxNb2RhbFRpdGxlUHJvcHM+YFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxUaXRsZUZvbnRTaXplfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxUaXRsZUNvbG9yfTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsVGl0bGVafTtcbmA7XG5cbmNvbnN0IFN0eWxlZE1vZGFsRm9vdGVyID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgcGFkZGluZy10b3A6IDI0cHg7XG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgcGFkZGluZy10b3A6IDI0cHg7XG4gIGB9O1xuXG4gICR7bWVkaWEucGFsbWBcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbiAgYH07XG4gIHotaW5kZXg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxGb290ZXJafTtcbmA7XG5cbmNvbnN0IENsb3NlQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGl0bGVDb2xvckxUfTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgei1pbmRleDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5tb2RhbEJ1dHRvblp9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjRweDtcbiAgcmlnaHQ6IDI0cHg7XG5cbiAgJjpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gO1xuXG5jb25zdCBGb290ZXJBY3Rpb25XcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbmA7XG5cbmNvbnN0IGRlZmF1bHRDYW5jZWxCdXR0b24gPSB7XG4gIGxpbms6IHRydWUsXG4gIGxhcmdlOiB0cnVlLFxuICBjaGlsZHJlbjogJ21vZGFsLmJ1dHRvbi5kZWZhdWx0Q2FuY2VsJ1xufTtcblxuY29uc3QgZGVmYXVsdENvbmZpcm1CdXR0b24gPSB7XG4gIGN0YTogdHJ1ZSxcbiAgbGFyZ2U6IHRydWUsXG4gIHdpZHRoOiAnMTYwcHgnLFxuICBjaGlsZHJlbjogJ21vZGFsLmJ1dHRvbi5kZWZhdWx0Q29uZmlybSdcbn07XG5cbnR5cGUgTW9kYWxCdXR0b25Qcm9wcyA9IHtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBsYXJnZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmVnYXRpdmU/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IHN0cmluZztcbn07XG5cbnR5cGUgTW9kYWxGb290ZXJQcm9wcyA9IHtcbiAgY2FuY2VsOiAoKSA9PiB2b2lkO1xuICBjb25maXJtOiAoZGF0YT86IGFueSkgPT4gdm9pZDtcbiAgY2FuY2VsQnV0dG9uPzogTW9kYWxCdXR0b25Qcm9wcztcbiAgY29uZmlybUJ1dHRvbj86IE1vZGFsQnV0dG9uUHJvcHM7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgZnJvbSBidXR0b24gcHJvcHMgd2hlbiBkaXNhYmxlZCBpcyBzZXQgdG8gZmFsc2VcbiAqIHRvIGF2b2lkIGlzc3VlIHdpdGggdGhlIGRpc2FibGVkIHRhZ1xuICpcbiAqIEBwYXJhbSBwcm9wc1xuICovXG5jb25zdCBwcm9jZXNzRGlzYWJsZWRQcm9wZXJ0eSA9IChwcm9wczogTW9kYWxCdXR0b25Qcm9wcyk6IE1vZGFsQnV0dG9uUHJvcHMgPT4ge1xuICBpZiAoIXByb3BzLmRpc2FibGVkKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtkaXNhYmxlZCwgLi4ubmV3UHJvcHN9ID0gcHJvcHM7XG4gICAgcmV0dXJuIG5ld1Byb3BzO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn07XG5cbmV4cG9ydCBjb25zdCBNb2RhbEZvb3RlcjogUmVhY3QuRkM8TW9kYWxGb290ZXJQcm9wcz4gPSAoe1xuICBjYW5jZWwsXG4gIGNvbmZpcm0sXG4gIGNhbmNlbEJ1dHRvbixcbiAgY29uZmlybUJ1dHRvblxufSkgPT4ge1xuICBjb25zdCBjYW5jZWxCdXR0b25Qcm9wcyA9IHByb2Nlc3NEaXNhYmxlZFByb3BlcnR5KHtcbiAgICAuLi5kZWZhdWx0Q2FuY2VsQnV0dG9uLFxuICAgIC4uLmNhbmNlbEJ1dHRvblxuICB9KTtcbiAgY29uc3QgY29uZmlybUJ1dHRvblByb3BzID0gcHJvY2Vzc0Rpc2FibGVkUHJvcGVydHkoey4uLmRlZmF1bHRDb25maXJtQnV0dG9uLCAuLi5jb25maXJtQnV0dG9ufSk7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZE1vZGFsRm9vdGVyIGNsYXNzTmFtZT1cIm1vZGFsLS1mb290ZXJcIj5cbiAgICAgIDxGb290ZXJBY3Rpb25XcmFwcGVyPlxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cIm1vZGFsLS1mb290ZXItLWNhbmNlbC1idXR0b25cIiB7Li4uY2FuY2VsQnV0dG9uUHJvcHN9IG9uQ2xpY2s9e2NhbmNlbH0+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2NhbmNlbEJ1dHRvblByb3BzLmNoaWxkcmVuID8/ICcnfSAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJtb2RhbC0tZm9vdGVyLS1jb25maXJtLWJ1dHRvblwiIHsuLi5jb25maXJtQnV0dG9uUHJvcHN9IG9uQ2xpY2s9e2NvbmZpcm19PlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtjb25maXJtQnV0dG9uUHJvcHMuY2hpbGRyZW4gPz8gJyd9IC8+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Gb290ZXJBY3Rpb25XcmFwcGVyPlxuICAgIDwvU3R5bGVkTW9kYWxGb290ZXI+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsRGlhbG9nT3duUHJvcHMge1xuICBmb290ZXI6IGJvb2xlYW47XG4gIGNsb3NlOiBib29sZWFuO1xuICBpc09wZW46IGJvb2xlYW47XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9uQ29uZmlybTogKC4uLmFyZ3M6IGFueSkgPT4gdm9pZDtcbiAgb25DYW5jZWw6ICguLi5hcmdzOiBhbnkpID0+IHZvaWQ7XG4gIGNvbmZpcm1CdXR0b24/OiBNb2RhbEJ1dHRvblByb3BzO1xuICBjb25maXJtQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbEJ1dHRvbj86IE1vZGFsQnV0dG9uUHJvcHM7XG4gIGNhbmNlbEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBjc3NTdHlsZT86IENzc1N0eWxlVHlwZSB8IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICB0aGVtZTogYW55O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IHR5cGUgTW9kYWxEaWFsb2dQcm9wcyA9IE1vZGFsRGlhbG9nT3duUHJvcHMgJlxuICBPbWl0PFJlYWN0TW9kYWwuUHJvcHMsICdzdHlsZScgfCAnYXJpYUhpZGVBcHAnIHwgJ2NsYXNzTmFtZSc+O1xuXG5leHBvcnQgY2xhc3MgTW9kYWxEaWFsb2cgZXh0ZW5kcyBDb21wb25lbnQ8TW9kYWxEaWFsb2dQcm9wcz4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGZvb3RlcjogZmFsc2UsXG4gICAgY2xvc2U6IHRydWUsXG4gICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSxcbiAgICBvbkNhbmNlbDogKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0sXG4gICAgY2FuY2VsQnV0dG9uOiBkZWZhdWx0Q2FuY2VsQnV0dG9uLFxuICAgIGNvbmZpcm1CdXR0b246IGRlZmF1bHRDb25maXJtQnV0dG9uLFxuICAgIGNzc1N0eWxlOiBbXVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7cHJvcHN9ID0gdGhpcztcbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHRlc3RJZD17cHJvcHNbJ2RhdGEtdGVzdGlkJ119XG4gICAgICAgIGFyaWFIaWRlQXBwPXtmYWxzZX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBvdmVybGF5OiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IChwcm9wcy50aGVtZSAmJiBwcm9wcy50aGVtZS5tb2RhbE92ZXJsYXlCZ2QpIHx8ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgICAgICAgICAgekluZGV4OiAocHJvcHMudGhlbWUgJiYgcHJvcHMudGhlbWUubW9kYWxPdmVyTGF5WikgfHwgMTAwMCxcbiAgICAgICAgICAgIC8vIGluIGNhc2Ugd2Ugd2FudCB0byBvdmVycmlkZSB0aGUgbW9kYWwgZGlhbG9nIHN0eWxlXG4gICAgICAgICAgICAuLi5wcm9wcy5zdHlsZVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPE1vZGFsQ29udGVudFdyYXBwZXIgY2xhc3NOYW1lPVwibW9kYWwtLXdyYXBwZXJcIiBjc3NTdHlsZT17cHJvcHMuY3NzU3R5bGV9PlxuICAgICAgICAgIHtwcm9wcy5jbG9zZSAmJiAoXG4gICAgICAgICAgICA8Q2xvc2VCdXR0b24gY2xhc3NOYW1lPVwibW9kYWwtLWNsb3NlXCIgb25DbGljaz17cHJvcHMub25DYW5jZWx9PlxuICAgICAgICAgICAgICA8RGVsZXRlIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgPC9DbG9zZUJ1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICB7cHJvcHMudGl0bGUgJiYgKFxuICAgICAgICAgICAgICA8TW9kYWxUaXRsZSBjbGFzc05hbWU9XCJtb2RhbC0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17cHJvcHMudGl0bGV9IC8+XG4gICAgICAgICAgICAgIDwvTW9kYWxUaXRsZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8TW9kYWxDb250ZW50IGNsYXNzTmFtZT1cIm1vZGFsLS1ib2R5XCI+e3Byb3BzLmNoaWxkcmVufTwvTW9kYWxDb250ZW50PlxuICAgICAgICAgICAge3Byb3BzLmZvb3RlciAmJiAoXG4gICAgICAgICAgICAgIDxNb2RhbEZvb3RlclxuICAgICAgICAgICAgICAgIGNhbmNlbD17cHJvcHMub25DYW5jZWx9XG4gICAgICAgICAgICAgICAgY29uZmlybT17cHJvcHMub25Db25maXJtfVxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbj17cHJvcHMuY2FuY2VsQnV0dG9ufVxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b249e3Byb3BzLmNvbmZpcm1CdXR0b259XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L01vZGFsQ29udGVudFdyYXBwZXI+XG4gICAgICA8L01vZGFsPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgU3R5bGVkTW9kYWwgPSBzdHlsZWQoTW9kYWxEaWFsb2cpYFxuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudHJhbnNpdGlvbn07XG4gIHBhZGRpbmctbGVmdDogNDBweDtcbiAgcGFkZGluZy1yaWdodDogNDBweDtcbiAgb3V0bGluZTogbm9uZTtcblxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmctbGVmdDogMjRweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xuICBgfTtcblxuICAke21lZGlhLnBhbG1gXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIGB9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlZE1vZGFsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQXdDLElBQUFRLFNBQUE7QUFBQSxJQUFBQyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBVnhDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQXhCLHdCQUFBd0IsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxH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