kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
307 lines (259 loc) • 31.5 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.SaveExportDropdown = exports.PanelAction = 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 _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents2 = require("../common/styled-components");
var _logo = _interopRequireDefault(require("../common/logo"));
var _icons = require("../common/icons");
var _panelDropdown = _interopRequireDefault(require("./panel-dropdown"));
function _templateObject5() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n box-shadow: ", ";\n font-size: 11px;\n padding: 16px 0;\n position: absolute;\n transition: ", ";\n display: flex;\n margin-top: ", ";\n opacity: ", ";\n transform: translateX(calc(-50% + 20px));\n pointer-events: ", ";\n z-index: 1000;\n\n .save-export-dropdown__inner {\n box-shadow: none;\n background-color: transparent;\n display: flex;\n }\n\n .save-export-dropdown__item {\n align-items: center;\n border-right: 1px solid ", ";\n color: ", ";\n display: flex;\n flex-direction: column;\n padding: 0 22px;\n\n :hover {\n cursor: pointer;\n color: ", ";\n }\n\n &:last-child {\n border-right: 0;\n }\n }\n\n .save-export-dropdown__title {\n white-space: nowrap;\n margin-top: 4px;\n }\n"]);
_templateObject5 = function _templateObject5() {
return data;
};
return data;
}
function _templateObject4() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n border-radius: 2px;\n color: ", ";\n display: flex;\n height: 26px;\n justify-content: space-between;\n margin-left: 4px;\n width: 70px;\n padding: 5px;\n font-weight: bold;\n a {\n height: 20px;\n }\n\n :hover {\n cursor: pointer;\n background-color: ", ";\n color: ", ";\n\n a {\n color: ", ";\n }\n }\n"]);
_templateObject4 = function _templateObject4() {
return data;
};
return data;
}
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n margin-bottom: 16px;\n width: 100%;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n padding: 12px 16px 0 16px;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var StyledPanelHeader = _styledComponents["default"].div.attrs({
className: 'side-side-panel__header'
})(_templateObject(), function (props) {
return props.theme.sidePanelHeaderBg;
});
var StyledPanelHeaderTop = _styledComponents["default"].div.attrs({
className: 'side-panel__header__top'
})(_templateObject2());
var StyledPanelTopActions = _styledComponents["default"].div.attrs({
className: 'side-panel__header__actions'
})(_templateObject3());
var StyledPanelAction = _styledComponents["default"].div.attrs({
className: 'side-panel__header__actions'
})(_templateObject4(), function (props) {
return props.active ? props.theme.textColorHl : props.theme.subtextColor;
}, function (props) {
return props.theme.secondaryBtnActBgd;
}, function (props) {
return props.theme.textColorHl;
}, function (props) {
return props.theme.textColorHl;
});
var StyledPanelDropdown = _styledComponents["default"].div(_templateObject5(), function (props) {
return props.theme.dropdownListBgd;
}, function (props) {
return props.theme.dropdownListShadow;
}, function (props) {
return props.theme.transitionSlow;
}, function (props) {
return props.show ? '6px' : '20px';
}, function (props) {
return props.show ? 1 : 0;
}, function (props) {
return props.show ? 'all' : 'none';
}, function (props) {
return props.theme.panelHeaderIcon;
}, function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.textColorHl;
});
var PanelAction = function PanelAction(_ref) {
var item = _ref.item,
onClick = _ref.onClick;
return _react["default"].createElement(StyledPanelAction, {
className: "side-panel__panel-header__action",
"data-tip": true,
"data-for": "".concat(item.id, "-action"),
onClick: onClick
}, item.label ? _react["default"].createElement("p", null, item.label) : null, _react["default"].createElement("a", {
target: item.blank ? '_blank' : '',
href: item.href
}, _react["default"].createElement(item.iconComponent, {
height: "20px"
})), item.tooltip ? _react["default"].createElement(_styledComponents2.Tooltip, {
id: "".concat(item.id, "-action"),
place: "bottom",
delayShow: 500,
effect: "solid"
}, _react["default"].createElement("span", null, item.tooltip)) : null);
};
exports.PanelAction = PanelAction;
var PanelItem = function PanelItem(_ref2) {
var onClose = _ref2.onClose,
onClickHandler = _ref2.onClickHandler,
label = _ref2.label,
icon = _ref2.icon;
return _react["default"].createElement("div", {
className: "save-export-dropdown__item",
onClick: function onClick(e) {
e.stopPropagation();
onClose();
onClickHandler();
}
}, icon, _react["default"].createElement("div", {
className: "save-export-dropdown__title"
}, label));
};
var SaveExportDropdown = function SaveExportDropdown(_ref3) {
var onExportImage = _ref3.onExportImage,
onExportData = _ref3.onExportData,
onExportConfig = _ref3.onExportConfig,
onSaveMap = _ref3.onSaveMap,
show = _ref3.show,
onClose = _ref3.onClose;
return _react["default"].createElement(StyledPanelDropdown, {
show: show,
className: "save-export-dropdown"
}, _react["default"].createElement(_panelDropdown["default"], {
className: "save-export-dropdown__inner",
show: show,
onClose: onClose
}, _react["default"].createElement(PanelItem, {
label: "Export Image",
onClickHandler: onExportImage,
onClose: onClose,
icon: _react["default"].createElement(_icons.Picture, {
height: "16px"
})
}), _react["default"].createElement(PanelItem, {
label: "Export Data",
onClickHandler: onExportData,
onClose: onClose,
icon: _react["default"].createElement(_icons.Files, {
height: "16px"
})
}), _react["default"].createElement(PanelItem, {
label: "Export Config",
onClickHandler: onExportConfig,
onClose: onClose,
icon: _react["default"].createElement(_icons.CodeAlt, {
height: "16px"
})
}), onSaveMap ? _react["default"].createElement(PanelItem, {
label: "Save Map Url",
onClickHandler: onSaveMap,
onClose: onClose,
icon: _react["default"].createElement(_icons.Share, {
height: "16px"
})
}) : null));
};
exports.SaveExportDropdown = SaveExportDropdown;
var defaultActionItems = [{
id: 'save',
iconComponent: _icons.Save,
onClick: function onClick() {},
label: 'Share',
dropdownComponent: SaveExportDropdown
}];
function PanelHeaderFactory() {
var _class, _temp;
return _temp = _class =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(PanelHeader, _Component);
function PanelHeader() {
(0, _classCallCheck2["default"])(this, PanelHeader);
return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(PanelHeader).apply(this, arguments));
}
(0, _createClass2["default"])(PanelHeader, [{
key: "render",
value: function render() {
var _this$props = this.props,
appName = _this$props.appName,
version = _this$props.version,
actionItems = _this$props.actionItems,
onSaveMap = _this$props.onSaveMap,
onExportImage = _this$props.onExportImage,
onExportData = _this$props.onExportData,
onExportConfig = _this$props.onExportConfig,
visibleDropdown = _this$props.visibleDropdown,
showExportDropdown = _this$props.showExportDropdown,
hideExportDropdown = _this$props.hideExportDropdown;
return _react["default"].createElement(StyledPanelHeader, {
className: "side-panel__panel-header"
}, _react["default"].createElement(StyledPanelHeaderTop, {
className: "side-panel__panel-header__top"
}, _react["default"].createElement(this.props.logoComponent, {
appName: appName,
version: version
}), _react["default"].createElement(StyledPanelTopActions, null, actionItems.map(function (item) {
return _react["default"].createElement("div", {
className: "side-panel__panel-header__right",
key: item.id,
style: {
position: 'relative'
}
}, _react["default"].createElement(PanelAction, {
item: item,
onClick: function onClick() {
if (item.dropdownComponent) {
showExportDropdown(item.id);
}
item.onClick();
}
}), item.dropdownComponent ? _react["default"].createElement(item.dropdownComponent, {
onClose: hideExportDropdown,
show: visibleDropdown === item.id,
onSaveMap: onSaveMap,
onExportData: onExportData,
onExportImage: onExportImage,
onExportConfig: onExportConfig
}) : null);
}))));
}
}]);
return PanelHeader;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
appName: _propTypes["default"].string,
version: _propTypes["default"].string,
uiState: _propTypes["default"].object,
uiStateActions: _propTypes["default"].object,
logoComponent: _propTypes["default"].oneOfType([_propTypes["default"].element, _propTypes["default"].func]),
actionItems: _propTypes["default"].arrayOf(_propTypes["default"].any)
}), (0, _defineProperty2["default"])(_class, "defaultProps", {
logoComponent: _logo["default"],
actionItems: defaultActionItems
}), _temp;
}
var _default = PanelHeaderFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyLmpzIl0sIm5hbWVzIjpbIlN0eWxlZFBhbmVsSGVhZGVyIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJwcm9wcyIsInRoZW1lIiwic2lkZVBhbmVsSGVhZGVyQmciLCJTdHlsZWRQYW5lbEhlYWRlclRvcCIsIlN0eWxlZFBhbmVsVG9wQWN0aW9ucyIsIlN0eWxlZFBhbmVsQWN0aW9uIiwiYWN0aXZlIiwidGV4dENvbG9ySGwiLCJzdWJ0ZXh0Q29sb3IiLCJzZWNvbmRhcnlCdG5BY3RCZ2QiLCJTdHlsZWRQYW5lbERyb3Bkb3duIiwiZHJvcGRvd25MaXN0QmdkIiwiZHJvcGRvd25MaXN0U2hhZG93IiwidHJhbnNpdGlvblNsb3ciLCJzaG93IiwicGFuZWxIZWFkZXJJY29uIiwidGV4dENvbG9yIiwiUGFuZWxBY3Rpb24iLCJpdGVtIiwib25DbGljayIsImlkIiwibGFiZWwiLCJibGFuayIsImhyZWYiLCJ0b29sdGlwIiwiUGFuZWxJdGVtIiwib25DbG9zZSIsIm9uQ2xpY2tIYW5kbGVyIiwiaWNvbiIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJTYXZlRXhwb3J0RHJvcGRvd24iLCJvbkV4cG9ydEltYWdlIiwib25FeHBvcnREYXRhIiwib25FeHBvcnRDb25maWciLCJvblNhdmVNYXAiLCJkZWZhdWx0QWN0aW9uSXRlbXMiLCJpY29uQ29tcG9uZW50IiwiU2F2ZSIsImRyb3Bkb3duQ29tcG9uZW50IiwiUGFuZWxIZWFkZXJGYWN0b3J5IiwiYXBwTmFtZSIsInZlcnNpb24iLCJhY3Rpb25JdGVtcyIsInZpc2libGVEcm9wZG93biIsInNob3dFeHBvcnREcm9wZG93biIsImhpZGVFeHBvcnREcm9wZG93biIsIm1hcCIsInBvc2l0aW9uIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwidWlTdGF0ZSIsIm9iamVjdCIsInVpU3RhdGVBY3Rpb25zIiwibG9nb0NvbXBvbmVudCIsIm9uZU9mVHlwZSIsImVsZW1lbnQiLCJmdW5jIiwiYXJyYXlPZiIsImFueSIsIktlcGxlckdsTG9nbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGlCQUFpQixHQUFHQyw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3pDQyxFQUFBQSxTQUFTLEVBQUU7QUFEOEIsQ0FBakIsQ0FBSCxvQkFHRCxVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLGlCQUFoQjtBQUFBLENBSEosQ0FBdkI7O0FBT0EsSUFBTUMsb0JBQW9CLEdBQUdQLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDNUNDLEVBQUFBLFNBQVMsRUFBRTtBQURpQyxDQUFqQixDQUFILG9CQUExQjs7QUFTQSxJQUFNSyxxQkFBcUIsR0FBR1IsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUM3Q0MsRUFBQUEsU0FBUyxFQUFFO0FBRGtDLENBQWpCLENBQUgsb0JBQTNCOztBQU1BLElBQU1NLGlCQUFpQixHQUFHVCw2QkFBT0MsR0FBUCxDQUFXQyxLQUFYLENBQWlCO0FBQ3pDQyxFQUFBQSxTQUFTLEVBQUU7QUFEOEIsQ0FBakIsQ0FBSCxxQkFLWixVQUFBQyxLQUFLO0FBQUEsU0FDWkEsS0FBSyxDQUFDTSxNQUFOLEdBQWVOLEtBQUssQ0FBQ0MsS0FBTixDQUFZTSxXQUEzQixHQUF5Q1AsS0FBSyxDQUFDQyxLQUFOLENBQVlPLFlBRHpDO0FBQUEsQ0FMTyxFQW9CQyxVQUFBUixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlRLGtCQUFoQjtBQUFBLENBcEJOLEVBcUJWLFVBQUFULEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUND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c0JBQVVHLE1BSlQ7QUFLakJFLElBQUFBLGFBQWEsRUFBRUwsc0JBQVVNLFNBQVYsQ0FBb0IsQ0FBQ04sc0JBQVVPLE9BQVgsRUFBb0JQLHNCQUFVUSxJQUE5QixDQUFwQixDQUxFO0FBTWpCZixJQUFBQSxXQUFXLEVBQUVPLHNCQUFVUyxPQUFWLENBQWtCVCxzQkFBVVUsR0FBNUI7QUFOSSxHQURyQiw0REFVd0I7QUFDcEJMLElBQUFBLGFBQWEsRUFBRU0sZ0JBREs7QUFFcEJsQixJQUFBQSxXQUFXLEVBQUVQO0FBRk8sR0FWeEI7QUFtRUQ7O2VBRWNJLGtCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQge1Rvb2x0aXB9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBLZXBsZXJHbExvZ28gZnJvbSAnY29tcG9uZW50cy9jb21tb24vbG9nbyc7XG5pbXBvcnQge0NvZGVBbHQsIFNhdmUsIEZpbGVzLCBTaGFyZSwgUGljdHVyZX0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vaWNvbnMnO1xuaW1wb3J0IENsaWNrT3V0c2lkZUNsb3NlRHJvcGRvd24gZnJvbSAnY29tcG9uZW50cy9zaWRlLXBhbmVsL3BhbmVsLWRyb3Bkb3duJztcblxuY29uc3QgU3R5bGVkUGFuZWxIZWFkZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnc2lkZS1zaWRlLXBhbmVsX19oZWFkZXInXG59KWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxIZWFkZXJCZ307XG4gIHBhZGRpbmc6IDEycHggMTZweCAwIDE2cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRQYW5lbEhlYWRlclRvcCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdzaWRlLXBhbmVsX19oZWFkZXJfX3RvcCdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxUb3BBY3Rpb25zID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWxfX2hlYWRlcl9fYWN0aW9ucydcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxBY3Rpb24gPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnc2lkZS1wYW5lbF9faGVhZGVyX19hY3Rpb25zJ1xufSlgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5hY3RpdmUgPyBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbCA6IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMjZweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW4tbGVmdDogNHB4O1xuICB3aWR0aDogNzBweDtcbiAgcGFkZGluZzogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYSB7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICB9XG5cbiAgOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zZWNvbmRhcnlCdG5BY3RCZ2R9O1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcblxuICAgIGEge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkUGFuZWxEcm9wZG93biA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0QmdkfTtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5kcm9wZG93bkxpc3RTaGFkb3d9O1xuICBmb250LXNpemU6IDExcHg7XG4gIHBhZGRpbmc6IDE2cHggMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRyYW5zaXRpb25TbG93fTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogJHtwcm9wcyA9PiAocHJvcHMuc2hvdyA/ICc2cHgnIDogJzIwcHgnKX07XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLnNob3cgPyAxIDogMCl9O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgMjBweCkpO1xuICBwb2ludGVyLWV2ZW50czogJHtwcm9wcyA9PiAocHJvcHMuc2hvdyA/ICdhbGwnIDogJ25vbmUnKX07XG4gIHotaW5kZXg6IDEwMDA7XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX19pbm5lciB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX19pdGVtIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxIZWFkZXJJY29ufTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAwIDIycHg7XG5cbiAgICA6aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLnNhdmUtZXhwb3J0LWRyb3Bkb3duX190aXRsZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBQYW5lbEFjdGlvbiA9ICh7aXRlbSwgb25DbGlja30pID0+IChcbiAgPFN0eWxlZFBhbmVsQWN0aW9uXG4gICAgY2xhc3NOYW1lPVwic2lkZS1wYW5lbF9fcGFuZWwtaGVhZGVyX19hY3Rpb25cIlxuICAgIGRhdGEtdGlwXG4gICAgZGF0YS1mb3I9e2Ake2l0ZW0uaWR9LWFjdGlvbmB9XG4gICAgb25DbGljaz17b25DbGlja31cbiAgPlxuICAgIHtpdGVtLmxhYmVsID8gPHA+e2l0ZW0ubGFiZWx9PC9wPiA6IG51bGx9XG4gICAgPGEgdGFyZ2V0PXtpdGVtLmJsYW5rID8gJ19ibGFuaycgOiAnJ30gaHJlZj17aXRlbS5ocmVmfT5cbiAgICAgIDxpdGVtLmljb25Db21wb25lbnQgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgPC9hPlxuICAgIHtpdGVtLnRvb2x0aXAgPyAoXG4gICAgICA8VG9vbHRpcFxuICAgICAgICBpZD17YCR7aXRlbS5pZH0tYWN0aW9uYH1cbiAgICAgICAgcGxhY2U9XCJib3R0b21cIlxuICAgICAgICBkZWxheVNob3c9ezUwMH1cbiAgICAgICAgZWZmZWN0PVwic29saWRcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57aXRlbS50b29sdGlwfTwvc3Bhbj5cbiAgICAgIDwvVG9vbHRpcD5cbiAgICApIDogbnVsbH1cbiAgPC9TdHlsZWRQYW5lbEFjdGlvbj5cbik7XG5cbmNvbnN0IFBhbmVsSXRlbSA9ICh7b25DbG9zZSwgb25DbGlja0hhbmRsZXIsIGxhYmVsLCBpY29ufSkgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX2l0ZW1cIlxuICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIG9uQ2xpY2tIYW5kbGVyKCk7XG4gICAgfX1cbiAgPlxuICAgIHtpY29ufVxuICAgIDxkaXYgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX3RpdGxlXCI+e2xhYmVsfTwvZGl2PlxuICA8L2Rpdj5cbik7XG5cbmV4cG9ydCBjb25zdCBTYXZlRXhwb3J0RHJvcGRvd24gPSAoe1xuICBvbkV4cG9ydEltYWdlLFxuICBvbkV4cG9ydERhdGEsXG4gIG9uRXhwb3J0Q29uZmlnLFxuICBvblNhdmVNYXAsXG4gIHNob3csXG4gIG9uQ2xvc2Vcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkUGFuZWxEcm9wZG93biBzaG93PXtzaG93fSBjbGFzc05hbWU9XCJzYXZlLWV4cG9ydC1kcm9wZG93blwiPlxuICAgICAgPENsaWNrT3V0c2lkZUNsb3NlRHJvcGRvd25cbiAgICAgICAgY2xhc3NOYW1lPVwic2F2ZS1leHBvcnQtZHJvcGRvd25fX2lubmVyXCJcbiAgICAgICAgc2hvdz17c2hvd31cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgID5cbiAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgIGxhYmVsPVwiRXhwb3J0IEltYWdlXCJcbiAgICAgICAgICBvbkNsaWNrSGFuZGxlcj17b25FeHBvcnRJbWFnZX1cbiAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgIGljb249ezxQaWN0dXJlIGhlaWdodD1cIjE2cHhcIiAvPn1cbiAgICAgICAgLz5cblxuICAgICAgICA8UGFuZWxJdGVtXG4gICAgICAgICAgbGFiZWw9XCJFeHBvcnQgRGF0YVwiXG4gICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uRXhwb3J0RGF0YX1cbiAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgIGljb249ezxGaWxlcyBoZWlnaHQ9XCIxNnB4XCIgLz59XG4gICAgICAgIC8+XG5cbiAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgIGxhYmVsPVwiRXhwb3J0IENvbmZpZ1wiXG4gICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uRXhwb3J0Q29uZmlnfVxuICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgaWNvbj17PENvZGVBbHQgaGVpZ2h0PVwiMTZweFwiIC8+fVxuICAgICAgICAvPlxuXG4gICAgICAgIHtvblNhdmVNYXAgPyAoXG4gICAgICAgICAgPFBhbmVsSXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJTYXZlIE1hcCBVcmxcIlxuICAgICAgICAgICAgb25DbGlja0hhbmRsZXI9e29uU2F2ZU1hcH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICBpY29uPXs8U2hhcmUgaGVpZ2h0PVwiMTZweFwiIC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9DbGlja091dHNpZGVDbG9zZURyb3Bkb3duPlxuICAgIDwvU3R5bGVkUGFuZWxEcm9wZG93bj5cbiAgKTtcbn07XG5cbmNvbnN0IGRlZmF1bHRBY3Rpb25JdGVtcyA9IFtcbiAge1xuICAgIGlkOiAnc2F2ZScsXG4gICAgaWNvbkNvbXBvbmVudDogU2F2ZSxcbiAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICBsYWJlbDogJ1NoYXJlJyxcbiAgICBkcm9wZG93bkNvbXBvbmVudDogU2F2ZUV4cG9ydERyb3Bkb3duXG4gIH1cbl07XG5cbmZ1bmN0aW9uIFBhbmVsSGVhZGVyRmFjdG9yeSgpIHtcbiAgcmV0dXJuIGNsYXNzIFBhbmVsSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgYXBwTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHZlcnNpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB1aVN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgdWlTdGF0ZUFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBsb2dvQ29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudCwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICAgIGFjdGlvbkl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KVxuICAgIH07XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgbG9nb0NvbXBvbmVudDogS2VwbGVyR2xMb2dvLFxuICAgICAgYWN0aW9uSXRlbXM6IGRlZmF1bHRBY3Rpb25JdGVtc1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcE5hbWUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGFjdGlvbkl0ZW1zLFxuICAgICAgICBvblNhdmVNYXAsXG4gICAgICAgIG9uRXhwb3J0SW1hZ2UsXG4gICAgICAgIG9uRXhwb3J0RGF0YSxcbiAgICAgICAgb25FeHBvcnRDb25maWcsXG4gICAgICAgIHZpc2libGVEcm9wZG93bixcbiAgICAgICAgc2hvd0V4cG9ydERyb3Bkb3duLFxuICAgICAgICBoaWRlRXhwb3J0RHJvcGRvd25cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkUGFuZWxIZWFkZXIgY2xhc3NOYW1lPVwic2lkZS1wYW5lbF9fcGFuZWwtaGVhZGVyXCI+XG4gICAgICAgICAgPFN0eWxlZFBhbmVsSGVhZGVyVG9wIGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX3BhbmVsLWhlYWRlcl9fdG9wXCI+XG4gICAgICAgICAgICA8dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50IGFwcE5hbWU9e2FwcE5hbWV9IHZlcnNpb249e3ZlcnNpb259IC8+XG4gICAgICAgICAgICA8U3R5bGVkUGFuZWxUb3BBY3Rpb25zPlxuICAgICAgICAgICAgICB7YWN0aW9uSXRlbXMubWFwKGl0ZW0gPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX3BhbmVsLWhlYWRlcl9fcmlnaHRcIlxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3twb3NpdGlvbjogJ3JlbGF0aXZlJ319XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFBhbmVsQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5kcm9wZG93bkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0V4cG9ydERyb3Bkb3duKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7aXRlbS5kcm9wZG93bkNvbXBvbmVudCA/IChcbiAgICAgICAgICAgICAgICAgICAgPGl0ZW0uZHJvcGRvd25Db21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoaWRlRXhwb3J0RHJvcGRvd259XG4gICAgICAgICAgICAgICAgICAgICAgc2hvdz17dmlzaWJsZURyb3Bkb3duID09PSBpdGVtLmlkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2F2ZU1hcD17b25TYXZlTWFwfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRXhwb3J0RGF0YT17b25FeHBvcnREYXRhfVxuICAgICAgICAgICAgICAgICAgICAgIG9uRXhwb3J0SW1hZ2U9e29uRXhwb3J0SW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgb25FeHBvcnRDb25maWc9e29uRXhwb3J0Q29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TdHlsZWRQYW5lbFRvcEFjdGlvbnM+XG4gICAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlclRvcD5cbiAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBQYW5lbEhlYWRlckZhY3Rvcnk7XG4iXX0=