kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
202 lines (156 loc) • 19.9 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
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 _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
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 _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _colorUtils = require("../../../utils/color-utils");
var _singleColorPalette = _interopRequireDefault(require("../layer-panel/single-color-palette"));
var _colorRangeSelector = _interopRequireDefault(require("../layer-panel/color-range-selector"));
var _colorPalette = _interopRequireDefault(require("../layer-panel/color-palette"));
var _styledComponents2 = require("../../common/styled-components");
var _reactOnclickoutside = _interopRequireDefault(require("react-onclickoutside"));
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .color-select__input-group {\n flex-grow: 1;\n }\n .color-select__input-group:nth-child(2) {\n margin-left: 12px;\n }\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n height: ", ";\n\n .color-selector__selector__label {\n text-transform: capitalize;\n font-size: 12px;\n text-align: center;\n color: ", ";\n }\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 32px;\n height: 18px;\n border-radius: 1px;\n background-color: ", ";\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var ColorBlock = _styledComponents["default"].div(_templateObject(), function (props) {
return "rgb(".concat(props.color.slice(0, 3).join(','), ")");
});
var ColorSelectorInput = _styledComponents["default"].div(_templateObject2(), function (props) {
return props.inputTheme === 'secondary' ? props.theme.secondaryInput : props.theme.input;
}, function (props) {
return props.theme.inputBoxHeight;
}, function (props) {
return props.theme.inputPlaceholderColor;
});
var InputBoxContainer = _styledComponents["default"].div(_templateObject3());
var ColorSelector =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(ColorSelector, _Component);
function ColorSelector() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2["default"])(this, ColorSelector);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(ColorSelector)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
editing: false
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClickOutside", function (e) {
if (_this.state.editing !== false) {
_this.setState({
editing: false
});
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onSelectColor", function (color, e) {
e.stopPropagation();
if (_this.props.colorSets[_this.state.editing]) {
_this.props.colorSets[_this.state.editing].setColor(color);
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_showDropdown", function (e, i) {
e.stopPropagation();
e.preventDefault();
_this.setState({
editing: i
});
});
return _this;
}
(0, _createClass2["default"])(ColorSelector, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
colorSets = _this$props.colorSets,
disabled = _this$props.disabled,
inputTheme = _this$props.inputTheme;
var editing = this.state.editing;
var currentEditing = colorSets[editing] && (0, _typeof2["default"])(colorSets[editing]) === 'object';
return _react["default"].createElement("div", {
className: "color-selector"
}, _react["default"].createElement(InputBoxContainer, null, colorSets.map(function (cSet, i) {
return _react["default"].createElement("div", {
className: "color-select__input-group",
key: i
}, _react["default"].createElement(ColorSelectorInput, {
className: "color-selector__selector",
active: editing === i,
disabled: disabled,
inputTheme: inputTheme,
onMouseDown: function onMouseDown(e) {
return _this2._showDropdown(e, i);
}
}, cSet.isRange ? _react["default"].createElement(_colorPalette["default"], {
colors: cSet.selectedColor.colors
}) : _react["default"].createElement(ColorBlock, {
className: "color-selector__selector__block",
color: cSet.selectedColor
}), cSet.label ? _react["default"].createElement("div", {
className: "color-selector__selector__label"
}, cSet.label) : null));
})), currentEditing ? _react["default"].createElement(_styledComponents2.StyledPanelDropdown, {
className: "color-selector__dropdown"
}, colorSets[editing].isRange ? _react["default"].createElement(_colorRangeSelector["default"], {
selectedColorRange: colorSets[editing].selectedColor,
onSelectColorRange: this._onSelectColor
}) : _react["default"].createElement(_singleColorPalette["default"], {
selectedColor: (0, _colorUtils.rgbToHex)(colorSets[editing].selectedColor),
onSelectColor: this._onSelectColor
})) : null);
}
}]);
return ColorSelector;
}(_react.Component);
(0, _defineProperty2["default"])(ColorSelector, "propTypes", {
colorSets: _propTypes["default"].arrayOf(_propTypes["default"].shape({
selectedColor: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].any), _propTypes["default"].object]),
setColor: _propTypes["default"].func.isRequired,
isRange: _propTypes["default"].bool,
label: _propTypes["default"].string
})),
inputTheme: _propTypes["default"].string,
disabled: _propTypes["default"].bool
});
(0, _defineProperty2["default"])(ColorSelector, "defaultProps", {
colorSets: []
});
;
var _default = (0, _reactOnclickoutside["default"])(ColorSelector);
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvd2lkZ2V0LXBhbmVsL2NvbG9yLXNlbGVjdG9yLmpzIl0sIm5hbWVzIjpbIkNvbG9yQmxvY2siLCJzdHlsZWQiLCJkaXYiLCJwcm9wcyIsImNvbG9yIiwic2xpY2UiLCJqb2luIiwiQ29sb3JTZWxlY3RvcklucHV0IiwiaW5wdXRUaGVtZSIsInRoZW1lIiwic2Vjb25kYXJ5SW5wdXQiLCJpbnB1dCIsImlucHV0Qm94SGVpZ2h0IiwiaW5wdXRQbGFjZWhvbGRlckNvbG9yIiwiSW5wdXRCb3hDb250YWluZXIiLCJDb2xvclNlbGVjdG9yIiwiZWRpdGluZyIsImUiLCJzdGF0ZSIsInNldFN0YXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiY29sb3JTZXRzIiwic2V0Q29sb3IiLCJpIiwicHJldmVudERlZmF1bHQiLCJkaXNhYmxlZCIsImN1cnJlbnRFZGl0aW5nIiwibWFwIiwiY1NldCIsIl9zaG93RHJvcGRvd24iLCJpc1JhbmdlIiwic2VsZWN0ZWRDb2xvciIsImNvbG9ycyIsImxhYmVsIiwiX29uU2VsZWN0Q29sb3IiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJhbnkiLCJvYmplY3QiLCJmdW5jIiwiaXNSZXF1aXJlZCIsImJvb2wiLCJzdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLFVBQVUsR0FBR0MsNkJBQU9DLEdBQVYsb0JBSU0sVUFBQUMsS0FBSztBQUFBLHVCQUFXQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsS0FBWixDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QkMsSUFBeEIsQ0FBNkIsR0FBN0IsQ0FBWDtBQUFB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QWNrQjtBQUNwQk0sRUFBQUEsU0FBUyxFQUFFO0FBRFMsQztBQTZFdkI7O2VBRWMscUNBQWVOLGFBQWYsQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtyZ2JUb0hleH0gZnJvbSAndXRpbHMvY29sb3ItdXRpbHMnO1xuaW1wb3J0IFNpbmdsZUNvbG9yUGFsZXR0ZSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvc2luZ2xlLWNvbG9yLXBhbGV0dGUnO1xuaW1wb3J0IENvbG9yUmFuZ2VTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3ItcmFuZ2Utc2VsZWN0b3InO1xuaW1wb3J0IENvbG9yUGFsZXR0ZSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvY29sb3ItcGFsZXR0ZSc7XG5pbXBvcnQge1N0eWxlZFBhbmVsRHJvcGRvd259IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBvbkNsaWNrT3V0c2lkZSBmcm9tICdyZWFjdC1vbmNsaWNrb3V0c2lkZSc7XG5cbmNvbnN0IENvbG9yQmxvY2sgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gYHJnYigke3Byb3BzLmNvbG9yLnNsaWNlKDAsIDMpLmpvaW4oJywnKX0pYH07XG5gO1xuXG5jb25zdCBDb2xvclNlbGVjdG9ySW5wdXQgPSBzdHlsZWQuZGl2YFxuICAke3Byb3BzID0+XG4gICAgcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ3NlY29uZGFyeSdcbiAgICAgID8gcHJvcHMudGhlbWUuc2Vjb25kYXJ5SW5wdXRcbiAgICAgIDogcHJvcHMudGhlbWUuaW5wdXR9O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRCb3hIZWlnaHR9O1xuXG4gIC5jb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2xhYmVsIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0UGxhY2Vob2xkZXJDb2xvcn07XG4gIH1cbmA7XG5cbmNvbnN0IElucHV0Qm94Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5jb2xvci1zZWxlY3RfX2lucHV0LWdyb3VwIHtcbiAgICBmbGV4LWdyb3c6IDE7XG4gIH1cbiAgLmNvbG9yLXNlbGVjdF9faW5wdXQtZ3JvdXA6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgfVxuYDtcblxuY2xhc3MgQ29sb3JTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY29sb3JTZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHNlbGVjdGVkQ29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgICAgIHNldENvbG9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgICBpc1JhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgIH0pXG4gICAgKSxcbiAgICBpbnB1dFRoZW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY29sb3JTZXRzOiBbXVxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIGVkaXRpbmc6IGZhbHNlXG4gIH07XG5cbiAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gZSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IGZhbHNlfSk7XG4gICAgfVxuICB9O1xuXG4gIF9vblNlbGVjdENvbG9yID0gKGNvbG9yLCBlKSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5wcm9wcy5jb2xvclNldHNbdGhpcy5zdGF0ZS5lZGl0aW5nXSkge1xuICAgICAgdGhpcy5wcm9wcy5jb2xvclNldHNbdGhpcy5zdGF0ZS5lZGl0aW5nXS5zZXRDb2xvcihjb2xvcik7XG4gICAgfVxuICB9O1xuXG4gIF9zaG93RHJvcGRvd24gPSAoZSwgaSkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IGl9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2NvbG9yU2V0cywgZGlzYWJsZWQsIGlucHV0VGhlbWV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZWRpdGluZ30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGN1cnJlbnRFZGl0aW5nID1cbiAgICAgIGNvbG9yU2V0c1tlZGl0aW5nXSAmJiB0eXBlb2YgY29sb3JTZXRzW2VkaXRpbmddID09PSAnb2JqZWN0JztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbG9yLXNlbGVjdG9yXCI+XG4gICAgICAgIDxJbnB1dEJveENvbnRhaW5lcj5cbiAgICAgICAgICB7Y29sb3JTZXRzLm1hcCgoY1NldCwgaSkgPT4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3RfX2lucHV0LWdyb3VwXCIga2V5PXtpfT5cblxuICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvcklucHV0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRpbmcgPT09IGl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2UgPT4gdGhpcy5fc2hvd0Ryb3Bkb3duKGUsIGkpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NTZXQuaXNSYW5nZSA/IChcbiAgICAgICAgICAgICAgICAgIDxDb2xvclBhbGV0dGUgY29sb3JzPXtjU2V0LnNlbGVjdGVkQ29sb3IuY29sb3JzfSAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8Q29sb3JCbG9ja1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2Jsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e2NTZXQuc2VsZWN0ZWRDb2xvcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7Y1NldC5sYWJlbCA/IDxkaXYgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yX19sYWJlbFwiPntjU2V0LmxhYmVsfTwvZGl2PiA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29sb3JTZWxlY3RvcklucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvSW5wdXRCb3hDb250YWluZXI+XG4gICAgICAgIHtjdXJyZW50RWRpdGluZyA/IChcbiAgICAgICAgICA8U3R5bGVkUGFuZWxEcm9wZG93biBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fZHJvcGRvd25cIj5cbiAgICAgICAgICAgIHtjb2xvclNldHNbZWRpdGluZ10uaXNSYW5nZSA/IChcbiAgICAgICAgICAgICAgPENvbG9yUmFuZ2VTZWxlY3RvclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3JSYW5nZT17Y29sb3JTZXRzW2VkaXRpbmddLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICAgICAgb25TZWxlY3RDb2xvclJhbmdlPXt0aGlzLl9vblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFNpbmdsZUNvbG9yUGFsZXR0ZVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e3JnYlRvSGV4KGNvbG9yU2V0c1tlZGl0aW5nXS5zZWxlY3RlZENvbG9yKX1cbiAgICAgICAgICAgICAgICBvblNlbGVjdENvbG9yPXt0aGlzLl9vblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0eWxlZFBhbmVsRHJvcGRvd24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgb25DbGlja091dHNpZGUoQ29sb3JTZWxlY3Rvcik7XG4iXX0=