kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
152 lines (149 loc) • 26.7 kB
JavaScript
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _reactJsonPretty = _interopRequireDefault(require("react-json-pretty"));
var _reactVirtualized = require("react-virtualized");
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _layers = require("@kepler.gl/layers");
var _utils = require("@kepler.gl/utils");
var _loadDataFooter = _interopRequireDefault(require("./load-data-footer"));
var _tilesetIcon = _interopRequireDefault(require("./tileset-icon"));
var _tilesetVectorForm = _interopRequireDefault(require("./tileset-vector-form"));
var _tilesetRasterForm = _interopRequireDefault(require("./tileset-raster-form"));
var _tilesetWmsForm = _interopRequireDefault(require("./tileset-wms-form"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6; // 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 WIDTH_ICON = '70px';
var LoadTilesetTabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n"])), function (props) {
return props.theme.AZURE;
});
var Container = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n grid-gap: 20px;\n background-color: ", ";\n"])), function (props) {
return props.theme.WHITE;
});
var TilesetTypeContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n grid-template-columns: repeat(4, ", ");\n column-gap: 10px;\n margin-bottom: 20px;\n"])), WIDTH_ICON);
var MetaContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n max-height: 400px;\n background-color: ", ";\n"])), function (_ref) {
var theme = _ref.theme;
return theme.editorBackground;
});
var MetaInnerContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n border: 1px solid ", ";\n background-color: white;\n border-radius: 2px;\n display: inline-block;\n font: inherit;\n line-height: 1.5em;\n padding: 0.5em 3.5em 0.5em 1em;\n box-sizing: border-box;\n overflow-y: scroll;\n overflow-x: auto;\n white-space: pre-wrap;\n word-wrap: break-word;\n height: ", "px;\n width: ", "px;\n color: ", ";\n font-size: 11px;\n font-family: ", ";\n max-width: 600px;\n"])), function (props) {
return props.theme.selectBorderColorLT;
}, function (props) {
return props.height;
}, function (props) {
return props.width;
}, function (props) {
return props.theme.textColorLT;
}, function (props) {
return props.theme.fontFamily;
});
var StyledHeaderMessage = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n"])), function (props) {
return props.theme.textColorLT;
});
var TILE_TYPES = [{
id: 'vectorTile',
label: 'Vector Tile',
Icon: _layers.VectorTileIcon,
Component: _tilesetVectorForm["default"]
}, {
id: 'rasterTile',
label: 'Raster Tile',
Icon: _layers.RasterTileIcon,
Component: _tilesetRasterForm["default"]
}, {
id: 'wms',
label: 'WMS',
Icon: _layers.WMSLayerIcon,
Component: _tilesetWmsForm["default"]
}];
function isReady(response) {
return response.dataset && !response.loading && !response.error;
}
function LoadTilesetTabFactory() {
var LoadTilesetTab = function LoadTilesetTab(_ref2) {
var onTilesetAdded = _ref2.onTilesetAdded,
isAddingDatasets = _ref2.isAddingDatasets;
var _useState = (0, _react.useState)(0),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
typeIndex = _useState2[0],
setTypeIndex = _useState2[1];
var _useState3 = (0, _react.useState)({}),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
response = _useState4[0],
setResponse = _useState4[1];
var error = response.error;
var loading = response.loading;
var data = response.metadata;
var jsonDataText = (0, _react.useMemo)(function () {
return JSON.stringify(data, null, 2);
}, [data]);
var createTileDataset = (0, _react.useCallback)(function () {
var dataset = response.dataset,
metadata = response.metadata;
if (dataset) {
onTilesetAdded(dataset, metadata);
}
}, [onTilesetAdded, response]);
// temp patch to hide raster tile layer while in development
var enableRasterTileLayer = (0, _utils.getApplicationConfig)().enableRasterTileLayer;
var enableWMSLayer = (0, _utils.getApplicationConfig)().enableWMSLayer;
// Filter tile types based on application config
var tileTypes = (0, _react.useMemo)(function () {
var types = TILE_TYPES.filter(function (tileType) {
if (tileType.id === 'rasterTile') {
return enableRasterTileLayer;
}
if (tileType.id === 'wms') {
return enableWMSLayer;
}
return true; // Include all other types by default
});
return types;
}, [enableRasterTileLayer, enableWMSLayer]);
var CurrentForm = tileTypes[typeIndex].Component;
return /*#__PURE__*/_react["default"].createElement(LoadTilesetTabContainer, null, /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(StyledHeaderMessage, null, "Tileset Type"), /*#__PURE__*/_react["default"].createElement(TilesetTypeContainer, {
className: "tileset-type"
}, tileTypes.map(function (tileType, index) {
return /*#__PURE__*/_react["default"].createElement(_tilesetIcon["default"], {
key: tileType.label,
name: tileType.label,
Icon: /*#__PURE__*/_react["default"].createElement(tileType.Icon, {
height: WIDTH_ICON
}),
onClick: function onClick() {
return setTypeIndex(index);
},
selected: typeIndex === index
});
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(CurrentForm, {
setResponse: setResponse
}))), /*#__PURE__*/_react["default"].createElement(MetaContainer, null, data && /*#__PURE__*/_react["default"].createElement(_reactVirtualized.AutoSizer, null, function (_ref3) {
var height = _ref3.height,
width = _ref3.width;
return /*#__PURE__*/_react["default"].createElement(MetaInnerContainer, {
height: height,
width: width
}, /*#__PURE__*/_react["default"].createElement(_reactJsonPretty["default"], {
id: "json-pretty",
json: jsonDataText
}));
}))), /*#__PURE__*/_react["default"].createElement(_loadDataFooter["default"], {
disabled: Boolean(error) || !isReady(response),
isLoading: loading || isAddingDatasets,
onConfirm: createTileDataset,
confirmText: "tilesetSetup.addTilesetText",
errorText: error && (0, _utils.getError)(error)
}));
};
return LoadTilesetTab;
}
var _default = exports["default"] = LoadTilesetTabFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RKc29uUHJldHR5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFZpcnR1YWxpemVkIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfbGF5ZXJzIiwiX3V0aWxzIiwiX2xvYWREYXRhRm9vdGVyIiwiX3RpbGVzZXRJY29uIiwiX3RpbGVzZXRWZWN0b3JGb3JtIiwiX3RpbGVzZXRSYXN0ZXJGb3JtIiwiX3RpbGVzZXRXbXNGb3JtIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJXSURUSF9JQ09OIiwiTG9hZFRpbGVzZXRUYWJDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJBWlVSRSIsIkNvbnRhaW5lciIsIldISVRFIiwiVGlsZXNldFR5cGVDb250YWluZXIiLCJNZXRhQ29udGFpbmVyIiwiX3JlZiIsImVkaXRvckJhY2tncm91bmQiLCJNZXRhSW5uZXJDb250YWluZXIiLCJzZWxlY3RCb3JkZXJDb2xvckxUIiwiaGVpZ2h0Iiwid2lkdGgiLCJ0ZXh0Q29sb3JMVCIsImZvbnRGYW1pbHkiLCJTdHlsZWRIZWFkZXJNZXNzYWdlIiwiVElMRV9UWVBFUyIsImlkIiwibGFiZWwiLCJJY29uIiwiVmVjdG9yVGlsZUljb24iLCJDb21wb25lbnQiLCJUaWxlc2V0VmVjdG9yRm9ybSIsIlJhc3RlclRpbGVJY29uIiwiVGlsZXNldFJhc3RlckZvcm0iLCJXTVNMYXllckljb24iLCJUaWxlc2V0V01TRm9ybSIsImlzUmVhZHkiLCJyZXNwb25zZSIsImRhdGFzZXQiLCJsb2FkaW5nIiwiZXJyb3IiLCJMb2FkVGlsZXNldFRhYkZhY3RvcnkiLCJMb2FkVGlsZXNldFRhYiIsIl9yZWYyIiwib25UaWxlc2V0QWRkZWQiLCJpc0FkZGluZ0RhdGFzZXRzIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwidHlwZUluZGV4Iiwic2V0VHlwZUluZGV4IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzZXRSZXNwb25zZSIsImRhdGEiLCJtZXRhZGF0YSIsImpzb25EYXRhVGV4dCIsInVzZU1lbW8iLCJKU09OIiwic3RyaW5naWZ5IiwiY3JlYXRlVGlsZURhdGFzZXQiLCJ1c2VDYWxsYmFjayIsImVuYWJsZVJhc3RlclRpbGVMYXllciIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZW5hYmxlV01TTGF5ZXIiLCJ0aWxlVHlwZXMiLCJ0eXBlcyIsImZpbHRlciIsInRpbGVUeXBlIiwiQ3VycmVudEZvcm0iLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJuYW1lIiwib25DbGljayIsInNlbGVjdGVkIiwiQXV0b1NpemVyIiwiX3JlZjMiLCJqc29uIiwiZGlzYWJsZWQiLCJCb29sZWFuIiwiaXNMb2FkaW5nIiwib25Db25maXJtIiwiY29uZmlybVRleHQiLCJlcnJvclRleHQiLCJnZXRFcnJvciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvdGlsZXNldHMtbW9kYWxzL2xvYWQtdGlsZXNldC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgSlNPTlByZXR0eSBmcm9tICdyZWFjdC1qc29uLXByZXR0eSc7XG5pbXBvcnQge0F1dG9TaXplcn0gZnJvbSAncmVhY3QtdmlydHVhbGl6ZWQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7VmVjdG9yVGlsZUljb24sIFJhc3RlclRpbGVJY29uLCBXTVNMYXllckljb259IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Z2V0RXJyb3IsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtNZXRhUmVzcG9uc2V9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCBMb2FkRGF0YUZvb3RlciBmcm9tICcuL2xvYWQtZGF0YS1mb290ZXInO1xuaW1wb3J0IFRpbGVzZXRJY29uIGZyb20gJy4vdGlsZXNldC1pY29uJztcbmltcG9ydCBUaWxlc2V0VmVjdG9yRm9ybSBmcm9tICcuL3RpbGVzZXQtdmVjdG9yLWZvcm0nO1xuaW1wb3J0IFRpbGVzZXRSYXN0ZXJGb3JtIGZyb20gJy4vdGlsZXNldC1yYXN0ZXItZm9ybSc7XG5cbmltcG9ydCBUaWxlc2V0V01TRm9ybSBmcm9tICcuL3RpbGVzZXQtd21zLWZvcm0nO1xuXG5jb25zdCBXSURUSF9JQ09OID0gJzcwcHgnO1xuXG5jb25zdCBMb2FkVGlsZXNldFRhYkNvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLkFaVVJFfTtcbmA7XG5cbmNvbnN0IENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTtcbiAgZ3JpZC1nYXA6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuV0hJVEV9O1xuYDtcblxuY29uc3QgVGlsZXNldFR5cGVDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAke1dJRFRIX0lDT059KTtcbiAgY29sdW1uLWdhcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbmA7XG5cbmNvbnN0IE1ldGFDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lfSkgPT4gdGhlbWUuZWRpdG9yQmFja2dyb3VuZH07XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFJbm5lckNvbnRhaW5lclByb3BzIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmNvbnN0IE1ldGFJbm5lckNvbnRhaW5lciA9IHN0eWxlZC5kaXY8TWV0YUlubmVyQ29udGFpbmVyUHJvcHM+YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2VsZWN0Qm9yZGVyQ29sb3JMVH07XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICBwYWRkaW5nOiAwLjVlbSAzLjVlbSAwLjVlbSAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy5oZWlnaHR9cHg7XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVH07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIG1heC13aWR0aDogNjAwcHg7XG5gO1xuXG5jb25zdCBTdHlsZWRIZWFkZXJNZXNzYWdlID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBmb250LXNpemU6IDE0cHg7XG5gO1xuXG50eXBlIExvYWRUaWxlc2V0VGFiUHJvcHMgPSB7XG4gIG1ldGE6IHtba2V5OiBzdHJpbmddOiBhbnl9O1xuICBpc0FkZGluZ0RhdGFzZXRzOiBib29sZWFuO1xuICBvblRpbGVzZXRBZGRlZDogKHRpbGVzZXRJbmZvOiBhbnksIG1ldGFkYXRhPzogYW55KSA9PiB2b2lkO1xuICBpbnRsOiBJbnRsU2hhcGU7XG59O1xuXG5jb25zdCBUSUxFX1RZUEVTID0gW1xuICB7XG4gICAgaWQ6ICd2ZWN0b3JUaWxlJyxcbiAgICBsYWJlbDogJ1ZlY3RvciBUaWxlJyxcbiAgICBJY29uOiBWZWN0b3JUaWxlSWNvbixcbiAgICBDb21wb25lbnQ6IFRpbGVzZXRWZWN0b3JGb3JtXG4gIH0sXG4gIHtcbiAgICBpZDogJ3Jhc3RlclRpbGUnLFxuICAgIGxhYmVsOiAnUmFzdGVyIFRpbGUnLFxuICAgIEljb246IFJhc3RlclRpbGVJY29uLFxuICAgIENvbXBvbmVudDogVGlsZXNldFJhc3RlckZvcm1cbiAgfSxcbiAge1xuICAgIGlkOiAnd21zJyxcbiAgICBsYWJlbDogJ1dNUycsXG4gICAgSWNvbjogV01TTGF5ZXJJY29uLFxuICAgIENvbXBvbmVudDogVGlsZXNldFdNU0Zvcm1cbiAgfVxuXTtcblxuZnVuY3Rpb24gaXNSZWFkeShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YXNldCAmJiAhcmVzcG9uc2UubG9hZGluZyAmJiAhcmVzcG9uc2UuZXJyb3I7XG59XG5cbmZ1bmN0aW9uIExvYWRUaWxlc2V0VGFiRmFjdG9yeSgpIHtcbiAgY29uc3QgTG9hZFRpbGVzZXRUYWI6IFJlYWN0LkZDPExvYWRUaWxlc2V0VGFiUHJvcHM+ID0gKHtvblRpbGVzZXRBZGRlZCwgaXNBZGRpbmdEYXRhc2V0c30pID0+IHtcbiAgICBjb25zdCBbdHlwZUluZGV4LCBzZXRUeXBlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgICBjb25zdCBbcmVzcG9uc2UsIHNldFJlc3BvbnNlXSA9IHVzZVN0YXRlPE1ldGFSZXNwb25zZT4oe30pO1xuXG4gICAgY29uc3QgZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcbiAgICBjb25zdCBsb2FkaW5nID0gcmVzcG9uc2UubG9hZGluZztcbiAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UubWV0YWRhdGE7XG4gICAgY29uc3QganNvbkRhdGFUZXh0ID0gdXNlTWVtbygoKSA9PiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSwgW2RhdGFdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVRpbGVEYXRhc2V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgY29uc3Qge2RhdGFzZXQsIG1ldGFkYXRhfSA9IHJlc3BvbnNlO1xuICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgb25UaWxlc2V0QWRkZWQoZGF0YXNldCwgbWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH0sIFtvblRpbGVzZXRBZGRlZCwgcmVzcG9uc2VdKTtcblxuICAgIC8vIHRlbXAgcGF0Y2ggdG8gaGlkZSByYXN0ZXIgdGlsZSBsYXllciB3aGlsZSBpbiBkZXZlbG9wbWVudFxuICAgIGNvbnN0IGVuYWJsZVJhc3RlclRpbGVMYXllciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmFzdGVyVGlsZUxheWVyO1xuICAgIGNvbnN0IGVuYWJsZVdNU0xheWVyID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVXTVNMYXllcjtcblxuICAgIC8vIEZpbHRlciB0aWxlIHR5cGVzIGJhc2VkIG9uIGFwcGxpY2F0aW9uIGNvbmZpZ1xuICAgIGNvbnN0IHRpbGVUeXBlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgdHlwZXMgPSBUSUxFX1RZUEVTLmZpbHRlcih0aWxlVHlwZSA9PiB7XG4gICAgICAgIGlmICh0aWxlVHlwZS5pZCA9PT0gJ3Jhc3RlclRpbGUnKSB7XG4gICAgICAgICAgcmV0dXJuIGVuYWJsZVJhc3RlclRpbGVMYXllcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGlsZVR5cGUuaWQgPT09ICd3bXMnKSB7XG4gICAgICAgICAgcmV0dXJuIGVuYWJsZVdNU0xheWVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBJbmNsdWRlIGFsbCBvdGhlciB0eXBlcyBieSBkZWZhdWx0XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9LCBbZW5hYmxlUmFzdGVyVGlsZUxheWVyLCBlbmFibGVXTVNMYXllcl0pO1xuXG4gICAgY29uc3QgQ3VycmVudEZvcm0gPSB0aWxlVHlwZXNbdHlwZUluZGV4XS5Db21wb25lbnQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPExvYWRUaWxlc2V0VGFiQ29udGFpbmVyPlxuICAgICAgICA8Q29udGFpbmVyPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8U3R5bGVkSGVhZGVyTWVzc2FnZT5UaWxlc2V0IFR5cGU8L1N0eWxlZEhlYWRlck1lc3NhZ2U+XG5cbiAgICAgICAgICAgIDxUaWxlc2V0VHlwZUNvbnRhaW5lciBjbGFzc05hbWU9XCJ0aWxlc2V0LXR5cGVcIj5cbiAgICAgICAgICAgICAge3RpbGVUeXBlcy5tYXAoKHRpbGVUeXBlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxUaWxlc2V0SWNvblxuICAgICAgICAgICAgICAgICAga2V5PXt0aWxlVHlwZS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgIG5hbWU9e3RpbGVUeXBlLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgSWNvbj17PHRpbGVUeXBlLkljb24gaGVpZ2h0PXtXSURUSF9JQ09OfSAvPn1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFR5cGVJbmRleChpbmRleCl9XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17dHlwZUluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvVGlsZXNldFR5cGVDb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8Q3VycmVudEZvcm0gc2V0UmVzcG9uc2U9e3NldFJlc3BvbnNlfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPE1ldGFDb250YWluZXI+XG4gICAgICAgICAgICB7ZGF0YSAmJiAoXG4gICAgICAgICAgICAgIDxBdXRvU2l6ZXI+XG4gICAgICAgICAgICAgICAgeyh7aGVpZ2h0LCB3aWR0aH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxNZXRhSW5uZXJDb250YWluZXIgaGVpZ2h0PXtoZWlnaHR9IHdpZHRoPXt3aWR0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxKU09OUHJldHR5IGlkPVwianNvbi1wcmV0dHlcIiBqc29uPXtqc29uRGF0YVRleHR9IC8+XG4gICAgICAgICAgICAgICAgICA8L01ldGFJbm5lckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0F1dG9TaXplcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9NZXRhQ29udGFpbmVyPlxuICAgICAgICA8L0NvbnRhaW5lcj5cbiAgICAgICAgPExvYWREYXRhRm9vdGVyXG4gICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4oZXJyb3IpIHx8ICFpc1JlYWR5KHJlc3BvbnNlKX1cbiAgICAgICAgICBpc0xvYWRpbmc9e2xvYWRpbmcgfHwgaXNBZGRpbmdEYXRhc2V0c31cbiAgICAgICAgICBvbkNvbmZpcm09e2NyZWF0ZVRpbGVEYXRhc2V0fVxuICAgICAgICAgIGNvbmZpcm1UZXh0PVwidGlsZXNldFNldHVwLmFkZFRpbGVzZXRUZXh0XCJcbiAgICAgICAgICBlcnJvclRleHQ9e2Vycm9yICYmIGdldEVycm9yKGVycm9yKX1cbiAgICAgICAgLz5cbiAgICAgIDwvTG9hZFRpbGVzZXRUYWJDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gTG9hZFRpbGVzZXRUYWI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvYWRUaWxlc2V0VGFiRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUdBLElBQUFPLGVBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLGtCQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxrQkFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQVcsZUFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQWdELElBQUFZLGVBQUEsRUFBQUMsZ0JBQUEs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
;