UNPKG

kepler.gl

Version:

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

173 lines (172 loc) 30.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.FieldListItemFactoryFactory = FieldListItemFactoryFactory; exports["default"] = 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _reselect = require("reselect"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/common-utils/src"); var _itemSelector = _interopRequireDefault(require("./item-selector/item-selector")); var _dropdownList = require("./item-selector/dropdown-list"); var _fieldToken = _interopRequireDefault(require("../common/field-token")); var _templateObject, _templateObject2, _templateObject3; // 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; })(); } var defaultDisplayOption = function defaultDisplayOption(d) { return d.displayName || d.name; }; var defaultValueOption = function defaultValueOption(d) { return d.name; }; var StyledToken = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n margin: 0 ", "px 0 0;\n"])), function (props) { return props.theme.fieldTokenRightMargin; }); var StyledFieldListItem = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n line-height: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n"]))); var StyledFieldSelector = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector__dropdown {\n // smaller padding on the side to accomodate field token\n padding: 0 6px;\n }\n"]))); FieldListItemFactoryFactory.deps = [_fieldToken["default"]]; // custom list Item function FieldListItemFactoryFactory(FieldToken) { var FieldListItemFactory = function FieldListItemFactory() { var showToken = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; var FieldListItem = function FieldListItem(_ref) { var value = _ref.value, _ref$displayOption = _ref.displayOption, displayOption = _ref$displayOption === void 0 ? defaultDisplayOption : _ref$displayOption; return /*#__PURE__*/_react["default"].createElement(StyledFieldListItem, { className: "field-selector_list-item" }, showToken ? /*#__PURE__*/_react["default"].createElement(StyledToken, null, /*#__PURE__*/_react["default"].createElement(FieldToken, { type: value.type })) : null, /*#__PURE__*/_react["default"].createElement("span", { className: _dropdownList.classList.listItemAnchor }, displayOption(value))); }; return FieldListItem; }; return FieldListItemFactory; } var SuggestedFieldHeader = function SuggestedFieldHeader() { return /*#__PURE__*/_react["default"].createElement("div", null, "Suggested Field"); }; function noop() { return; } function FieldSelectorFactory(FieldListItemFactory) { var FieldSelector = /*#__PURE__*/function (_Component) { function FieldSelector() { var _this; (0, _classCallCheck2["default"])(this, FieldSelector); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, FieldSelector, [].concat(args)); (0, _defineProperty2["default"])(_this, "fieldsSelector", function (props) { return props.fields; }); (0, _defineProperty2["default"])(_this, "valueSelector", function (props) { return props.value; }); (0, _defineProperty2["default"])(_this, "filteredFieldsSelector", (0, _reselect.createSelector)(_this.fieldsSelector, _this.valueSelector, function (fields, value) { return fields.filter(function (field) { return !(0, _src.toArray)(value).find(function (d) { return d.name ? d.name === field.name : d === field.name; }); }); })); (0, _defineProperty2["default"])(_this, "filterFieldTypesSelector", function (props) { return props.filterFieldTypes; }); (0, _defineProperty2["default"])(_this, "showTokenSelector", function (props) { return props.showToken; }); (0, _defineProperty2["default"])(_this, "selectedItemsSelector", (0, _reselect.createSelector)(_this.fieldsSelector, _this.valueSelector, function (fields, value) { return (0, _src.toArray)(value).map(function (d) { return fields.find(function (f) { return (0, _src.notNullorUndefined)(d) && d.name ? d.name === defaultValueOption(f) : d === defaultValueOption(f); }); }).filter(function (d) { return d; }); })); (0, _defineProperty2["default"])(_this, "fieldOptionsSelector", (0, _reselect.createSelector)(_this.filteredFieldsSelector, _this.filterFieldTypesSelector, function (fields, filterFieldTypes) { if (!filterFieldTypes) { return fields; } var filters = Array.isArray(filterFieldTypes) ? filterFieldTypes : [filterFieldTypes]; return fields.filter(function (f) { return filters.includes(f.type); }); })); // @ts-ignore Fix later (0, _defineProperty2["default"])(_this, "fieldListItemSelector", (0, _reselect.createSelector)(_this.showTokenSelector, FieldListItemFactory)); return _this; } (0, _inherits2["default"])(FieldSelector, _Component); return (0, _createClass2["default"])(FieldSelector, [{ key: "render", value: function render() { return /*#__PURE__*/_react["default"].createElement(StyledFieldSelector, { className: (0, _classnames["default"])('field-selector', this.props.className) }, /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { getOptionValue: function getOptionValue(d) { return d; }, disabled: this.props.disabled, closeOnSelect: this.props.closeOnSelect, displayOption: defaultDisplayOption, filterOption: "displayName", fixedOptions: this.props.suggested, inputTheme: this.props.inputTheme, size: this.props.size, isError: this.props.error, selectedItems: this.selectedItemsSelector(this.props), erasable: this.props.erasable // @ts-ignore - Argument of type 'Readonly<FieldSelectorFactoryProps>' is not assignable to parameter of type 'never' , options: this.fieldOptionsSelector(this.props), multiSelect: this.props.multiSelect, placeholder: this.props.placeholder, placement: this.props.placement, onChange: this.props.onSelect, reorderItems: this.props.reorderItems, DropDownLineItemRenderComponent: this.fieldListItemSelector(this.props), DropdownHeaderComponent: this.props.suggested ? SuggestedFieldHeader : null, CustomChickletComponent: this.props.CustomChickletComponent })); } }]); }(_react.Component); // @ts-ignore: Fix me (0, _defineProperty2["default"])(FieldSelector, "defaultProps", { erasable: true, disabled: false, error: false, fields: [], onSelect: noop, reorderItems: noop, placement: 'bottom', value: null, multiSelect: false, closeOnSelect: true, showToken: true, placeholder: 'placeholder.selectField', className: '' }); return FieldSelector; } FieldSelectorFactory.deps = [FieldListItemFactoryFactory]; var _default = exports["default"] = FieldSelectorFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9zcmMiLCJfaXRlbVNlbGVjdG9yIiwiX2Ryb3Bkb3duTGlzdCIsIl9maWVsZFRva2VuIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImRlZmF1bHREaXNwbGF5T3B0aW9uIiwiZCIsImRpc3BsYXlOYW1lIiwibmFtZSIsImRlZmF1bHRWYWx1ZU9wdGlvbiIsIlN0eWxlZFRva2VuIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiZmllbGRUb2tlblJpZ2h0TWFyZ2luIiwiU3R5bGVkRmllbGRMaXN0SXRlbSIsIlN0eWxlZEZpZWxkU2VsZWN0b3IiLCJGaWVsZExpc3RJdGVtRmFjdG9yeUZhY3RvcnkiLCJkZXBzIiwiRmllbGRUb2tlbkZhY3RvcnkiLCJGaWVsZFRva2VuIiwiRmllbGRMaXN0SXRlbUZhY3RvcnkiLCJzaG93VG9rZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJGaWVsZExpc3RJdGVtIiwiX3JlZiIsInZhbHVlIiwiX3JlZiRkaXNwbGF5T3B0aW9uIiwiZGlzcGxheU9wdGlvbiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0eXBlIiwiY2xhc3NMaXN0IiwibGlzdEl0ZW1BbmNob3IiLCJTdWdnZXN0ZWRGaWVsZEhlYWRlciIsIm5vb3AiLCJGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIkZpZWxkU2VsZWN0b3IiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZmllbGRzIiwiY3JlYXRlU2VsZWN0b3IiLCJmaWVsZHNTZWxlY3RvciIsInZhbHVlU2VsZWN0b3IiLCJmaWx0ZXIiLCJmaWVsZCIsInRvQXJyYXkiLCJmaW5kIiwiZmlsdGVyRmllbGRUeXBlcyIsIm1hcCIsImYiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJmaWx0ZXJlZEZpZWxkc1NlbGVjdG9yIiwiZmlsdGVyRmllbGRUeXBlc1NlbGVjdG9yIiwiZmlsdGVycyIsImlzQXJyYXkiLCJpbmNsdWRlcyIsInNob3dUb2tlblNlbGVjdG9yIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJyZW5kZXIiLCJjbGFzc25hbWVzIiwiZ2V0T3B0aW9uVmFsdWUiLCJkaXNhYmxlZCIsImNsb3NlT25TZWxlY3QiLCJmaWx0ZXJPcHRpb24iLCJmaXhlZE9wdGlvbnMiLCJzdWdnZXN0ZWQiLCJpbnB1dFRoZW1lIiwic2l6ZSIsImlzRXJyb3IiLCJlcnJvciIsInNlbGVjdGVkSXRlbXMiLCJzZWxlY3RlZEl0ZW1zU2VsZWN0b3IiLCJlcmFzYWJsZSIsIm9wdGlvbnMiLCJmaWVsZE9wdGlvbnNTZWxlY3RvciIsIm11bHRpU2VsZWN0IiwicGxhY2Vob2xkZXIiLCJwbGFjZW1lbnQiLCJvbkNoYW5nZSIsIm9uU2VsZWN0IiwicmVvcmRlckl0ZW1zIiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsImZpZWxkTGlzdEl0ZW1TZWxlY3RvciIsIkRyb3Bkb3duSGVhZGVyQ29tcG9uZW50IiwiQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQiLCJDb21wb25lbnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2ZpZWxkLXNlbGVjdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgQ29tcG9uZW50VHlwZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5cbmltcG9ydCB7RmllbGQsIFRvb2x0aXBGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCB7Y2xhc3NMaXN0fSBmcm9tICcuL2l0ZW0tc2VsZWN0b3IvZHJvcGRvd24tbGlzdCc7XG5pbXBvcnQgRmllbGRUb2tlbkZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL2ZpZWxkLXRva2VuJztcblxuY29uc3QgZGVmYXVsdERpc3BsYXlPcHRpb24gPSAoZDogRmllbGQpID0+IGQuZGlzcGxheU5hbWUgfHwgZC5uYW1lO1xuY29uc3QgZGVmYXVsdFZhbHVlT3B0aW9uID0gKGQ6IEZpZWxkKSA9PiBkLm5hbWU7XG5cbmNvbnN0IFN0eWxlZFRva2VuID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5maWVsZFRva2VuUmlnaHRNYXJnaW59cHggMCAwO1xuYDtcbmNvbnN0IFN0eWxlZEZpZWxkTGlzdEl0ZW0gPSBzdHlsZWQuZGl2YFxuICBsaW5lLWhlaWdodDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmA7XG5jb25zdCBTdHlsZWRGaWVsZFNlbGVjdG9yID0gc3R5bGVkLmRpdmBcbiAgLml0ZW0tc2VsZWN0b3JfX2Ryb3Bkb3duIHtcbiAgICAvLyBzbWFsbGVyIHBhZGRpbmcgb24gdGhlIHNpZGUgdG8gYWNjb21vZGF0ZSBmaWVsZCB0b2tlblxuICAgIHBhZGRpbmc6IDAgNnB4O1xuICB9XG5gO1xuZXhwb3J0IHR5cGUgRmllbGRMaXN0SXRlbUZhY3RvcnlQcm9wcyA9IHtcbiAgdmFsdWU6IEZpZWxkO1xuICBkaXNwbGF5T3B0aW9uOiAoZmllbGQ6IEZpZWxkKSA9PiBzdHJpbmc7XG59O1xuXG5GaWVsZExpc3RJdGVtRmFjdG9yeUZhY3RvcnkuZGVwcyA9IFtGaWVsZFRva2VuRmFjdG9yeV07XG4vLyBjdXN0b20gbGlzdCBJdGVtXG5leHBvcnQgZnVuY3Rpb24gRmllbGRMaXN0SXRlbUZhY3RvcnlGYWN0b3J5KEZpZWxkVG9rZW4pIHtcbiAgY29uc3QgRmllbGRMaXN0SXRlbUZhY3RvcnkgPSAoc2hvd1Rva2VuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IEZpZWxkTGlzdEl0ZW0gPSAoe1xuICAgICAgdmFsdWUsXG4gICAgICBkaXNwbGF5T3B0aW9uID0gZGVmYXVsdERpc3BsYXlPcHRpb25cbiAgICB9OiBGaWVsZExpc3RJdGVtRmFjdG9yeVByb3BzKSA9PiAoXG4gICAgICA8U3R5bGVkRmllbGRMaXN0SXRlbSBjbGFzc05hbWU9XCJmaWVsZC1zZWxlY3Rvcl9saXN0LWl0ZW1cIj5cbiAgICAgICAge3Nob3dUb2tlbiA/IChcbiAgICAgICAgICA8U3R5bGVkVG9rZW4+XG4gICAgICAgICAgICA8RmllbGRUb2tlbiB0eXBlPXt2YWx1ZS50eXBlfSAvPlxuICAgICAgICAgIDwvU3R5bGVkVG9rZW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTGlzdC5saXN0SXRlbUFuY2hvcn0+e2Rpc3BsYXlPcHRpb24odmFsdWUpfTwvc3Bhbj5cbiAgICAgIDwvU3R5bGVkRmllbGRMaXN0SXRlbT5cbiAgICApO1xuICAgIHJldHVybiBGaWVsZExpc3RJdGVtO1xuICB9O1xuICByZXR1cm4gRmllbGRMaXN0SXRlbUZhY3Rvcnk7XG59XG5cbmNvbnN0IFN1Z2dlc3RlZEZpZWxkSGVhZGVyID0gKCkgPT4gPGRpdj5TdWdnZXN0ZWQgRmllbGQ8L2Rpdj47XG5cbmV4cG9ydCB0eXBlIE1pbmltYWxGaWVsZCA9IHtuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmc7IGZvcm1hdDogc3RyaW5nOyB0eXBlPzogc3RyaW5nfTtcbmV4cG9ydCB0eXBlIEZpZWxkVHlwZSA9IHN0cmluZyB8IFRvb2x0aXBGaWVsZCB8IEZpZWxkO1xuZXhwb3J0IHR5cGUgRmllbGRWYWx1ZSA9IHN0cmluZyB8IHtuYW1lOiBzdHJpbmd9IHwgc3RyaW5nW10gfCB7bmFtZTogc3RyaW5nfVtdO1xuXG5leHBvcnQgdHlwZSBGaWVsZFNlbGVjdG9yUHJvcHM8T3B0aW9uIGV4dGVuZHMgTWluaW1hbEZpZWxkPiA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGZpZWxkczogT3B0aW9uW107XG4gIG9uU2VsZWN0OiAoXG4gICAgaXRlbXM6XG4gICAgICB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdD5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bWJlclxuICAgICAgfCBib29sZWFuXG4gICAgICB8IG9iamVjdFxuICAgICAgfCBudWxsXG4gICkgPT4gdm9pZDtcbiAgdmFsdWU/OiBGaWVsZFZhbHVlIHwgbnVsbDtcbiAgZmlsdGVyRmllbGRUeXBlcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBlcmFzYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBib29sZWFuO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICBzaG93VG9rZW4/OiBib29sZWFuO1xuICBzdWdnZXN0ZWQ/OiBPcHRpb25bXSB8IG51bGw7XG4gIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+O1xuICBzaXplPzogc3RyaW5nO1xuICByZW9yZGVySXRlbXM/OiAobmV3T3JkZXI6IGFueSkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuO1xufVxuZnVuY3Rpb24gRmllbGRTZWxlY3RvckZhY3RvcnkoXG4gIEZpZWxkTGlzdEl0ZW1GYWN0b3J5OiBSZXR1cm5UeXBlPHR5cGVvZiBGaWVsZExpc3RJdGVtRmFjdG9yeUZhY3Rvcnk+XG4pOiBDb21wb25lbnRUeXBlPEZpZWxkU2VsZWN0b3JQcm9wczxNaW5pbWFsRmllbGQ+PiB7XG4gIGNsYXNzIEZpZWxkU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQ8RmllbGRTZWxlY3RvclByb3BzPE1pbmltYWxGaWVsZD4+IHtcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZXJhc2FibGU6IHRydWUsXG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICBlcnJvcjogZmFsc2UsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgb25TZWxlY3Q6IG5vb3AsXG4gICAgICByZW9yZGVySXRlbXM6IG5vb3AsXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBtdWx0aVNlbGVjdDogZmFsc2UsXG4gICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgc2hvd1Rva2VuOiB0cnVlLFxuICAgICAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlci5zZWxlY3RGaWVsZCcsXG4gICAgICBjbGFzc05hbWU6ICcnXG4gICAgfTtcblxuICAgIGZpZWxkc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZmllbGRzO1xuICAgIHZhbHVlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52YWx1ZTtcbiAgICBmaWx0ZXJlZEZpZWxkc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZpZWxkc1NlbGVjdG9yLFxuICAgICAgdGhpcy52YWx1ZVNlbGVjdG9yLFxuICAgICAgKGZpZWxkcywgdmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgZmllbGQgPT4gIXRvQXJyYXkodmFsdWUpLmZpbmQoZCA9PiAoZC5uYW1lID8gZC5uYW1lID09PSBmaWVsZC5uYW1lIDogZCA9PT0gZmllbGQubmFtZSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICBmaWx0ZXJGaWVsZFR5cGVzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5maWx0ZXJGaWVsZFR5cGVzO1xuICAgIHNob3dUb2tlblNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuc2hvd1Rva2VuO1xuXG4gICAgc2VsZWN0ZWRJdGVtc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZpZWxkc1NlbGVjdG9yLFxuICAgICAgdGhpcy52YWx1ZVNlbGVjdG9yLFxuICAgICAgKGZpZWxkcywgdmFsdWUpID0+XG4gICAgICAgIHRvQXJyYXkodmFsdWUpXG4gICAgICAgICAgLm1hcChkID0+XG4gICAgICAgICAgICBmaWVsZHMuZmluZChmID0+XG4gICAgICAgICAgICAgIG5vdE51bGxvclVuZGVmaW5lZChkKSAmJiBkLm5hbWVcbiAgICAgICAgICAgICAgICA/IGQubmFtZSA9PT0gZGVmYXVsdFZhbHVlT3B0aW9uKGYpXG4gICAgICAgICAgICAgICAgOiBkID09PSBkZWZhdWx0VmFsdWVPcHRpb24oZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpXG4gICAgKTtcblxuICAgIGZpZWxkT3B0aW9uc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZpbHRlcmVkRmllbGRzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZpbHRlckZpZWxkVHlwZXNTZWxlY3RvcixcbiAgICAgIChmaWVsZHMsIGZpbHRlckZpZWxkVHlwZXMpID0+IHtcbiAgICAgICAgaWYgKCFmaWx0ZXJGaWVsZFR5cGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gQXJyYXkuaXNBcnJheShmaWx0ZXJGaWVsZFR5cGVzKSA/IGZpbHRlckZpZWxkVHlwZXMgOiBbZmlsdGVyRmllbGRUeXBlc107XG4gICAgICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGYgPT4gZmlsdGVycy5pbmNsdWRlcyhmLnR5cGUpKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQHRzLWlnbm9yZSBGaXggbGF0ZXJcbiAgICBmaWVsZExpc3RJdGVtU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnNob3dUb2tlblNlbGVjdG9yLCBGaWVsZExpc3RJdGVtRmFjdG9yeSk7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkRmllbGRTZWxlY3RvciBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2ZpZWxkLXNlbGVjdG9yJywgdGhpcy5wcm9wcy5jbGFzc05hbWUpfT5cbiAgICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17ZCA9PiBkfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICBjbG9zZU9uU2VsZWN0PXt0aGlzLnByb3BzLmNsb3NlT25TZWxlY3R9XG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtkZWZhdWx0RGlzcGxheU9wdGlvbn1cbiAgICAgICAgICAgIGZpbHRlck9wdGlvbj1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucz17dGhpcy5wcm9wcy5zdWdnZXN0ZWR9XG4gICAgICAgICAgICBpbnB1dFRoZW1lPXt0aGlzLnByb3BzLmlucHV0VGhlbWV9XG4gICAgICAgICAgICBzaXplPXt0aGlzLnByb3BzLnNpemV9XG4gICAgICAgICAgICBpc0Vycm9yPXt0aGlzLnByb3BzLmVycm9yfVxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dGhpcy5zZWxlY3RlZEl0ZW1zU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBlcmFzYWJsZT17dGhpcy5wcm9wcy5lcmFzYWJsZX1cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxGaWVsZFNlbGVjdG9yRmFjdG9yeVByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5maWVsZE9wdGlvbnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIG11bHRpU2VsZWN0PXt0aGlzLnByb3BzLm11bHRpU2VsZWN0fVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBwbGFjZW1lbnQ9e3RoaXMucHJvcHMucGxhY2VtZW50fVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICByZW9yZGVySXRlbXM9e3RoaXMucHJvcHMucmVvcmRlckl0ZW1zfVxuICAgICAgICAgICAgRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudD17dGhpcy5maWVsZExpc3RJdGVtU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBEcm9wZG93bkhlYWRlckNvbXBvbmVudD17dGhpcy5wcm9wcy5zdWdnZXN0ZWQgPyBTdWdnZXN0ZWRGaWVsZEhlYWRlciA6IG51bGx9XG4gICAgICAgICAgICBDdXN0b21DaGlja2xldENvbXBvbmVudD17dGhpcy5wcm9wcy5DdXN0b21DaGlja2xldENvbXBvbmVudH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZEZpZWxkU2VsZWN0b3I+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmU6IEZpeCBtZVxuICByZXR1cm4gRmllbGRTZWxlY3Rvcjtcbn1cblxuRmllbGRTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtGaWVsZExpc3RJdGVtRmFjdG9yeUZhY3RvcnldO1xuZXhwb3J0IGRlZmF1bHQgRmllbGRTZWxlY3RvckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBSixPQUFBO0FBR0EsSUFBQUssSUFBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sYUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBVCxzQkFBQSxDQUFB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