kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
186 lines (185 loc) • 33.5 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"] = 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 _react = _interopRequireWildcard(require("react"));
var _reactIntl = require("react-intl");
var _constants = require("@kepler.gl/constants");
var _localization = require("@kepler.gl/localization");
var _icons = require("../common/icons");
var _styledComponents = require("../common/styled-components");
var _components = require("./export-map-modal/components");
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; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var getDataRowCount = function getDataRowCount(datasets, selectedDataset, filtered, intl) {
if (selectedDataset === undefined) {
return;
}
var selectedData = datasets[selectedDataset];
if (!selectedData) {
return intl.formatMessage({
id: 'modal.exportData.fileCount'
}, {
fileCount: Object.keys(datasets).length
});
}
var dataContainer = selectedData.dataContainer,
filteredIdxCPU = selectedData.filteredIdxCPU;
if (filtered && !filteredIdxCPU) {
return '-';
}
var rowCount = filtered ? filteredIdxCPU === null || filteredIdxCPU === void 0 ? void 0 : filteredIdxCPU.length : dataContainer.numRows();
return intl.formatMessage({
id: 'modal.exportData.rowCount'
}, {
rowCount: rowCount === null || rowCount === void 0 ? void 0 : rowCount.toLocaleString()
});
};
var ExportDataModalFactory = function ExportDataModalFactory() {
var ExportDataModal = /*#__PURE__*/function (_Component) {
function ExportDataModal() {
var _this;
(0, _classCallCheck2["default"])(this, ExportDataModal);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, ExportDataModal, [].concat(args));
(0, _defineProperty2["default"])(_this, "_onSelectDataset", function (_ref) {
var value = _ref.target.value;
_this.props.applyCPUFilter(value);
_this.props.onChangeExportSelectedDataset(value);
});
return _this;
}
(0, _inherits2["default"])(ExportDataModal, _Component);
return (0, _createClass2["default"])(ExportDataModal, [{
key: "componentDidMount",
value: function componentDidMount() {
var toCPUFilter = this.props.selectedDataset || Object.keys(this.props.datasets);
this.props.applyCPUFilter(toCPUFilter);
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
_this$props$supported = _this$props.supportedDataTypes,
supportedDataTypes = _this$props$supported === void 0 ? _constants.EXPORT_DATA_TYPE_OPTIONS : _this$props$supported,
datasets = _this$props.datasets,
selectedDataset = _this$props.selectedDataset,
dataType = _this$props.dataType,
filtered = _this$props.filtered,
onChangeExportDataType = _this$props.onChangeExportDataType,
onChangeExportFiltered = _this$props.onChangeExportFiltered,
intl = _this$props.intl;
var exportAllDatasets = selectedDataset ? !datasets[selectedDataset] : true;
var showTiledDatasetWarning = Object.keys(datasets).some(function (datasetId) {
return (datasets[datasetId].type === _constants.DatasetType.VECTOR_TILE || datasets[datasetId].type === _constants.DatasetType.RASTER_TILE) && (selectedDataset === datasetId || exportAllDatasets);
});
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledModalContent, {
className: "export-data-modal"
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.datasetTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.datasetSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement("select", {
value: selectedDataset,
onChange: this._onSelectDataset
}, [intl.formatMessage({
id: 'modal.exportData.allDatasets'
})].concat(Object.keys(datasets)).map(function (d) {
return /*#__PURE__*/_react["default"].createElement("option", {
key: d,
value: d
}, datasets[d] && datasets[d].label || d);
})))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.dataTypeTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.dataTypeSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, supportedDataTypes.map(function (op) {
return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledType, {
key: op.id,
selected: dataType === op.id,
onClick: function onClick() {
return op.available && onChangeExportDataType(op.id);
}
}, /*#__PURE__*/_react["default"].createElement(_icons.FileType, {
ext: op.label,
height: "80px",
fontSize: "11px"
}), dataType === op.id && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null));
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "description"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.dataTypeTitle'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "subtitle"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.filterDataSubtitle'
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "selection"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
className: "unfiltered-option",
selected: !filtered,
onClick: function onClick() {
return onChangeExportFiltered(false);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-title"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.unfilteredData'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-subtitle"
}, getDataRowCount(datasets, selectedDataset, false, intl)), !filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, {
className: "filtered-option",
selected: filtered,
onClick: function onClick() {
return onChangeExportFiltered(true);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-title"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.filteredData'
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "filter-option-subtitle"
}, getDataRowCount(datasets, selectedDataset, true, intl)), filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)))), showTiledDatasetWarning ? /*#__PURE__*/_react["default"].createElement("div", {
className: "title"
}, /*#__PURE__*/_react["default"].createElement(_components.StyledWarning, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.exportData.tiledDatasetWarning'
}))) : null));
}
}]);
}(_react.Component);
return (0, _reactIntl.injectIntl)(ExportDataModal);
};
var _default = exports["default"] = ExportDataModalFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl9sb2NhbGl6YXRpb24iLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb21wb25lbnRzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJnZXREYXRhUm93Q291bnQiLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImZpbHRlcmVkIiwiaW50bCIsInVuZGVmaW5lZCIsInNlbGVjdGVkRGF0YSIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsImZpbGVDb3VudCIsImtleXMiLCJsZW5ndGgiLCJkYXRhQ29udGFpbmVyIiwiZmlsdGVyZWRJZHhDUFUiLCJyb3dDb3VudCIsIm51bVJvd3MiLCJ0b0xvY2FsZVN0cmluZyIsIkV4cG9ydERhdGFNb2RhbEZhY3RvcnkiLCJFeHBvcnREYXRhTW9kYWwiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiX3JlZiIsInZhbHVlIiwidGFyZ2V0IiwicHJvcHMiLCJhcHBseUNQVUZpbHRlciIsIm9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsInRvQ1BVRmlsdGVyIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRzdXBwb3J0ZWQiLCJzdXBwb3J0ZWREYXRhVHlwZXMiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJkYXRhVHlwZSIsIm9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUiLCJvbkNoYW5nZUV4cG9ydEZpbHRlcmVkIiwiZXhwb3J0QWxsRGF0YXNldHMiLCJzaG93VGlsZWREYXRhc2V0V2FybmluZyIsInNvbWUiLCJkYXRhc2V0SWQiLCJ0eXBlIiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsIlJBU1RFUl9USUxFIiwiY3JlYXRlRWxlbWVudCIsIlN0eWxlZE1vZGFsQ29udGVudCIsImNsYXNzTmFtZSIsIlN0eWxlZEV4cG9ydFNlY3Rpb24iLCJGb3JtYXR0ZWRNZXNzYWdlIiwib25DaGFuZ2UiLCJfb25TZWxlY3REYXRhc2V0IiwibWFwIiwiZCIsImxhYmVsIiwib3AiLCJTdHlsZWRUeXBlIiwic2VsZWN0ZWQiLCJvbkNsaWNrIiwiYXZhaWxhYmxlIiwiRmlsZVR5cGUiLCJleHQiLCJoZWlnaHQiLCJmb250U2l6ZSIsIkNoZWNrTWFyayIsIlN0eWxlZEZpbHRlcmVkT3B0aW9uIiwiU3R5bGVkV2FybmluZyIsIkNvbXBvbmVudCIsImluamVjdEludGwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kYWxzL2V4cG9ydC1kYXRhLW1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7aW5qZWN0SW50bCwgSW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcblxuaW1wb3J0IHtEYXRhc2V0VHlwZSwgRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge0ZpbGVUeXBlfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtcbiAgU3R5bGVkRXhwb3J0U2VjdGlvbixcbiAgU3R5bGVkRmlsdGVyZWRPcHRpb24sXG4gIFN0eWxlZE1vZGFsQ29udGVudCxcbiAgU3R5bGVkVHlwZSxcbiAgQ2hlY2tNYXJrXG59IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1N0eWxlZFdhcm5pbmd9IGZyb20gJy4vZXhwb3J0LW1hcC1tb2RhbC9jb21wb25lbnRzJztcblxuY29uc3QgZ2V0RGF0YVJvd0NvdW50ID0gKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIHNlbGVjdGVkRGF0YXNldDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmaWx0ZXJlZDogYm9vbGVhbixcbiAgaW50bDogSW50bFNoYXBlXG4pID0+IHtcbiAgaWYgKHNlbGVjdGVkRGF0YXNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkRGF0YSA9IGRhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF07XG4gIGlmICghc2VsZWN0ZWREYXRhKSB7XG4gICAgcmV0dXJuIGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgIHtpZDogJ21vZGFsLmV4cG9ydERhdGEuZmlsZUNvdW50J30sXG4gICAgICB7ZmlsZUNvdW50OiBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RofVxuICAgICk7XG4gIH1cbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSWR4Q1BVfSA9IHNlbGVjdGVkRGF0YTtcblxuICBpZiAoZmlsdGVyZWQgJiYgIWZpbHRlcmVkSWR4Q1BVKSB7XG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIGNvbnN0IHJvd0NvdW50ID0gZmlsdGVyZWQgPyBmaWx0ZXJlZElkeENQVT8ubGVuZ3RoIDogZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG5cbiAgcmV0dXJuIGludGwuZm9ybWF0TWVzc2FnZShcbiAgICB7aWQ6ICdtb2RhbC5leHBvcnREYXRhLnJvd0NvdW50J30sXG4gICAge3Jvd0NvdW50OiByb3dDb3VudD8udG9Mb2NhbGVTdHJpbmcoKX1cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGF0YU1vZGFsUHJvcHMge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIHNlbGVjdGVkRGF0YXNldD86IHN0cmluZztcbiAgZGF0YVR5cGU6IHN0cmluZztcbiAgZmlsdGVyZWQ6IGJvb2xlYW47XG4gIC8vIGNhbGxiYWNrc1xuICBhcHBseUNQVUZpbHRlcjogKGZpbHRlcjogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0OiAoZGF0YXNldDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNoYW5nZUV4cG9ydERhdGFUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNoYW5nZUV4cG9ydEZpbHRlcmVkOiAoaXNGaWx0ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgaW50bDogSW50bFNoYXBlO1xuICBzdXBwb3J0ZWREYXRhVHlwZXM6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlOiBib29sZWFuO1xuICB9W107XG59XG5cbmNvbnN0IEV4cG9ydERhdGFNb2RhbEZhY3RvcnkgPSAoKSA9PiB7XG4gIGNsYXNzIEV4cG9ydERhdGFNb2RhbCBleHRlbmRzIENvbXBvbmVudDxFeHBvcnREYXRhTW9kYWxQcm9wcz4ge1xuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgdG9DUFVGaWx0ZXIgPSB0aGlzLnByb3BzLnNlbGVjdGVkRGF0YXNldCB8fCBPYmplY3Qua2V5cyh0aGlzLnByb3BzLmRhdGFzZXRzKTtcbiAgICAgIHRoaXMucHJvcHMuYXBwbHlDUFVGaWx0ZXIodG9DUFVGaWx0ZXIpO1xuICAgIH1cblxuICAgIF9vblNlbGVjdERhdGFzZXQ6IFJlYWN0LkNoYW5nZUV2ZW50SGFuZGxlcjxIVE1MU2VsZWN0RWxlbWVudD4gPSAoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMuYXBwbHlDUFVGaWx0ZXIodmFsdWUpO1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZUV4cG9ydFNlbGVjdGVkRGF0YXNldCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3VwcG9ydGVkRGF0YVR5cGVzID0gRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TLFxuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgc2VsZWN0ZWREYXRhc2V0LFxuICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgZmlsdGVyZWQsXG4gICAgICAgIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUsXG4gICAgICAgIG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQsXG4gICAgICAgIGludGxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBleHBvcnRBbGxEYXRhc2V0cyA9IHNlbGVjdGVkRGF0YXNldCA/ICFkYXRhc2V0c1tzZWxlY3RlZERhdGFzZXRdIDogdHJ1ZTtcbiAgICAgIGNvbnN0IHNob3dUaWxlZERhdGFzZXRXYXJuaW5nID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLnNvbWUoZGF0YXNldElkID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZGF0YXNldHNbZGF0YXNldElkXS50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSB8fFxuICAgICAgICAgICAgZGF0YXNldHNbZGF0YXNldElkXS50eXBlID09PSBEYXRhc2V0VHlwZS5SQVNURVJfVElMRSkgJiZcbiAgICAgICAgICAoc2VsZWN0ZWREYXRhc2V0ID09PSBkYXRhc2V0SWQgfHwgZXhwb3J0QWxsRGF0YXNldHMpXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1vZGFsQ29udGVudCBjbGFzc05hbWU9XCJleHBvcnQtZGF0YS1tb2RhbFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhc2V0VGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhc2V0U3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPXtzZWxlY3RlZERhdGFzZXR9IG9uQ2hhbmdlPXt0aGlzLl9vblNlbGVjdERhdGFzZXR9PlxuICAgICAgICAgICAgICAgICAge1tpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnbW9kYWwuZXhwb3J0RGF0YS5hbGxEYXRhc2V0cyd9KV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyhkYXRhc2V0cykpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2R9IHZhbHVlPXtkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsoZGF0YXNldHNbZF0gJiYgZGF0YXNldHNbZF0ubGFiZWwpIHx8IGR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFUeXBlVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhVHlwZVN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAge3N1cHBvcnRlZERhdGFUeXBlcy5tYXAob3AgPT4gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFR5cGVcbiAgICAgICAgICAgICAgICAgICAga2V5PXtvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGFUeXBlID09PSBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3AuYXZhaWxhYmxlICYmIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUob3AuaWQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RmlsZVR5cGUgZXh0PXtvcC5sYWJlbH0gaGVpZ2h0PVwiODBweFwiIGZvbnRTaXplPVwiMTFweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIHtkYXRhVHlwZSA9PT0gb3AuaWQgJiYgPENoZWNrTWFyayAvPn1cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkVHlwZT5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhVHlwZVRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZmlsdGVyRGF0YVN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEZpbHRlcmVkT3B0aW9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ1bmZpbHRlcmVkLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17IWZpbHRlcmVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZChmYWxzZSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItb3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS51bmZpbHRlcmVkRGF0YSd9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIGZhbHNlLCBpbnRsKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgeyFmaWx0ZXJlZCAmJiA8Q2hlY2tNYXJrIC8+fVxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRmlsdGVyZWRPcHRpb24+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEZpbHRlcmVkT3B0aW9uXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWx0ZXJlZC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbHRlcmVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCh0cnVlKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1vcHRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmZpbHRlcmVkRGF0YSd9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RGF0YVJvd0NvdW50KGRhdGFzZXRzLCBzZWxlY3RlZERhdGFzZXQsIHRydWUsIGludGwpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWQgJiYgPENoZWNrTWFyayAvPn1cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEZpbHRlcmVkT3B0aW9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgIHtzaG93VGlsZWREYXRhc2V0V2FybmluZyA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRXYXJuaW5nPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLnRpbGVkRGF0YXNldFdhcm5pbmcnfSAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkV2FybmluZz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TdHlsZWRNb2RhbENvbnRlbnQ+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmplY3RJbnRsKEV4cG9ydERhdGFNb2RhbCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBvcnREYXRhTW9kYWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQUdBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGlCQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFBNEQsU0FBQU8seUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFULHdCQUFBUyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQVcsV0FBQWhCLENBQUEsRUFBQWlCLENBQUEsRUFBQXBCLENBQUEsV0FBQW9CLENBQUEsT0FBQUMsZ0JBQUEsYUFBQUQsQ0FBQSxPQUFBRSwyQkFBQSxhQUFBbkIsQ0FBQSxFQUFBb0IseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFMLENBQUEsRUFBQXBCLENBQUEsWUFBQXFCLGdCQUFBLGFBQUFsQixDQUFBLEVBQUF1QixXQUFBLElBQUFOLENBQUEsQ0FBQU8sS0FBQSxDQUFBeEIsQ0FBQSxFQUFBSCxDQUFBO0FBQUEsU0FBQXVCLDBCQUFBLGNBQUFwQixDQUFBLElBQUF5QixPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBZCxJQUFBLENBQUFRLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBekIsQ0FBQSxhQUFBb0IseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXBCLENBQUEsVUFsQjVEO0FBQ0E7QUFtQkEsSUFBTTRCLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDbkJDLFFBQWtCLEVBQ2xCQyxlQUFtQyxFQUNuQ0MsUUFBaUIsRUFDakJDLElBQWUsRUFDWjtFQUNILElBQUlGLGVBQWUsS0FBS0csU0FBUyxFQUFFO0lBQ2pDO0VBQ0Y7RUFDQSxJQUFNQyxZQUFZLEdBQUdMLFFBQVEsQ0FBQ0MsZUFBZSxDQUFDO0VBQzlDLElBQUksQ0FBQ0ksWUFBWSxFQUFFO0lBQ2pCLE9BQU9GLElBQUksQ0FBQ0csYUFBYSxDQUN2QjtNQUFDQyxFQUFFLEVBQUU7SUFBNEIsQ0FBQyxFQUNsQztNQUFDQyxTQUFTLEVBQUU3QixNQUFNLENBQUM4QixJQUFJLENBQUNULFFBQVEsQ0FBQyxDQUFDVTtJQUFNLENBQzFDLENBQUM7RUFDSDtFQUNBLElBQU9DLGFBQWEsR0FBb0JOLFlBQVksQ0FBN0NNLGFBQWE7SUFBRUMsY0FBYyxHQUFJUCxZQUFZLENBQTlCTyxjQUFjO0VBRXBDLElBQUlWLFFBQVEsSUFBSSxDQUFDVSxjQUFjLEVBQUU7SUFDL0IsT0FBTyxHQUFHO0VBQ1o7RUFFQSxJQUFNQyxRQUFRLEdBQUdYLFFBQVEsR0FBR1UsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVGLE1BQU0sR0FBR0MsYUFBYSxDQUFDRyxPQUFPLENBQUMsQ0FBQztFQUU1RSxPQUFPWCxJQUFJLENBQUNHLGFBQWEsQ0FDdkI7SUFBQ0MsRUFBRSxFQUFFO0VBQTJCLENBQUMsRUFDakM7SUFBQ00sUUFBUSxFQUFFQSxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUUsY0FBYyxDQUFDO0VBQUMsQ0FDdkMsQ0FBQztBQUNILENBQUM7QUFvQkQsSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBQSxFQUFTO0VBQUEsSUFDN0JDLGVBQWUsMEJBQUFDLFVBQUE7SUFBQSxTQUFBRCxnQkFBQTtNQUFBLElBQUFFLEtBQUE7TUFBQSxJQUFBQyxnQkFBQSxtQkFBQUgsZUFBQTtNQUFBLFNBQUFJLElBQUEsR0FBQUMsU0FBQSxDQUFBWixNQUFBLEVBQUFhLElBQUEsT0FBQUMsS0FBQSxDQUFBSCxJQUFBLEdBQUFJLElBQUEsTUFBQUEsSUFBQSxHQUFBSixJQUFBLEVBQUFJLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFILFNBQUEsQ0FBQUcsSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQWhDLFVBQUEsT0FBQThCLGVBQUEsS0FBQVMsTUFBQSxDQUFBSCxJQUFBO01BQUEsSUFBQUksZ0JBQUEsYUFBQVIsS0FBQSxzQkFNNkMsVUFBQVMsSUFBQSxFQUF1QjtRQUFBLElBQVpDLEtBQUssR0FBQUQsSUFBQSxDQUFkRSxNQUFNLENBQUdELEtBQUs7UUFDOUVWLEtBQUEsQ0FBS1ksS0FBSyxDQUFDQyxjQUFjLENBQUNILEtBQUssQ0FBQztRQUNoQ1YsS0FBQSxDQUFLWSxLQUFLLENBQUNFLDZCQUE2QixDQUFDSixLQUFLLENBQUM7TUFDakQsQ0FBQztNQUFBLE9BQUFWLEtBQUE7SUFBQTtJQUFBLElBQUFlLFVBQUEsYUFBQWpCLGVBQUEsRUFBQUMsVUFBQTtJQUFBLFdBQUFpQixhQUFBLGFBQUFsQixlQUFBO01BQUFtQixHQUFBO01BQUFQLEtBQUEsRUFSRCxTQUFBUSxpQkFBaUJBLENBQUEsRUFBRztRQUNsQixJQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDUCxLQUFLLENBQUM5QixlQUFlLElBQUl0QixNQUFNLENBQUM4QixJQUFJLENBQUMsSUFBSSxDQUFDc0IsS0FBSyxDQUFDL0IsUUFBUSxDQUFDO1FBQ2xGLElBQUksQ0FBQytCLEtBQUssQ0FBQ0MsY0FBYyxDQUFDTSxXQUFXLENBQUM7TUFDeEM7SUFBQztNQUFBRixHQUFBO01BQUFQLEtBQUEsRUFPRCxTQUFBVSxNQUFNQSxDQUFBLEVBQUc7UUFDUCxJQUFBQyxXQUFBLEdBU0ksSUFBSSxDQUFDVCxLQUFLO1VBQUFVLHFCQUFBLEdBQUFELFdBQUEsQ0FSWkUsa0JBQWtCO1VBQWxCQSxrQkFBa0IsR0FBQUQscUJBQUEsY0FBR0UsbUNBQXdCLEdBQUFGLHFCQUFBO1VBQzdDekMsUUFBUSxHQUFBd0MsV0FBQSxDQUFSeEMsUUFBUTtVQUNSQyxlQUFlLEdBQUF1QyxXQUFBLENBQWZ2QyxlQUFlO1VBQ2YyQyxRQUFRLEdBQUFKLFdBQUEsQ0FBUkksUUFBUTtVQUNSMUMsUUFBUSxHQUFBc0MsV0FBQSxDQUFSdEMsUUFBUTtVQUNSMkMsc0JBQXNCLEdBQUFMLFdBQUEsQ0FBdEJLLHNCQUFzQjtVQUN0QkMsc0JBQXNCLEdBQUFOLFdBQUEsQ0FBdEJNLHNCQUFzQjtVQUN0QjNDLElBQUksR0FBQXFDLFdBQUEsQ0FBSnJDLElBQUk7UUFHTixJQUFNNEMsaUJBQWlCLEdBQUc5QyxlQUFlLEdBQUcsQ0FBQ0QsUUFBUSxDQUFDQyxlQUFlLENBQUMsR0FBRyxJQUFJO1FBQzdFLElBQU0rQyx1QkFBdUIsR0FBR3JFLE1BQU0sQ0FBQzhCLElBQUksQ0FBQ1QsUUFBUSxDQUFDLENBQUNpRCxJQUFJLENBQUMsVUFBQUMsU0FBUyxFQUFJO1VBQ3RFLE9BQ0UsQ0FBQ2xELFFBQVEsQ0FBQ2tELFNBQVMsQ0FBQyxDQUFDQyxJQUFJLEtBQUtDLHNCQUFXLENBQUNDLFdBQVcsSUFDbkRyRCxRQUFRLENBQUNrRCxTQUFTLENBQUMsQ0FBQ0MsSUFBSSxLQUFLQyxzQkFBVyxDQUFDRSxXQUFXLE1BQ3JEckQsZUFBZSxLQUFLaUQsU0FBUyxJQUFJSCxpQkFBaUIsQ0FBQztRQUV4RCxDQUFDLENBQUM7UUFFRixvQkFDRXpGLE1BQUEsWUFBQWlHLGFBQUEsQ0FBQzFGLGlCQUFBLENBQUEyRixrQkFBa0I7VUFBQ0MsU0FBUyxFQUFDO1FBQW1CLGdCQUMvQ25HLE1BQUEsWUFBQWlHLGFBQUEsMkJBQ0VqRyxNQUFBLFlBQUFpRyxhQUFBLENBQUMxRixpQkFBQSxDQUFBNkYsbUJBQW1CLHFCQUNsQnBHLE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQWEsZ0JBQzFCbkcsTUFBQSxZQUFBaUcsYUFBQTtVQUFLRSxTQUFTLEVBQUM7UUFBTyxnQkFDcEJuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUFnQyxDQUFFLENBQ3JELENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQVUsZ0JBQ3ZCbkcsTUFBQSxZQUFBaUcsYUFBQSxDQUFDNUYsYUFBQSxDQUFBZ0csZ0JBQWdCO1VBQUNwRCxFQUFFLEVBQUU7UUFBbUMsQ0FBRSxDQUN4RCxDQUNGLENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQVcsZ0JBQ3hCbkcsTUFBQSxZQUFBaUcsYUFBQTtVQUFRMUIsS0FBSyxFQUFFNUIsZUFBZ0I7VUFBQzJELFFBQVEsRUFBRSxJQUFJLENBQUNDO1FBQWlCLEdBQzdELENBQUMxRCxJQUFJLENBQUNHLGFBQWEsQ0FBQztVQUFDQyxFQUFFLEVBQUU7UUFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FDeERtQixNQUFNLENBQUMvQyxNQUFNLENBQUM4QixJQUFJLENBQUNULFFBQVEsQ0FBQyxDQUFDLENBQzdCOEQsR0FBRyxDQUFDLFVBQUFDLENBQUM7VUFBQSxvQkFDSnpHLE1BQUEsWUFBQWlHLGFBQUE7WUFBUW5CLEdBQUcsRUFBRTJCLENBQUU7WUFBQ2xDLEtBQUssRUFBRWtDO1VBQUUsR0FDckIvRCxRQUFRLENBQUMrRCxDQUFDLENBQUMsSUFBSS9ELFFBQVEsQ0FBQytELENBQUMsQ0FBQyxDQUFDQyxLQUFLLElBQUtELENBQ2pDLENBQUM7UUFBQSxDQUNWLENBQ0csQ0FDTCxDQUNjLENBQUMsZUFDdEJ6RyxNQUFBLFlBQUFpRyxhQUFBLENBQUMxRixpQkFBQSxDQUFBNkYsbUJBQW1CLHFCQUNsQnBHLE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQWEsZ0JBQzFCbkcsTUFBQSxZQUFBaUcsYUFBQTtVQUFLRSxTQUFTLEVBQUM7UUFBTyxnQkFDcEJuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUFpQyxDQUFFLENBQ3RELENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQVUsZ0JBQ3ZCbkcsTUFBQSxZQUFBaUcsYUFBQSxDQUFDNUYsYUFBQSxDQUFBZ0csZ0JBQWdCO1VBQUNwRCxFQUFFLEVBQUU7UUFBb0MsQ0FBRSxDQUN6RCxDQUNGLENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQVcsR0FDdkJmLGtCQUFrQixDQUFDb0IsR0FBRyxDQUFDLFVBQUFHLEVBQUU7VUFBQSxvQkFDeEIzRyxNQUFBLFlBQUFpRyxhQUFBLENBQUMxRixpQkFBQSxDQUFBcUcsVUFBVTtZQUNUOUIsR0FBRyxFQUFFNkIsRUFBRSxDQUFDMUQsRUFBRztZQUNYNEQsUUFBUSxFQUFFdkIsUUFBUSxLQUFLcUIsRUFBRSxDQUFDMUQsRUFBRztZQUM3QjZELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2NBQUEsT0FBUUgsRUFBRSxDQUFDSSxTQUFTLElBQUl4QixzQkFBc0IsQ0FBQ29CLEVBQUUsQ0FBQzFELEVBQUUsQ0FBQztZQUFBO1VBQUMsZ0JBRTdEakQsTUFBQSxZQUFBaUcsYUFBQSxDQUFDM0YsTUFBQSxDQUFBMEcsUUFBUTtZQUFDQyxHQUFHLEVBQUVOLEVBQUUsQ0FBQ0QsS0FBTTtZQUFDUSxNQUFNLEVBQUMsTUFBTTtZQUFDQyxRQUFRLEVBQUM7VUFBTSxDQUFFLENBQUMsRUFDeEQ3QixRQUFRLEtBQUtxQixFQUFFLENBQUMxRCxFQUFFLGlCQUFJakQsTUFBQSxZQUFBaUcsYUFBQSxDQUFDMUYsaUJBQUEsQ0FBQTZHLFNBQVMsTUFBRSxDQUN6QixDQUFDO1FBQUEsQ0FDZCxDQUNFLENBQ2MsQ0FBQyxlQUN0QnBILE1BQUEsWUFBQWlHLGFBQUEsQ0FBQzFGLGlCQUFBLENBQUE2RixtQkFBbUIscUJBQ2xCcEcsTUFBQSxZQUFBaUcsYUFBQTtVQUFLRSxTQUFTLEVBQUM7UUFBYSxnQkFDMUJuRyxNQUFBLFlBQUFpRyxhQUFBO1VBQUtFLFNBQVMsRUFBQztRQUFPLGdCQUNwQm5HLE1BQUEsWUFBQWlHLGFBQUEsQ0FBQzVGLGFBQUEsQ0FBQWdHLGdCQUFnQjtVQUFDcEQsRUFBRSxFQUFFO1FBQWlDLENBQUUsQ0FDdEQsQ0FBQyxlQUNOakQsTUFBQSxZQUFBaUcsYUFBQTtVQUFLRSxTQUFTLEVBQUM7UUFBVSxnQkFDdkJuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUFzQyxDQUFFLENBQzNELENBQ0YsQ0FBQyxlQUNOakQsTUFBQSxZQUFBaUcsYUFBQTtVQUFLRSxTQUFTLEVBQUM7UUFBVyxnQkFDeEJuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUMxRixpQkFBQSxDQUFBOEcsb0JBQW9CO1VBQ25CbEIsU0FBUyxFQUFDLG1CQUFtQjtVQUM3QlUsUUFBUSxFQUFFLENBQUNqRSxRQUFTO1VBQ3BCa0UsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRdEIsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1VBQUE7UUFBQyxnQkFFN0N4RixNQUFBLFlBQUFpRyxhQUFBO1VBQUtFLFNBQVMsRUFBQztRQUFxQixnQkFDbENuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUFrQyxDQUFFLENBQ3ZELENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQXdCLEdBQ3BDMUQsZUFBZSxDQUFDQyxRQUFRLEVBQUVDLGVBQWUsRUFBRSxLQUFLLEVBQUVFLElBQUksQ0FDcEQsQ0FBQyxFQUNMLENBQUNELFFBQVEsaUJBQUk1QyxNQUFBLFlBQUFpRyxhQUFBLENBQUMxRixpQkFBQSxDQUFBNkcsU0FBUyxNQUFFLENBQ04sQ0FBQyxlQUN2QnBILE1BQUEsWUFBQWlHLGFBQUEsQ0FBQzFGLGlCQUFBLENBQUE4RyxvQkFBb0I7VUFDbkJsQixTQUFTLEVBQUMsaUJBQWlCO1VBQzNCVSxRQUFRLEVBQUVqRSxRQUFTO1VBQ25Ca0UsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRdEIsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1VBQUE7UUFBQyxnQkFFNUN4RixNQUFBLFlBQUFpRyxhQUFBO1VBQUtFLFNBQVMsRUFBQztRQUFxQixnQkFDbENuRyxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUFnQyxDQUFFLENBQ3JELENBQUMsZUFDTmpELE1BQUEsWUFBQWlHLGFBQUE7VUFBS0UsU0FBUyxFQUFDO1FBQXdCLEdBQ3BDMUQsZUFBZSxDQUFDQyxRQUFRLEVBQUVDLGVBQWUsRUFBRSxJQUFJLEVBQUVFLElBQUksQ0FDbkQsQ0FBQyxFQUNMRCxRQUFRLGlCQUFJNUMsTUFBQSxZQUFBaUcsYUFBQSxDQUFDMUYsaUJBQUEsQ0FBQTZHLFNBQVMsTUFBRSxDQUNMLENBQ25CLENBQ2MsQ0FBQyxFQUNyQjFCLHVCQUF1QixnQkFDdEIxRixNQUFBLFlBQUFpRyxhQUFBO1VBQUtFLFNBQVMsRUFBQztRQUFPLGdCQUNwQm5HLE1BQUEsWUFBQWlHLGFBQUEsQ0FBQ3pGLFdBQUEsQ0FBQThHLGFBQWEscUJBQ1p0SCxNQUFBLFlBQUFpRyxhQUFBLENBQUM1RixhQUFBLENBQUFnRyxnQkFBZ0I7VUFBQ3BELEVBQUUsRUFBRTtRQUF1QyxDQUFFLENBQ2xELENBQ1osQ0FBQyxHQUNKLElBQ0QsQ0FDYSxDQUFDO01BRXpCO0lBQUM7RUFBQSxFQTlIMkJzRSxnQkFBUztFQWlJdkMsT0FBTyxJQUFBQyxxQkFBVSxFQUFDN0QsZUFBZSxDQUFDO0FBQ3BDLENBQUM7QUFBQyxJQUFBOEQsUUFBQSxHQUFBQyxPQUFBLGNBRWFoRSxzQkFBc0IiLCJpZ25vcmVMaXN0IjpbXX0=