kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
180 lines (179 loc) • 33.9 kB
JavaScript
"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.MapInfoPanel = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
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 _imageModalContainer = _interopRequireDefault(require("./image-modal-container"));
var _flexContainer = require("../common/flex-container");
var _statusPanel = _interopRequireWildcard(require("./status-panel"));
var _providerSelect = require("./cloud-components/provider-select");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _styledComponents2 = require("../common/styled-components");
var _imagePreview = _interopRequireDefault(require("../common/image-preview"));
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/localization/src");
var _modal = require("../common/modal");
var _useCloudListProvider2 = require("../hooks/use-cloud-list-provider");
var _templateObject, _templateObject2; // 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 StyledSaveMapModal = _styledComponents["default"].div.attrs({
className: 'save-map-modal'
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .save-map-modal-content {\n min-height: 400px;\n flex-direction: column;\n }\n\n .description {\n width: 300px;\n }\n\n .image-preview-panel {\n width: 300px;\n\n .image-preview {\n padding: 0;\n }\n }\n\n .map-info-panel {\n flex-direction: column;\n }\n\n .save-map-modal-description {\n .modal-section-subtitle {\n margin-left: 6px;\n }\n }\n"])));
var StyledCompactExportSection = (0, _styledComponents["default"])(_styledComponents2.StyledExportSection)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 5px 0;\n"])));
var nop = function nop() {
return;
};
var TEXT_AREA_LIGHT_STYLE = {
resize: 'none'
};
var MapInfoPanel = exports.MapInfoPanel = function MapInfoPanel(_ref) {
var mapInfo = _ref.mapInfo,
characterLimits = _ref.characterLimits,
onChangeInput = _ref.onChangeInput;
var _mapInfo$description = mapInfo.description,
description = _mapInfo$description === void 0 ? '' : _mapInfo$description,
_mapInfo$title = mapInfo.title,
title = _mapInfo$title === void 0 ? '' : _mapInfo$title;
return /*#__PURE__*/_react["default"].createElement("div", {
className: "selection map-info-panel",
"data-testid": _src.dataTestIds.providerMapInfoPanel
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledModalSection, {
className: "save-map-modal-name"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "modal-section-title"
}, "Name*"), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.InputLight, {
id: "map-title",
type: "text",
value: title,
onChange: function onChange(e) {
return onChangeInput('title', e);
},
placeholder: "Type map title"
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledModalSection, null, /*#__PURE__*/_react["default"].createElement(_flexContainer.FlexContainer, {
className: "save-map-modal-description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "modal-section-title"
}, "Description"), /*#__PURE__*/_react["default"].createElement("div", {
className: "modal-section-subtitle"
}, "(optional)")), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.TextAreaLight, {
rows: 3,
id: "map-description",
style: TEXT_AREA_LIGHT_STYLE,
value: description,
onChange: function onChange(e) {
return onChangeInput('description', e);
},
placeholder: "Type map description"
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledModalInputFootnote, {
error: Boolean(characterLimits === null || characterLimits === void 0 ? void 0 : characterLimits.description) && description.length > Number(characterLimits === null || characterLimits === void 0 ? void 0 : characterLimits.description)
}, description.length, "/", (characterLimits === null || characterLimits === void 0 ? void 0 : characterLimits.description) || _src.MAP_INFO_CHARACTER.description, ' ', "characters")));
};
var SaveMapHeader = function SaveMapHeader(_ref2) {
var cloudProviders = _ref2.cloudProviders;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.saveMap.title'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_src2.FormattedMessage, {
id: 'modal.saveMap.subtitle'
}))), /*#__PURE__*/_react["default"].createElement(_providerSelect.ProviderSelect, {
cloudProviders: cloudProviders
}));
};
var STYLED_EXPORT_SECTION_STYLE = {
margin: '2px 0'
};
var PROVIDER_MANAGER_URL_STYLE = {
textDecoration: 'underline'
};
function SaveMapModalFactory() {
var SaveMapModal = function SaveMapModal(_ref3) {
var mapInfo = _ref3.mapInfo,
exportImage = _ref3.exportImage,
_ref3$characterLimits = _ref3.characterLimits,
characterLimits = _ref3$characterLimits === void 0 ? _src.MAP_INFO_CHARACTER : _ref3$characterLimits,
isProviderLoading = _ref3.isProviderLoading,
providerError = _ref3.providerError,
_ref3$onUpdateImageSe = _ref3.onUpdateImageSetting,
onUpdateImageSetting = _ref3$onUpdateImageSe === void 0 ? nop : _ref3$onUpdateImageSe,
cleanupExportImage = _ref3.cleanupExportImage,
onSetMapInfo = _ref3.onSetMapInfo,
onCancel = _ref3.onCancel,
onConfirm = _ref3.onConfirm;
var _useCloudListProvider = (0, _useCloudListProvider2.useCloudListProvider)(),
provider = _useCloudListProvider.provider,
cloudProviders = _useCloudListProvider.cloudProviders;
var onChangeInput = function onChangeInput(key, _ref4) {
var value = _ref4.target.value;
onSetMapInfo((0, _defineProperty2["default"])({}, key, value));
};
var confirmButton = (0, _react.useMemo)(function () {
return {
large: true,
disabled: Boolean(!(provider && mapInfo.title)),
children: 'modal.button.save'
};
}, [provider, mapInfo]);
var confirm = (0, _react.useCallback)(function () {
if (provider) {
onConfirm(provider);
}
}, [onConfirm, provider]);
return /*#__PURE__*/_react["default"].createElement(_imageModalContainer["default"], {
provider: provider,
onUpdateImageSetting: onUpdateImageSetting,
cleanupExportImage: cleanupExportImage
}, /*#__PURE__*/_react["default"].createElement(StyledSaveMapModal, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledModalContent, {
className: "save-map-modal-content"
}, /*#__PURE__*/_react["default"].createElement(SaveMapHeader, {
cloudProviders: cloudProviders
}), provider && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, provider.getManagementUrl ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, {
style: STYLED_EXPORT_SECTION_STYLE
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement("a", {
key: 1,
href: provider.getManagementUrl(),
target: "_blank",
rel: "noopener noreferrer",
style: PROVIDER_MANAGER_URL_STYLE
}, "Go to your Kepler.gl ", provider.displayName, " page"))) : null, /*#__PURE__*/_react["default"].createElement(StyledCompactExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description image-preview-panel"
}, /*#__PURE__*/_react["default"].createElement(_imagePreview["default"], {
exportImage: exportImage,
width: _src.MAP_THUMBNAIL_DIMENSION.width,
showDimension: false
})), isProviderLoading ? /*#__PURE__*/_react["default"].createElement("div", {
"data-testid": _src.dataTestIds.providerLoading,
className: "selection map-saving-animation"
}, /*#__PURE__*/_react["default"].createElement(_statusPanel.UploadAnimation, {
icon: provider && provider.icon
})) : /*#__PURE__*/_react["default"].createElement(MapInfoPanel, {
mapInfo: mapInfo,
characterLimits: characterLimits,
onChangeInput: onChangeInput
}))), providerError ? /*#__PURE__*/_react["default"].createElement(_statusPanel["default"], {
isLoading: false,
error: providerError.message,
providerIcon: provider && provider.icon
}) : null)), /*#__PURE__*/_react["default"].createElement(_modal.ModalFooter, {
cancel: onCancel,
confirm: confirm,
confirmButton: confirmButton
}));
};
return SaveMapModal;
}
var _default = exports["default"] = SaveMapModalFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaW1hZ2VNb2RhbENvbnRhaW5lciIsIl9mbGV4Q29udGFpbmVyIiwiX3N0YXR1c1BhbmVsIiwiX3Byb3ZpZGVyU2VsZWN0IiwiX3NyYyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pbWFnZVByZXZpZXciLCJfc3JjMiIsIl9tb2RhbCIsIl91c2VDbG91ZExpc3RQcm92aWRlcjIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkU2F2ZU1hcE1vZGFsIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlN0eWxlZENvbXBhY3RFeHBvcnRTZWN0aW9uIiwiU3R5bGVkRXhwb3J0U2VjdGlvbiIsIm5vcCIsIlRFWFRfQVJFQV9MSUdIVF9TVFlMRSIsInJlc2l6ZSIsIk1hcEluZm9QYW5lbCIsImV4cG9ydHMiLCJfcmVmIiwibWFwSW5mbyIsImNoYXJhY3RlckxpbWl0cyIsIm9uQ2hhbmdlSW5wdXQiLCJfbWFwSW5mbyRkZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiX21hcEluZm8kdGl0bGUiLCJ0aXRsZSIsImNyZWF0ZUVsZW1lbnQiLCJkYXRhVGVzdElkcyIsInByb3ZpZGVyTWFwSW5mb1BhbmVsIiwiU3R5bGVkTW9kYWxTZWN0aW9uIiwiSW5wdXRMaWdodCIsImlkIiwidHlwZSIsInZhbHVlIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsIkZsZXhDb250YWluZXIiLCJUZXh0QXJlYUxpZ2h0Iiwicm93cyIsInN0eWxlIiwiU3R5bGVkTW9kYWxJbnB1dEZvb3Rub3RlIiwiZXJyb3IiLCJCb29sZWFuIiwibGVuZ3RoIiwiTnVtYmVyIiwiTUFQX0lORk9fQ0hBUkFDVEVSIiwiU2F2ZU1hcEhlYWRlciIsIl9yZWYyIiwiY2xvdWRQcm92aWRlcnMiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiUHJvdmlkZXJTZWxlY3QiLCJTVFlMRURfRVhQT1JUX1NFQ1RJT05fU1RZTEUiLCJtYXJnaW4iLCJQUk9WSURFUl9NQU5BR0VSX1VSTF9TVFlMRSIsInRleHREZWNvcmF0aW9uIiwiU2F2ZU1hcE1vZGFsRmFjdG9yeSIsIlNhdmVNYXBNb2RhbCIsIl9yZWYzIiwiZXhwb3J0SW1hZ2UiLCJfcmVmMyRjaGFyYWN0ZXJMaW1pdHMiLCJpc1Byb3ZpZGVyTG9hZGluZyIsInByb3ZpZGVyRXJyb3IiLCJfcmVmMyRvblVwZGF0ZUltYWdlU2UiLCJvblVwZGF0ZUltYWdlU2V0dGluZyIsImNsZWFudXBFeHBvcnRJbWFnZSIsIm9uU2V0TWFwSW5mbyIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwiX3VzZUNsb3VkTGlzdFByb3ZpZGVyIiwidXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJwcm92aWRlciIsImtleSIsIl9yZWY0IiwidGFyZ2V0IiwiX2RlZmluZVByb3BlcnR5MiIsImNvbmZpcm1CdXR0b24iLCJ1c2VNZW1vIiwibGFyZ2UiLCJkaXNhYmxlZCIsImNoaWxkcmVuIiwiY29uZmlybSIsInVzZUNhbGxiYWNrIiwiU3R5bGVkTW9kYWxDb250ZW50IiwiRnJhZ21lbnQiLCJnZXRNYW5hZ2VtZW50VXJsIiwiaHJlZiIsInJlbCIsImRpc3BsYXlOYW1lIiwid2lkdGgiLCJNQVBfVEhVTUJOQUlMX0RJTUVOU0lPTiIsInNob3dEaW1lbnNpb24iLCJwcm92aWRlckxvYWRpbmciLCJVcGxvYWRBbmltYXRpb24iLCJpY29uIiwiaXNMb2FkaW5nIiwibWVzc2FnZSIsInByb3ZpZGVySWNvbiIsIk1vZGFsRm9vdGVyIiwiY2FuY2VsIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvbW9kYWxzL3NhdmUtbWFwLW1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSW1hZ2VNb2RhbENvbnRhaW5lciwge0ltYWdlTW9kYWxDb250YWluZXJQcm9wc30gZnJvbSAnLi9pbWFnZS1tb2RhbC1jb250YWluZXInO1xuaW1wb3J0IHtGbGV4Q29udGFpbmVyfSBmcm9tICcuLi9jb21tb24vZmxleC1jb250YWluZXInO1xuaW1wb3J0IFN0YXR1c1BhbmVsLCB7VXBsb2FkQW5pbWF0aW9ufSBmcm9tICcuL3N0YXR1cy1wYW5lbCc7XG5pbXBvcnQge1Byb3ZpZGVyU2VsZWN0fSBmcm9tICcuL2Nsb3VkLWNvbXBvbmVudHMvcHJvdmlkZXItc2VsZWN0JztcbmltcG9ydCB7TUFQX1RIVU1CTkFJTF9ESU1FTlNJT04sIE1BUF9JTkZPX0NIQVJBQ1RFUiwgZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBJbnB1dExpZ2h0LFxuICBUZXh0QXJlYUxpZ2h0LFxuICBTdHlsZWRFeHBvcnRTZWN0aW9uLFxuICBTdHlsZWRNb2RhbFNlY3Rpb24sXG4gIFN0eWxlZE1vZGFsSW5wdXRGb290bm90ZVxufSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEltYWdlUHJldmlldyBmcm9tICcuLi9jb21tb24vaW1hZ2UtcHJldmlldyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7TWFwSW5mbywgRXhwb3J0SW1hZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuaW1wb3J0IHtzZXRNYXBJbmZvLCBjbGVhbnVwRXhwb3J0SW1hZ2UgYXMgY2xlYW51cEV4cG9ydEltYWdlQWN0aW9ufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtNb2RhbEZvb3Rlcn0gZnJvbSAnLi4vY29tbW9uL21vZGFsJztcbmltcG9ydCB7dXNlQ2xvdWRMaXN0UHJvdmlkZXJ9IGZyb20gJy4uL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcblxuY29uc3QgU3R5bGVkU2F2ZU1hcE1vZGFsID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NhdmUtbWFwLW1vZGFsJ1xufSlgXG4gIC5zYXZlLW1hcC1tb2RhbC1jb250ZW50IHtcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG5cbiAgLmRlc2NyaXB0aW9uIHtcbiAgICB3aWR0aDogMzAwcHg7XG4gIH1cblxuICAuaW1hZ2UtcHJldmlldy1wYW5lbCB7XG4gICAgd2lkdGg6IDMwMHB4O1xuXG4gICAgLmltYWdlLXByZXZpZXcge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gIH1cblxuICAubWFwLWluZm8tcGFuZWwge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cblxuICAuc2F2ZS1tYXAtbW9kYWwtZGVzY3JpcHRpb24ge1xuICAgIC5tb2RhbC1zZWN0aW9uLXN1YnRpdGxlIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRDb21wYWN0RXhwb3J0U2VjdGlvbiA9IHN0eWxlZChTdHlsZWRFeHBvcnRTZWN0aW9uKWBcbiAgbWFyZ2luOiA1cHggMDtcbmA7XG5cbmNvbnN0IG5vcCA9ICgpID0+IHtcbiAgcmV0dXJuO1xufTtcbmNvbnN0IFRFWFRfQVJFQV9MSUdIVF9TVFlMRSA9IHtyZXNpemU6ICdub25lJ307XG5cbnR5cGUgQ2hhcmFjdGVyTGltaXRzID0ge1xuICB0aXRsZT86IG51bWJlcjtcbiAgZGVzY3JpcHRpb24/OiBudW1iZXI7XG59O1xuXG50eXBlIFNhdmVNYXBNb2RhbFByb3BzID0ge1xuICBtYXBJbmZvOiBNYXBJbmZvO1xuICBleHBvcnRJbWFnZTogRXhwb3J0SW1hZ2U7XG4gIGlzUHJvdmlkZXJMb2FkaW5nOiBib29sZWFuO1xuICBwcm92aWRlckVycm9yPzogRXJyb3I7XG4gIGNoYXJhY3RlckxpbWl0cz86IENoYXJhY3RlckxpbWl0cztcblxuICAvLyBjYWxsYmFja3NcbiAgb25VcGRhdGVJbWFnZVNldHRpbmc6IEltYWdlTW9kYWxDb250YWluZXJQcm9wc1snb25VcGRhdGVJbWFnZVNldHRpbmcnXTtcbiAgY2xlYW51cEV4cG9ydEltYWdlOiB0eXBlb2YgY2xlYW51cEV4cG9ydEltYWdlQWN0aW9uO1xuICBvblNldE1hcEluZm86IHR5cGVvZiBzZXRNYXBJbmZvO1xuICBvbkNvbmZpcm06IChwcm92aWRlcjogUHJvdmlkZXIpID0+IHZvaWQ7XG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBNYXBJbmZvUGFuZWxQcm9wcyA9IFBpY2s8U2F2ZU1hcE1vZGFsUHJvcHMsICdtYXBJbmZvJyB8ICdjaGFyYWN0ZXJMaW1pdHMnPiAmIHtcbiAgb25DaGFuZ2VJbnB1dDogKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+XG4gICkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBNYXBJbmZvUGFuZWw6IFJlYWN0LkZDPE1hcEluZm9QYW5lbFByb3BzPiA9ICh7XG4gIG1hcEluZm8sXG4gIGNoYXJhY3RlckxpbWl0cyxcbiAgb25DaGFuZ2VJbnB1dFxufSkgPT4ge1xuICBjb25zdCB7ZGVzY3JpcHRpb24gPSAnJywgdGl0bGUgPSAnJ30gPSBtYXBJbmZvO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uIG1hcC1pbmZvLXBhbmVsXCIgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWRzLnByb3ZpZGVyTWFwSW5mb1BhbmVsfT5cbiAgICAgIDxTdHlsZWRNb2RhbFNlY3Rpb24gY2xhc3NOYW1lPVwic2F2ZS1tYXAtbW9kYWwtbmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLXNlY3Rpb24tdGl0bGVcIj5OYW1lKjwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxJbnB1dExpZ2h0XG4gICAgICAgICAgICBpZD1cIm1hcC10aXRsZVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZT17dGl0bGV9XG4gICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBvbkNoYW5nZUlucHV0KCd0aXRsZScsIGUpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIG1hcCB0aXRsZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1N0eWxlZE1vZGFsU2VjdGlvbj5cbiAgICAgIDxTdHlsZWRNb2RhbFNlY3Rpb24+XG4gICAgICAgIDxGbGV4Q29udGFpbmVyIGNsYXNzTmFtZT1cInNhdmUtbWFwLW1vZGFsLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1zZWN0aW9uLXRpdGxlXCI+RGVzY3JpcHRpb248L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLXNlY3Rpb24tc3VidGl0bGVcIj4ob3B0aW9uYWwpPC9kaXY+XG4gICAgICAgIDwvRmxleENvbnRhaW5lcj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8VGV4dEFyZWFMaWdodFxuICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgIGlkPVwibWFwLWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIHN0eWxlPXtURVhUX0FSRUFfTElHSFRfU1RZTEUgYXMgUmVhY3QuQ1NTUHJvcGVydGllc31cbiAgICAgICAgICAgIHZhbHVlPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uQ2hhbmdlSW5wdXQoJ2Rlc2NyaXB0aW9uJywgZSl9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgbWFwIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFN0eWxlZE1vZGFsSW5wdXRGb290bm90ZVxuICAgICAgICAgIGVycm9yPXtcbiAgICAgICAgICAgIEJvb2xlYW4oY2hhcmFjdGVyTGltaXRzPy5kZXNjcmlwdGlvbikgJiZcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmxlbmd0aCA+IE51bWJlcihjaGFyYWN0ZXJMaW1pdHM/LmRlc2NyaXB0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIHtkZXNjcmlwdGlvbi5sZW5ndGh9L3tjaGFyYWN0ZXJMaW1pdHM/LmRlc2NyaXB0aW9uIHx8IE1BUF9JTkZPX0NIQVJBQ1RFUi5kZXNjcmlwdGlvbn17JyAnfVxuICAgICAgICAgIGNoYXJhY3RlcnNcbiAgICAgICAgPC9TdHlsZWRNb2RhbElucHV0Rm9vdG5vdGU+XG4gICAgICA8L1N0eWxlZE1vZGFsU2VjdGlvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IFNhdmVNYXBIZWFkZXIgPSAoe2Nsb3VkUHJvdmlkZXJzfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zYXZlTWFwLnRpdGxlJ30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNhdmVNYXAuc3VidGl0bGUnfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFByb3ZpZGVyU2VsZWN0IGNsb3VkUHJvdmlkZXJzPXtjbG91ZFByb3ZpZGVyc30gLz5cbiAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICk7XG59O1xuXG5jb25zdCBTVFlMRURfRVhQT1JUX1NFQ1RJT05fU1RZTEUgPSB7bWFyZ2luOiAnMnB4IDAnfTtcbmNvbnN0IFBST1ZJREVSX01BTkFHRVJfVVJMX1NUWUxFID0ge3RleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ307XG5cbmZ1bmN0aW9uIFNhdmVNYXBNb2RhbEZhY3RvcnkoKSB7XG4gIGNvbnN0IFNhdmVNYXBNb2RhbDogUmVhY3QuRkM8U2F2ZU1hcE1vZGFsUHJvcHM+ID0gKHtcbiAgICBtYXBJbmZvLFxuICAgIGV4cG9ydEltYWdlLFxuICAgIGNoYXJhY3RlckxpbWl0cyA9IE1BUF9JTkZPX0NIQVJBQ1RFUixcbiAgICBpc1Byb3ZpZGVyTG9hZGluZyxcbiAgICBwcm92aWRlckVycm9yLFxuICAgIG9uVXBkYXRlSW1hZ2VTZXR0aW5nID0gbm9wLFxuICAgIGNsZWFudXBFeHBvcnRJbWFnZSxcbiAgICBvblNldE1hcEluZm8sXG4gICAgb25DYW5jZWwsXG4gICAgb25Db25maXJtXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cHJvdmlkZXIsIGNsb3VkUHJvdmlkZXJzfSA9IHVzZUNsb3VkTGlzdFByb3ZpZGVyKCk7XG5cbiAgICBjb25zdCBvbkNoYW5nZUlucHV0ID0gKFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICB7dGFyZ2V0OiB7dmFsdWV9fTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+XG4gICAgKSA9PiB7XG4gICAgICBvblNldE1hcEluZm8oe1trZXldOiB2YWx1ZX0pO1xuICAgIH07XG5cbiAgICBjb25zdCBjb25maXJtQnV0dG9uID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGxhcmdlOiB0cnVlLFxuICAgICAgICBkaXNhYmxlZDogQm9vbGVhbighKHByb3ZpZGVyICYmIG1hcEluZm8udGl0bGUpKSxcbiAgICAgICAgY2hpbGRyZW46ICdtb2RhbC5idXR0b24uc2F2ZSdcbiAgICAgIH0pLFxuICAgICAgW3Byb3ZpZGVyLCBtYXBJbmZvXVxuICAgICk7XG5cbiAgICBjb25zdCBjb25maXJtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIG9uQ29uZmlybShwcm92aWRlcik7XG4gICAgICB9XG4gICAgfSwgW29uQ29uZmlybSwgcHJvdmlkZXJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8SW1hZ2VNb2RhbENvbnRhaW5lclxuICAgICAgICBwcm92aWRlcj17cHJvdmlkZXJ9XG4gICAgICAgIG9uVXBkYXRlSW1hZ2VTZXR0aW5nPXtvblVwZGF0ZUltYWdlU2V0dGluZ31cbiAgICAgICAgY2xlYW51cEV4cG9ydEltYWdlPXtjbGVhbnVwRXhwb3J0SW1hZ2V9XG4gICAgICA+XG4gICAgICAgIDxTdHlsZWRTYXZlTWFwTW9kYWw+XG4gICAgICAgICAgPFN0eWxlZE1vZGFsQ29udGVudCBjbGFzc05hbWU9XCJzYXZlLW1hcC1tb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICA8U2F2ZU1hcEhlYWRlciBjbG91ZFByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9IC8+XG4gICAgICAgICAgICB7cHJvdmlkZXIgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtwcm92aWRlci5nZXRNYW5hZ2VtZW50VXJsID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24gc3R5bGU9e1NUWUxFRF9FWFBPUlRfU0VDVElPTl9TVFlMRX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e3Byb3ZpZGVyLmdldE1hbmFnZW1lbnRVcmwoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtQUk9WSURFUl9NQU5BR0VSX1VSTF9TVFlMRX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBHbyB0byB5b3VyIEtlcGxlci5nbCB7cHJvdmlkZXIuZGlzcGxheU5hbWV9IHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRDb21wYWN0RXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb24gaW1hZ2UtcHJldmlldy1wYW5lbFwiPlxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2VQcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgZXhwb3J0SW1hZ2U9e2V4cG9ydEltYWdlfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtNQVBfVEhVTUJOQUlMX0RJTUVOU0lPTi53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICBzaG93RGltZW5zaW9uPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAge2lzUHJvdmlkZXJMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWRzLnByb3ZpZGVyTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzZWxlY3Rpb24gbWFwLXNhdmluZy1hbmltYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZEFuaW1hdGlvbiBpY29uPXtwcm92aWRlciAmJiBwcm92aWRlci5pY29ufSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxNYXBJbmZvUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICBtYXBJbmZvPXttYXBJbmZvfVxuICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckxpbWl0cz17Y2hhcmFjdGVyTGltaXRzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlSW5wdXQ9e29uQ2hhbmdlSW5wdXR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvU3R5bGVkQ29tcGFjdEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtwcm92aWRlckVycm9yID8gKFxuICAgICAgICAgICAgICA8U3RhdHVzUGFuZWxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGVycm9yPXtwcm92aWRlckVycm9yLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJJY29uPXtwcm92aWRlciAmJiBwcm92aWRlci5pY29ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TdHlsZWRNb2RhbENvbnRlbnQ+XG4gICAgICAgIDwvU3R5bGVkU2F2ZU1hcE1vZGFsPlxuICAgICAgICA8TW9kYWxGb290ZXIgY2FuY2VsPXtvbkNhbmNlbH0gY29uZmlybT17Y29uZmlybX0gY29uZmlybUJ1dHRvbj17Y29uZmlybUJ1dHRvbn0gLz5cbiAgICAgIDwvSW1hZ2VNb2RhbENvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBTYXZlTWFwTW9kYWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhdmVNYXBNb2RhbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsb0JBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQU4sdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLGVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLElBQUEsR0FBQVAsT0FBQTtBQUVBLElBQUFRLGtCQUFBLEdBQUFSLE9BQUE7QUFRQSxJQUFBUyxhQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxLQUFBLEdBQUFWLE9BQUE7QUFJQSxJQUFBVyxNQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxzQkFBQSxHQUFBWixPQUFBO0FBQXNFLElBQUFhLGVBQUEsRUFBQUMsZ0JBQUEsRUF6QnRFO0FBQ0E7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