UNPKG

kepler.gl

Version:

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

142 lines (122 loc) 17 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _defaultSettings = require("../../constants/default-settings"); var _icons = require("../common/icons"); var _styledComponents = require("../common/styled-components"); var _toolbarItem = _interopRequireDefault(require("../common/toolbar-item")); var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip")); var _mapControlPanel = _interopRequireDefault(require("./map-control-panel")); var _mapControlToolbar = _interopRequireDefault(require("./map-control-toolbar")); // Copyright (c) 2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. MapDrawPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapControlToolbar["default"]]; function MapDrawPanelFactory(MapControlTooltip, MapControlPanel, MapControlToolbar) { var defaultActionIcons = { visible: _icons.EyeSeen, hidden: _icons.EyeUnseen, polygon: _icons.DrawPolygon, cursor: _icons.CursorClick, innerPolygon: _icons.Polygon, rectangle: _icons.Rectangle }; /** @type {import('./map-draw-panel').MapDrawPanelComponent} */ var MapDrawPanel = /*#__PURE__*/_react["default"].memo(function (_ref) { var _mapControls$mapDraw, _mapControls$mapDraw2; var editor = _ref.editor, mapControls = _ref.mapControls, onToggleMapControl = _ref.onToggleMapControl, onSetEditorMode = _ref.onSetEditorMode, onToggleEditorVisibility = _ref.onToggleEditorVisibility, _ref$actionIcons = _ref.actionIcons, actionIcons = _ref$actionIcons === void 0 ? defaultActionIcons : _ref$actionIcons; var isActive = mapControls === null || mapControls === void 0 ? void 0 : (_mapControls$mapDraw = mapControls.mapDraw) === null || _mapControls$mapDraw === void 0 ? void 0 : _mapControls$mapDraw.active; var onToggleMenuPanel = (0, _react.useCallback)(function () { return onToggleMapControl('mapDraw'); }, [onToggleMapControl]); if (!(mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw2 = mapControls.mapDraw) !== null && _mapControls$mapDraw2 !== void 0 && _mapControls$mapDraw2.show)) { return null; } return /*#__PURE__*/_react["default"].createElement("div", { className: "map-draw-controls", style: { position: 'relative' } }, isActive ? /*#__PURE__*/_react["default"].createElement(MapControlToolbar, { show: isActive }, /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "edit-feature", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.EDIT); }, label: "toolbar.select", icon: actionIcons.cursor, active: editor.mode === _defaultSettings.EDITOR_MODES.EDIT }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "draw-feature", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_POLYGON); }, label: "toolbar.polygon", icon: actionIcons.innerPolygon, active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_POLYGON }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "draw-rectangle", onClick: function onClick() { return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_RECTANGLE); }, label: "toolbar.rectangle", icon: actionIcons.rectangle, active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_RECTANGLE }), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], { className: "toggle-features", onClick: onToggleEditorVisibility, label: editor.visible ? 'toolbar.hide' : 'toolbar.show', icon: editor.visible ? actionIcons.visible : actionIcons.hidden })) : null, /*#__PURE__*/_react["default"].createElement(_styledComponents.MapControlButton, { onClick: function onClick(e) { e.preventDefault(); onToggleMenuPanel(); }, active: isActive, className: (0, _classnames["default"])('map-control-button', 'map-draw', { isActive: isActive }), "data-tip": true, "data-for": "map-draw" }, /*#__PURE__*/_react["default"].createElement(actionIcons.polygon, { height: "22px" }), /*#__PURE__*/_react["default"].createElement(MapControlTooltip, { id: "map-draw", message: "tooltip.DrawOnMap" }))); }); MapDrawPanel.displayName = 'MapDrawPanel'; return MapDrawPanel; } var _default = MapDrawPanelFactory; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtZHJhdy1wYW5lbC5qcyJdLCJuYW1lcyI6WyJNYXBEcmF3UGFuZWxGYWN0b3J5IiwiZGVwcyIsIk1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSIsIk1hcENvbnRyb2xQYW5lbEZhY3RvcnkiLCJNYXBDb250cm9sVG9vbGJhckZhY3RvcnkiLCJNYXBDb250cm9sVG9vbHRpcCIsIk1hcENvbnRyb2xQYW5lbCIsIk1hcENvbnRyb2xUb29sYmFyIiwiZGVmYXVsdEFjdGlvbkljb25zIiwidmlzaWJsZSIsIkV5ZVNlZW4iLCJoaWRkZW4iLCJFeWVVbnNlZW4iLCJwb2x5Z29uIiwiRHJhd1BvbHlnb24iLCJjdXJzb3IiLCJDdXJzb3JDbGljayIsImlubmVyUG9seWdvbiIsIlBvbHlnb24iLCJyZWN0YW5nbGUiLCJSZWN0YW5nbGUiLCJNYXBEcmF3UGFuZWwiLCJSZWFjdCIsIm1lbW8iLCJlZGl0b3IiLCJtYXBDb250cm9scyIsIm9uVG9nZ2xlTWFwQ29udHJvbCIsIm9uU2V0RWRpdG9yTW9kZSIsIm9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsImFjdGlvbkljb25zIiwiaXNBY3RpdmUiLCJtYXBEcmF3IiwiYWN0aXZlIiwib25Ub2dnbGVNZW51UGFuZWwiLCJzaG93IiwicG9zaXRpb24iLCJFRElUT1JfTU9ERVMiLCJFRElUIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsIkRSQVdfUkVDVEFOR0xFIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQVFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXBDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW9CQUEsbUJBQW1CLENBQUNDLElB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QUFFWix3QkFGWDtBQUdFLE1BQUEsS0FBSyxFQUFFSixNQUFNLENBQUNmLE9BQVAsR0FBaUIsY0FBakIsR0FBa0MsY0FIM0M7QUFJRSxNQUFBLElBQUksRUFBRWUsTUFBTSxDQUFDZixPQUFQLEdBQWlCb0IsV0FBVyxDQUFDcEIsT0FBN0IsR0FBdUNvQixXQUFXLENBQUNsQjtBQUozRCxNQXRCRixDQURPLEdBOEJMLElBL0JOLGVBZ0NFLGdDQUFDLGtDQUFEO0FBQ0UsTUFBQSxPQUFPLEVBQUUsaUJBQUE4QixDQUFDLEVBQUk7QUFDWkEsUUFBQUEsQ0FBQyxDQUFDQyxjQUFGO0FBQ0FULFFBQUFBLGlCQUFpQjtBQUNsQixPQUpIO0FBS0UsTUFBQSxNQUFNLEVBQUVILFFBTFY7QUFNRSxNQUFBLFNBQVMsRUFBRSw0QkFBVyxvQkFBWCxFQUFpQyxVQUFqQyxFQUE2QztBQUFDQSxRQUFBQSxRQUFRLEVBQVJBO0FBQUQsT0FBN0MsQ0FOYjtBQU9FLHNCQVBGO0FBUUUsa0JBQVM7QUFSWCxvQkFVRSxnQ0FBQyxXQUFELENBQWEsT0FBYjtBQUFxQixNQUFBLE1BQU0sRUFBQztBQUE1QixNQVZGLGVBV0UsZ0NBQUMsaUJBQUQ7QUFBbUIsTUFBQSxFQUFFLEVBQUMsVUFBdEI7QUFBaUMsTUFBQSxPQUFPLEVBQUM7QUFBekMsTUFYRixDQWhDRixDQURGO0FBZ0RELEdBaEVrQixDQUFyQjs7QUFtRUFULEVBQUFBLFlBQVksQ0FBQ3NCLFdBQWIsR0FBMkIsY0FBM0I7QUFDQSxTQUFPdEIsWUFBUDtBQUNEOztlQUVjckIsbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjEgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCB7RURJVE9SX01PREVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBDdXJzb3JDbGljayxcbiAgRHJhd1BvbHlnb24sXG4gIEV5ZVNlZW4sXG4gIEV5ZVVuc2VlbixcbiAgUG9seWdvbixcbiAgUmVjdGFuZ2xlXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFRvb2xiYXJJdGVtIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3Rvb2xiYXItaXRlbSc7XG5pbXBvcnQgTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRyb2wtdG9vbHRpcCc7XG5pbXBvcnQgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXBhbmVsJztcbmltcG9ydCBNYXBDb250cm9sVG9vbGJhckZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sYmFyJztcblxuTWFwRHJhd1BhbmVsRmFjdG9yeS5kZXBzID0gW1xuICBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksXG4gIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksXG4gIE1hcENvbnRyb2xUb29sYmFyRmFjdG9yeVxuXTtcbmZ1bmN0aW9uIE1hcERyYXdQYW5lbEZhY3RvcnkoTWFwQ29udHJvbFRvb2x0aXAsIE1hcENvbnRyb2xQYW5lbCwgTWFwQ29udHJvbFRvb2xiYXIpIHtcbiAgY29uc3QgZGVmYXVsdEFjdGlvbkljb25zID0ge1xuICAgIHZpc2libGU6IEV5ZVNlZW4sXG4gICAgaGlkZGVuOiBFeWVVbnNlZW4sXG4gICAgcG9seWdvbjogRHJhd1BvbHlnb24sXG4gICAgY3Vyc29yOiBDdXJzb3JDbGljayxcbiAgICBpbm5lclBvbHlnb246IFBvbHlnb24sXG4gICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVcbiAgfTtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vbWFwLWRyYXctcGFuZWwnKS5NYXBEcmF3UGFuZWxDb21wb25lbnR9ICovXG4gIGNvbnN0IE1hcERyYXdQYW5lbCA9IFJlYWN0Lm1lbW8oXG4gICAgKHtcbiAgICAgIGVkaXRvcixcbiAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgb25Ub2dnbGVNYXBDb250cm9sLFxuICAgICAgb25TZXRFZGl0b3JNb2RlLFxuICAgICAgb25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5LFxuICAgICAgYWN0aW9uSWNvbnMgPSBkZWZhdWx0QWN0aW9uSWNvbnNcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IG1hcENvbnRyb2xzPy5tYXBEcmF3Py5hY3RpdmU7XG4gICAgICBjb25zdCBvblRvZ2dsZU1lbnVQYW5lbCA9IHVzZUNhbGxiYWNrKCgpID0+IG9uVG9nZ2xlTWFwQ29udHJvbCgnbWFwRHJhdycpLCBbXG4gICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbFxuICAgICAgXSk7XG4gICAgICBpZiAoIW1hcENvbnRyb2xzPy5tYXBEcmF3Py5zaG93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXAtZHJhdy1jb250cm9sc1wiIHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZSd9fT5cbiAgICAgICAgICB7aXNBY3RpdmUgPyAoXG4gICAgICAgICAgICA8TWFwQ29udHJvbFRvb2xiYXIgc2hvdz17aXNBY3RpdmV9PlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJlZGl0LWZlYXR1cmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2V0RWRpdG9yTW9kZShFRElUT1JfTU9ERVMuRURJVCl9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJ0b29sYmFyLnNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWNvbj17YWN0aW9uSWNvbnMuY3Vyc29yfVxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZWRpdG9yLm1vZGUgPT09IEVESVRPUl9NT0RFUy5FRElUfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcmF3LWZlYXR1cmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2V0RWRpdG9yTW9kZShFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OKX1cbiAgICAgICAgICAgICAgICBsYWJlbD1cInRvb2xiYXIucG9seWdvblwiXG4gICAgICAgICAgICAgICAgaWNvbj17YWN0aW9uSWNvbnMuaW5uZXJQb2x5Z29ufVxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZWRpdG9yLm1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT059XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxUb29sYmFySXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRyYXctcmVjdGFuZ2xlXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNldEVkaXRvck1vZGUoRURJVE9SX01PREVTLkRSQVdfUkVDVEFOR0xFKX1cbiAgICAgICAgICAgICAgICBsYWJlbD1cInRvb2xiYXIucmVjdGFuZ2xlXCJcbiAgICAgICAgICAgICAgICBpY29uPXthY3Rpb25JY29ucy5yZWN0YW5nbGV9XG4gICAgICAgICAgICAgICAgYWN0aXZlPXtlZGl0b3IubW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUkVDVEFOR0xFfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0b2dnbGUtZmVhdHVyZXNcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICBsYWJlbD17ZWRpdG9yLnZpc2libGUgPyAndG9vbGJhci5oaWRlJyA6ICd0b29sYmFyLnNob3cnfVxuICAgICAgICAgICAgICAgIGljb249e2VkaXRvci52aXNpYmxlID8gYWN0aW9uSWNvbnMudmlzaWJsZSA6IGFjdGlvbkljb25zLmhpZGRlbn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvTWFwQ29udHJvbFRvb2xiYXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPE1hcENvbnRyb2xCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTWVudVBhbmVsKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYWN0aXZlPXtpc0FjdGl2ZX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbWFwLWNvbnRyb2wtYnV0dG9uJywgJ21hcC1kcmF3Jywge2lzQWN0aXZlfSl9XG4gICAgICAgICAgICBkYXRhLXRpcFxuICAgICAgICAgICAgZGF0YS1mb3I9XCJtYXAtZHJhd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFjdGlvbkljb25zLnBvbHlnb24gaGVpZ2h0PVwiMjJweFwiIC8+XG4gICAgICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJtYXAtZHJhd1wiIG1lc3NhZ2U9XCJ0b29sdGlwLkRyYXdPbk1hcFwiIC8+XG4gICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIE1hcERyYXdQYW5lbC5kaXNwbGF5TmFtZSA9ICdNYXBEcmF3UGFuZWwnO1xuICByZXR1cm4gTWFwRHJhd1BhbmVsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBEcmF3UGFuZWxGYWN0b3J5O1xuIl19