kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
389 lines (339 loc) • 42.1 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.toggleSidePanelCloseButton = exports.toggleSidePanel = exports.togglePanelListView = exports.toggleModal = exports.toggleMapControl = exports.startExportingImage = exports.showExportDropdown = exports.setUserMapboxAccessToken = exports.setMapControlVisibility = exports.setMapControlSettings = exports.setLocale = exports.setLoadingIndicator = exports.setExportSelectedDataset = exports.setExportMapFormat = exports.setExportImageSetting = exports.setExportImageError = exports.setExportImageDataUri = exports.setExportHTMLMapMode = exports.setExportFiltered = exports.setExportDataType = exports.setExportData = exports.removeNotification = exports.openDeleteModal = exports.hideExportDropdown = exports.cleanupExportImage = exports.addNotification = void 0;
var _toolkit = require("@reduxjs/toolkit");
var _actionTypes = _interopRequireDefault(require("./action-types"));
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/** TOGGLE_SIDE_PANEL */
/**
* Toggle active side panel
* @memberof uiStateActions
* @param id id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`
* @public
*/
var toggleSidePanel = exports.toggleSidePanel = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_SIDE_PANEL, function (id) {
return {
payload: id
};
});
/** TOGGLE_MODAL */
/**
* Show and hide modal dialog
* @memberof uiStateActions
* @param id - id of modal to be shown, null to hide modals. One of:
* - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
* - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
* - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
* - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
* - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
* - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
* @public
*/
var toggleModal = exports.toggleModal = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_MODAL, function (id) {
return {
payload: id
};
});
/** SHOW_EXPORT_DROPDOWN */
/**
* Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
* @memberof uiStateActions
* @param id - id of the dropdown
* @public
*/
var showExportDropdown = exports.showExportDropdown = (0, _toolkit.createAction)(_actionTypes["default"].SHOW_EXPORT_DROPDOWN, function (id) {
return {
payload: id
};
});
/**
* Hide side panel header dropdown, activated by clicking the share link on top of the side panel
* @memberof uiStateActions
* @public
*/
var hideExportDropdown = exports.hideExportDropdown = (0, _toolkit.createAction)(_actionTypes["default"].HIDE_EXPORT_DROPDOWN);
/** TOGGLE_SIDE_PANEL_CLOSE_BUTTON*/
/**
* Toggle side panel close button
* @memberof uiStateActions
* @param show - if side panel button visible
* @public
*/
var toggleSidePanelCloseButton = exports.toggleSidePanelCloseButton = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_SIDE_PANEL_CLOSE_BUTTON, function (show) {
return {
payload: {
show: show
}
};
});
/** TOGGLE_MAP_CONTROL */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var toggleMapControl = exports.toggleMapControl = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_MAP_CONTROL, function (panelId, index) {
return {
payload: {
panelId: panelId,
index: index
}
};
});
/** SET_MAP_CONTROL_VISIBILITY */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var setMapControlVisibility = exports.setMapControlVisibility = (0, _toolkit.createAction)(_actionTypes["default"].SET_MAP_CONTROL_VISIBILITY, function (panelId, show) {
return {
payload: {
panelId: panelId,
show: show
}
};
});
/** SET_MAP_CONTROL_SETTINGS */
/**
* Set map control settings
* @memberof uiStateActions
* @param panelId - map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
* @public
*/
var setMapControlSettings = exports.setMapControlSettings = (0, _toolkit.createAction)(_actionTypes["default"].SET_MAP_CONTROL_SETTINGS, function (panelId, settings) {
return {
payload: {
panelId: panelId,
settings: settings
}
};
});
/** OPEN_DELETE_MODAL */
/**
* Toggle active map control panel
* @memberof uiStateActions
* @param datasetId - `id` of the dataset to be deleted
* @public
*/
var openDeleteModal = exports.openDeleteModal = (0, _toolkit.createAction)(_actionTypes["default"].OPEN_DELETE_MODAL, function (datasetId) {
return {
payload: datasetId
};
});
/** ADD_NOTIFICATION */
/**
* Add a notification to be displayed.
* Existing notification will be updated in case of matching id.
* @memberof uiStateActions
* @param notification - The `notification` object to be added or updated
* @public
*/
var addNotification = exports.addNotification = (0, _toolkit.createAction)(_actionTypes["default"].ADD_NOTIFICATION, function (notification) {
return {
payload: notification
};
});
/** REMOVE_NOTIFICATION */
/**
* Remove a notification
* @memberof uiStateActions
* @param id - `id` of the notification to be removed
* @public
*/
var removeNotification = exports.removeNotification = (0, _toolkit.createAction)(_actionTypes["default"].REMOVE_NOTIFICATION, function (id) {
return {
payload: id
};
});
/** SET_EXPORT_IMAGE_SETTING */
/**
* Set `exportImage` settings: ratio, resolution, legend
* @memberof uiStateActions
* @param newSetting - {ratio: '1x'}
* @public
*/
var setExportImageSetting = exports.setExportImageSetting = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_SETTING, function (newSetting) {
return {
payload: newSetting
};
});
/**
* Start exporting image flow
* @memberof uiStateActions
* @public
*/
var startExportingImage = exports.startExportingImage = (0, _toolkit.createAction)(_actionTypes["default"].START_EXPORTING_IMAGE, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_IMAGE_DATA_URI */
/**
* Set `exportImage.setExportImageDataUri` to a dataUri
* @memberof uiStateActions
* @param dataUri - export image data uri
* @public
*/
var setExportImageDataUri = exports.setExportImageDataUri = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_DATA_URI, function (dataUri) {
return {
payload: dataUri
};
});
/** SET_EXPORT_IMAGE_ERROR */
/**
* Set Export image error
* @memberof uiStateActions
* @public
*/
var setExportImageError = exports.setExportImageError = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_IMAGE_ERROR, function (error) {
return {
payload: error
};
});
/**
* Delete cached export image
* @memberof uiStateActions
* @public
*/
var cleanupExportImage = exports.cleanupExportImage = (0, _toolkit.createAction)(_actionTypes["default"].CLEANUP_EXPORT_IMAGE);
/** SET_EXPORT_SELECTED_DATASET */
/**
* Set selected dataset for export
* @memberof uiStateActions
* @param datasetId - dataset id
* @public
*/
var setExportSelectedDataset = exports.setExportSelectedDataset = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_SELECTED_DATASET, function (datasetId) {
return {
payload: datasetId
};
});
/** SET_EXPORT_DATA_TYPE */
/**
* Set data format for exporting data
* @memberof uiStateActions
* @param dataType - one of `'text/csv'`
* @public
*/
var setExportDataType = exports.setExportDataType = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_DATA_TYPE, function (dataType) {
return {
payload: dataType
};
});
/** SET_EXPORT_FILTERED */
/**
* Whether to export filtered data, `true` or `false`
* @memberof uiStateActions
* @param payload - set `true` to ony export filtered data
* @public
*/
var setExportFiltered = exports.setExportFiltered = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_FILTERED, function (payload) {
return {
payload: payload
};
});
/**
* Whether to including data in map config, toggle between `true` or `false`
* @memberof uiStateActions
* @public
*/
var setExportData = exports.setExportData = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_DATA);
/** SET_USER_MAPBOX_ACCESS_TOKEN */
/**
* Whether we export a mapbox access token used to create a single map html file
* @memberof uiStateActions
* @param payload - mapbox access token
* @public
*/
var setUserMapboxAccessToken = exports.setUserMapboxAccessToken = (0, _toolkit.createAction)(_actionTypes["default"].SET_USER_MAPBOX_ACCESS_TOKEN, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_MAP_FORMAT */
/**
* Set the export map format (html, json)
* @memberOf uiStateActions
* @param payload - map format
* @public
*/
var setExportMapFormat = exports.setExportMapFormat = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_MAP_FORMAT, function (payload) {
return {
payload: payload
};
});
/** SET_EXPORT_MAP_HTML_MODE */
/**
* Set the HTML mode to use to export HTML mode
* @memberOf uiStateActions
* @param payload - map mode
*/
var setExportHTMLMapMode = exports.setExportHTMLMapMode = (0, _toolkit.createAction)(_actionTypes["default"].SET_EXPORT_MAP_HTML_MODE, function (payload) {
return {
payload: payload
};
});
/** SET_LOCALE */
/**
* Set `locale` value
* @memberof uiStateActions
* @param locale - locale of the UI
* @public
*/
var setLocale = exports.setLocale = (0, _toolkit.createAction)(_actionTypes["default"].SET_LOCALE, function (locale) {
return {
payload: {
locale: locale
}
};
});
/** TOGGLE_PANEL_LIST_VIEW */
/**
* Toggle layer panel list view
* @memberof uiStateActions
* @param payload
* @param payload.panelId panel id.
* @param payload.listView layer panel listView value. Can be 'list' or 'sortByDataset'
* @public
*/
var togglePanelListView = exports.togglePanelListView = (0, _toolkit.createAction)(_actionTypes["default"].TOGGLE_PANEL_LIST_VIEW, function (payload) {
return {
payload: payload
};
});
/**
* This declaration is needed to group actions in docs
*/
/**
* Actions handled mostly by `uiState` reducer.
* They manage UI changes in tha app, such as open and close side panel,
* switch between tabs in the side panel, open and close modal dialog for exporting data / images etc.
* It also manges which settings are selected during image and map export
*
* @public
*/
/* eslint-disable @typescript-eslint/no-unused-vars */
// @ts-ignore
var uiStateActions = null;
/* eslint-enable @typescript-eslint/no-unused-vars */
/** SET_LOADING_INDICATOR */
/**
* Change of number of active loading actions.
* @memberof uiStateActions
* @param payload
* @param payload.change Change of number of active loading actions.
* @public
*/
var setLoadingIndicator = exports.setLoadingIndicator = (0, _toolkit.createAction)(_actionTypes["default"].SET_LOADING_INDICATOR, function (payload) {
return {
payload: payload
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9vbGtpdCIsInJlcXVpcmUiLCJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwidG9nZ2xlU2lkZVBhbmVsIiwiZXhwb3J0cyIsImNyZWF0ZUFjdGlvbiIsIkFjdGlvblR5cGVzIiwiVE9HR0xFX1NJREVfUEFORUwiLCJpZCIsInBheWxvYWQiLCJ0b2dnbGVNb2RhbCIsIlRPR0dMRV9NT0RBTCIsInNob3dFeHBvcnREcm9wZG93biIsIlNIT1dfRVhQT1JUX0RST1BET1dOIiwiaGlkZUV4cG9ydERyb3Bkb3duIiwiSElERV9FWFBPUlRfRFJPUERPV04iLCJ0b2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvbiIsIlRPR0dMRV9TSURFX1BBTkVMX0NMT1NFX0JVVFRPTiIsInNob3ciLCJ0b2dnbGVNYXBDb250cm9sIiwiVE9HR0xFX01BUF9DT05UUk9MIiwicGFuZWxJZCIsImluZGV4Iiwic2V0TWFwQ29udHJvbFZpc2liaWxpdHkiLCJTRVRfTUFQX0NPTlRST0xfVklTSUJJTElUWSIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIlNFVF9NQVBfQ09OVFJPTF9TRVRUSU5HUyIsInNldHRpbmdzIiwib3BlbkRlbGV0ZU1vZGFsIiwiT1BFTl9ERUxFVEVfTU9EQUwiLCJkYXRhc2V0SWQiLCJhZGROb3RpZmljYXRpb24iLCJBRERfTk9USUZJQ0FUSU9OIiwibm90aWZpY2F0aW9uIiwicmVtb3ZlTm90aWZpY2F0aW9uIiwiUkVNT1ZFX05PVElGSUNBVElPTiIsInNldEV4cG9ydEltYWdlU2V0dGluZyIsIlNFVF9FWFBPUlRfSU1BR0VfU0VUVElORyIsIm5ld1NldHRpbmciLCJzdGFydEV4cG9ydGluZ0ltYWdlIiwiU1RBUlRfRVhQT1JUSU5HX0lNQUdFIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpIiwiU0VUX0VYUE9SVF9JTUFHRV9EQVRBX1VSSSIsImRhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwiU0VUX0VYUE9SVF9JTUFHRV9FUlJPUiIsImVycm9yIiwiY2xlYW51cEV4cG9ydEltYWdlIiwiQ0xFQU5VUF9FWFBPUlRfSU1BR0UiLCJzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXQiLCJTRVRfRVhQT1JUX1NFTEVDVEVEX0RBVEFTRVQiLCJzZXRFeHBvcnREYXRhVHlwZSIsIlNFVF9FWFBPUlRfREFUQV9UWVBFIiwiZGF0YVR5cGUiLCJzZXRFeHBvcnRGaWx0ZXJlZCIsIlNFVF9FWFBPUlRfRklMVEVSRUQiLCJzZXRFeHBvcnREYXRhIiwiU0VUX0VYUE9SVF9EQVRBIiwic2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuIiwiU0VUX1VTRVJfTUFQQk9YX0FDQ0VTU19UT0tFTiIsInNldEV4cG9ydE1hcEZvcm1hdCIsIlNFVF9FWFBPUlRfTUFQX0ZPUk1BVCIsInNldEV4cG9ydEhUTUxNYXBNb2RlIiwiU0VUX0VYUE9SVF9NQVBfSFRNTF9NT0RFIiwic2V0TG9jYWxlIiwiU0VUX0xPQ0FMRSIsImxvY2FsZSIsInRvZ2dsZVBhbmVsTGlzdFZpZXciLCJUT0dHTEVfUEFORUxfTElTVF9WSUVXIiwidWlTdGF0ZUFjdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiU0VUX0xPQURJTkdfSU5ESUNBVE9SIl0sInNvdXJjZXMiOlsiLi4vc3JjL3VpLXN0YXRlLWFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtjcmVhdGVBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEFjdGlvblR5cGVzfSBmcm9tICcuL2FjdGlvbi10eXBlcyc7XG5pbXBvcnQge01lcmdlfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7RXhwb3J0SW1hZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuLyoqIFRPR0dMRV9TSURFX1BBTkVMICovXG5leHBvcnQgdHlwZSBUb2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZCAgaWQgb2Ygc2lkZSBwYW5lbCB0byBiZSBzaG93biwgb25lIG9mIGBsYXllcmAsIGBmaWx0ZXJgLCBgaW50ZXJhY3Rpb25gLCBgbWFwYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsOiAoXG4gIGlkOiBUb2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8VG9nZ2xlU2lkZVBhbmVsVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfU0lERV9QQU5FTH0+ID1cbiAgY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLlRPR0dMRV9TSURFX1BBTkVMLCAoaWQ6IHN0cmluZyB8IG51bGwpID0+ICh7cGF5bG9hZDogaWR9KSk7XG5cbi8qKiBUT0dHTEVfTU9EQUwgKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nIHwgbnVsbDtcbn07XG4vKipcbiAqIFNob3cgYW5kIGhpZGUgbW9kYWwgZGlhbG9nXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZCAtIGlkIG9mIG1vZGFsIHRvIGJlIHNob3duLCBudWxsIHRvIGhpZGUgbW9kYWxzLiBPbmUgb2Y6XG4gKiAgLSBbYERBVEFfVEFCTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkYXRhX3RhYmxlX2lkKVxuICogIC0gW2BERUxFVEVfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RlbGV0ZV9kYXRhX2lkKVxuICogIC0gW2BBRERfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9kYXRhX2lkKVxuICogIC0gW2BFWFBPUlRfSU1BR0VfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfaW1hZ2VfaWQpXG4gKiAgLSBbYEVYUE9SVF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2RhdGFfaWQpXG4gKiAgLSBbYEFERF9NQVBfU1RZTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfbWFwX3N0eWxlX2lkKVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTW9kYWw6IChcbiAgaWQ6IFRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfTU9EQUx9PiA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuVE9HR0xFX01PREFMLFxuICAoaWQ6IFRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe1xuICAgIHBheWxvYWQ6IGlkXG4gIH0pXG4pO1xuXG4vKiogU0hPV19FWFBPUlRfRFJPUERPV04gKi9cbmV4cG9ydCB0eXBlIFNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIEhpZGUgYW5kIHNob3cgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkIC0gaWQgb2YgdGhlIGRyb3Bkb3duXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RXhwb3J0RHJvcGRvd246IChcbiAgaWQ6IFNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxTaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNIT1dfRVhQT1JUX0RST1BET1dOfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0hPV19FWFBPUlRfRFJPUERPV04sXG4gICAgKGlkOiBTaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZDogaWR9KVxuICApO1xuXG4vKipcbiAqIEhpZGUgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaGlkZUV4cG9ydERyb3Bkb3duOiAoKSA9PiB7XG4gIHR5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5ISURFX0VYUE9SVF9EUk9QRE9XTjtcbn0gPSBjcmVhdGVBY3Rpb24oQWN0aW9uVHlwZXMuSElERV9FWFBPUlRfRFJPUERPV04pO1xuXG4vKiogVE9HR0xFX1NJREVfUEFORUxfQ0xPU0VfQlVUVE9OKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDoge1xuICAgIHNob3c6IGJvb2xlYW47XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBzaWRlIHBhbmVsIGNsb3NlIGJ1dHRvblxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gc2hvdyAtIGlmIHNpZGUgcGFuZWwgYnV0dG9uIHZpc2libGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uOiAoXG4gIHNob3c6IGJvb2xlYW5cbikgPT4gTWVyZ2U8XG4gIFRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfU0lERV9QQU5FTF9DTE9TRV9CVVRUT059XG4+ID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLlRPR0dMRV9TSURFX1BBTkVMX0NMT1NFX0JVVFRPTiwgc2hvdyA9PiAoe3BheWxvYWQ6IHtzaG93fX0pKTtcblxuLyoqIFRPR0dMRV9NQVBfQ09OVFJPTCAqL1xuZXhwb3J0IHR5cGUgVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtcbiAgICBwYW5lbElkOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgfTtcbn07XG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBhbmVsSWQgLSBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTWFwQ29udHJvbDogKFxuICBwYW5lbElkOiBUb2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblsncGF5bG9hZCddWydwYW5lbElkJ10sXG4gIGluZGV4OiBUb2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblsncGF5bG9hZCddWydpbmRleCddXG4pID0+IE1lcmdlPFRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9NQVBfQ09OVFJPTH0+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLlRPR0dMRV9NQVBfQ09OVFJPTCxcbiAgICAoXG4gICAgICBwYW5lbElkOiBUb2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblsncGF5bG9hZCddWydwYW5lbElkJ10sXG4gICAgICBpbmRleDogVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsnaW5kZXgnXVxuICAgICkgPT4gKHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgcGFuZWxJZCxcbiAgICAgICAgaW5kZXhcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4vKiogU0VUX01BUF9DT05UUk9MX1ZJU0lCSUxJVFkgKi9cbmV4cG9ydCB0eXBlIHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDoge1xuICAgIHBhbmVsSWQ6IHN0cmluZztcbiAgICBzaG93OiBib29sZWFuO1xuICB9O1xufTtcbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGFuZWxJZCAtIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sVmlzaWJpbGl0eTogKFxuICBwYW5lbElkOiBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsncGFuZWxJZCddLFxuICBzaG93OiBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVsnc2hvdyddXG4pID0+IE1lcmdlPFxuICBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX01BUF9DT05UUk9MX1ZJU0lCSUxJVFl9XG4+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfTUFQX0NPTlRST0xfVklTSUJJTElUWSxcbiAgKFxuICAgIHBhbmVsSWQ6IHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblsncGF5bG9hZCddWydwYW5lbElkJ10sXG4gICAgc2hvdzogc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ3Nob3cnXVxuICApID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgcGFuZWxJZCxcbiAgICAgIHNob3dcbiAgICB9XG4gIH0pXG4pO1xuXG4vKiogU0VUX01BUF9DT05UUk9MX1NFVFRJTkdTICovXG5leHBvcnQgdHlwZSBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgcGFuZWxJZDogc3RyaW5nO1xuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCBjb250cm9sIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYW5lbElkIC0gbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcENvbnRyb2xTZXR0aW5nczogKFxuICBwYW5lbElkOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKSA9PiBNZXJnZTxcbiAgc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0NPTlRST0xfU0VUVElOR1N9XG4+ID0gY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLlNFVF9NQVBfQ09OVFJPTF9TRVRUSU5HUywgKHBhbmVsSWQsIHNldHRpbmdzKSA9PiAoe1xuICBwYXlsb2FkOiB7cGFuZWxJZCwgc2V0dGluZ3N9XG59KSk7XG5cbi8qKiBPUEVOX0RFTEVURV9NT0RBTCAqL1xuZXhwb3J0IHR5cGUgT3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YXNldElkIC0gYGlkYCBvZiB0aGUgZGF0YXNldCB0byBiZSBkZWxldGVkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuRGVsZXRlTW9kYWw6IChcbiAgZGF0YXNldElkOiBPcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8T3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5PUEVOX0RFTEVURV9NT0RBTH0+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLk9QRU5fREVMRVRFX01PREFMLFxuICAgIChkYXRhc2V0SWQ6IE9wZW5EZWxldGVNb2RhbFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBkYXRhc2V0SWR9KVxuICApO1xuXG4vKiogQUREX05PVElGSUNBVElPTiAqL1xuZXhwb3J0IHR5cGUgQWRkTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogb2JqZWN0O1xufTtcbi8qKlxuICogQWRkIGEgbm90aWZpY2F0aW9uIHRvIGJlIGRpc3BsYXllZC5cbiAqIEV4aXN0aW5nIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gY2FzZSBvZiBtYXRjaGluZyBpZC5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIFRoZSBgbm90aWZpY2F0aW9uYCBvYmplY3QgdG8gYmUgYWRkZWQgb3IgdXBkYXRlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTm90aWZpY2F0aW9uOiAobm90aWZpY2F0aW9uOiBBZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+IE1lcmdlPFxuICBBZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7XG4gICAgdHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9OT1RJRklDQVRJT047XG4gIH1cbj4gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLkFERF9OT1RJRklDQVRJT04sXG4gIChub3RpZmljYXRpb246IEFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBub3RpZmljYXRpb259KVxuKTtcblxuLyoqIFJFTU9WRV9OT1RJRklDQVRJT04gKi9cbmV4cG9ydCB0eXBlIFJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFJlbW92ZSBhIG5vdGlmaWNhdGlvblxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWQgLSBgaWRgIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgcmVtb3ZlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTm90aWZpY2F0aW9uOiAoXG4gIGlkOiBSZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8UmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfTk9USUZJQ0FUSU9OfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuUkVNT1ZFX05PVElGSUNBVElPTixcbiAgICAoaWQ6IFJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBpZH0pXG4gICk7XG5cbi8qKiBTRVRfRVhQT1JUX0lNQUdFX1NFVFRJTkcgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+O1xufTtcbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZWAgc2V0dGluZ3M6IHJhdGlvLCByZXNvbHV0aW9uLCBsZWdlbmRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIG5ld1NldHRpbmcgLSB7cmF0aW86ICcxeCd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZVNldHRpbmc6IChcbiAgbmV3U2V0dGluZzogU2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFxuICBTZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfSU1BR0VfU0VUVElOR31cbj4gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfSU1BR0VfU0VUVElORyxcbiAgKG5ld1NldHRpbmc6IFNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBuZXdTZXR0aW5nfSlcbik7XG5cbi8qKlxuICogU3RhcnQgZXhwb3J0aW5nIGltYWdlIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZTogKG9wdGlvbnM/OiB7XG4gIHJhdGlvPzogc3RyaW5nO1xuICByZXNvbHV0aW9uPzogc3RyaW5nO1xuICBsZWdlbmQ/OiBzdHJpbmc7XG4gIGNlbnRlcj86IGJvb2xlYW47XG59KSA9PiBNZXJnZTxTZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNUQVJUX0VYUE9SVElOR19JTUFHRX0+ID1cbiAgY3JlYXRlQWN0aW9uKEFjdGlvblR5cGVzLlNUQVJUX0VYUE9SVElOR19JTUFHRSwgKHBheWxvYWQ6IGFueSkgPT4gKHtwYXlsb2FkfSkpO1xuXG4vKiogU0VUX0VYUE9SVF9JTUFHRV9EQVRBX1VSSSAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5zZXRFeHBvcnRJbWFnZURhdGFVcmlgIHRvIGEgZGF0YVVyaVxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YVVyaSAtIGV4cG9ydCBpbWFnZSBkYXRhIHVyaVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpOiAoXG4gIGRhdGFVcmk6IFNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxcbiAgU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0lNQUdFX0RBVEFfVVJJfVxuPiA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9JTUFHRV9EQVRBX1VSSSxcbiAgKGRhdGFVcmk6IFNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBkYXRhVXJpfSlcbik7XG5cbi8qKiBTRVRfRVhQT1JUX0lNQUdFX0VSUk9SICovXG5leHBvcnQgdHlwZSBTZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogRXJyb3I7XG59O1xuLyoqXG4gKiBTZXQgRXhwb3J0IGltYWdlIGVycm9yXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3I6IChcbiAgZXJyb3I6IFNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8U2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9JTUFHRV9FUlJPUn0+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfSU1BR0VfRVJST1IsXG4gICAgKGVycm9yOiBTZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlckFjdGlvblsncGF5bG9hZCddKSA9PiAoe3BheWxvYWQ6IGVycm9yfSlcbiAgKTtcblxuLyoqXG4gKiBEZWxldGUgY2FjaGVkIGV4cG9ydCBpbWFnZVxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhbnVwRXhwb3J0SW1hZ2U6ICgpID0+IHtcbiAgdHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkNMRUFOVVBfRVhQT1JUX0lNQUdFO1xufSA9IGNyZWF0ZUFjdGlvbihBY3Rpb25UeXBlcy5DTEVBTlVQX0VYUE9SVF9JTUFHRSk7XG5cbi8qKiBTRVRfRVhQT1JUX1NFTEVDVEVEX0RBVEFTRVQgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRJZCAtIGRhdGFzZXQgaWRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldDogKFxuICBkYXRhc2V0SWQ6IFNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxcbiAgU2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX1NFTEVDVEVEX0RBVEFTRVR9XG4+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX1NFTEVDVEVEX0RBVEFTRVQsXG4gIChkYXRhc2V0SWQ6IFNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkOiBkYXRhc2V0SWR9KVxuKTtcblxuLyoqIFNFVF9FWFBPUlRfREFUQV9UWVBFICovXG5leHBvcnQgdHlwZSBTZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFNldCBkYXRhIGZvcm1hdCBmb3IgZXhwb3J0aW5nIGRhdGFcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFUeXBlIC0gb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YVR5cGU6IChcbiAgZGF0YVR5cGU6IFNldEV4cG9ydERhdGFUeXBlVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFNldEV4cG9ydERhdGFUeXBlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0RBVEFfVFlQRX0+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfREFUQV9UWVBFLFxuICAgIChkYXRhVHlwZTogU2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZDogZGF0YVR5cGV9KVxuICApO1xuXG4vKiogU0VUX0VYUE9SVF9GSUxURVJFRCAqL1xuZXhwb3J0IHR5cGUgU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiBib29sZWFuO1xufTtcbi8qKlxuICogV2hldGhlciB0byBleHBvcnQgZmlsdGVyZWQgZGF0YSwgYHRydWVgIG9yIGBmYWxzZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWQgLSBzZXQgYHRydWVgIHRvIG9ueSBleHBvcnQgZmlsdGVyZWQgZGF0YVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWQ6IChcbiAgZXhwb3J0RmlsdGVyZWQ6IFNldEV4cG9ydEZpbHRlcmVkVXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFNldEV4cG9ydEZpbHRlcmVkVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRVhQT1JUX0ZJTFRFUkVEfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9GSUxURVJFRCxcbiAgICAocGF5bG9hZDogU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZH0pXG4gICk7XG5cbi8qKlxuICogV2hldGhlciB0byBpbmNsdWRpbmcgZGF0YSBpbiBtYXAgY29uZmlnLCB0b2dnbGUgYmV0d2VlbiBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhOiAoKSA9PiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfREFUQX0gPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfREFUQVxuKTtcblxuLyoqIFNFVF9VU0VSX01BUEJPWF9BQ0NFU1NfVE9LRU4gKi9cbmV4cG9ydCB0eXBlIFNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFdoZXRoZXIgd2UgZXhwb3J0IGEgbWFwYm94IGFjY2VzcyB0b2tlbiB1c2VkIHRvIGNyZWF0ZSBhIHNpbmdsZSBtYXAgaHRtbCBmaWxlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gbWFwYm94IGFjY2VzcyB0b2tlblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuOiAoXG4gIHBheWxvYWQ6IFNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXVxuKSA9PiBNZXJnZTxcbiAgU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfVVNFUl9NQVBCT1hfQUNDRVNTX1RPS0VOfVxuPiA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuU0VUX1VTRVJfTUFQQk9YX0FDQ0VTU19UT0tFTixcbiAgKHBheWxvYWQ6IFNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXJBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkfSlcbik7XG5cbi8qKiBTRVRfRVhQT1JUX01BUF9GT1JNQVQgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHN0cmluZztcbn07XG4vKipcbiAqIFNldCB0aGUgZXhwb3J0IG1hcCBmb3JtYXQgKGh0bWwsIGpzb24pXG4gKiBAbWVtYmVyT2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gbWFwIGZvcm1hdFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwRm9ybWF0OiAoXG4gIG1hcEZvcm1hdDogU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9NQVBfRk9STUFUfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0VYUE9SVF9NQVBfRk9STUFULFxuICAgIChwYXlsb2FkOiBTZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZH0pXG4gICk7XG5cbi8qKiBTRVRfRVhQT1JUX01BUF9IVE1MX01PREUgKi9cbmV4cG9ydCB0eXBlIFNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvbiA9IHtcbiAgcGF5bG9hZDogc3RyaW5nO1xufTtcbi8qKlxuICogU2V0IHRoZSBIVE1MIG1vZGUgdG8gdXNlIHRvIGV4cG9ydCBIVE1MIG1vZGVcbiAqIEBtZW1iZXJPZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWQgLSBtYXAgbW9kZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SFRNTE1hcE1vZGU6IChcbiAgbW9kZTogU2V0RXhwb3J0SFRNTE1hcE1vZGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbikgPT4gTWVyZ2U8U2V0RXhwb3J0SFRNTE1hcE1vZGVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfTUFQX0hUTUxfTU9ERX0+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLlNFVF9FWFBPUlRfTUFQX0hUTUxfTU9ERSxcbiAgICAocGF5bG9hZDogU2V0RXhwb3J0SFRNTE1hcE1vZGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZH0pXG4gICk7XG5cbi8qKiBTRVRfTE9DQUxFICovXG5leHBvcnQgdHlwZSBTZXRMb2NhbGVVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7bG9jYWxlOiBzdHJpbmd9O1xufTtcbi8qKlxuICogU2V0IGBsb2NhbGVgIHZhbHVlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsb2NhbGUgLSBsb2NhbGUgb2YgdGhlIFVJXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2NhbGU6IChcbiAgbG9jYWxlOiBTZXRMb2NhbGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ2xvY2FsZSddXG4pID0+IE1lcmdlPFNldExvY2FsZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0xPQ0FMRX0+ID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfTE9DQUxFLFxuICAobG9jYWxlOiBTZXRMb2NhbGVVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11bJ2xvY2FsZSddKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIGxvY2FsZVxuICAgIH1cbiAgfSlcbik7XG5cbi8qKiBUT0dHTEVfUEFORUxfTElTVF9WSUVXICovXG5leHBvcnQgdHlwZSBUb2dnbGVQYW5lbExpc3RWaWV3QWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgcGFuZWxJZDogc3RyaW5nO1xuICAgIGxpc3RWaWV3OiBzdHJpbmc7XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBsYXllciBwYW5lbCBsaXN0IHZpZXdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlQWN0aW9uc1xuICogQHBhcmFtIHBheWxvYWRcbiAqIEBwYXJhbSBwYXlsb2FkLnBhbmVsSWQgcGFuZWwgaWQuXG4gKiBAcGFyYW0gcGF5bG9hZC5saXN0VmlldyBsYXllciBwYW5lbCBsaXN0VmlldyB2YWx1ZS4gQ2FuIGJlICdsaXN0JyBvciAnc29ydEJ5RGF0YXNldCdcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVBhbmVsTGlzdFZpZXc6IChcbiAgcGF5bG9hZDogVG9nZ2xlUGFuZWxMaXN0Vmlld0FjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX1BBTkVMX0xJU1RfVklFV30+ID1cbiAgY3JlYXRlQWN0aW9uKFxuICAgIEFjdGlvblR5cGVzLlRPR0dMRV9QQU5FTF9MSVNUX1ZJRVcsXG4gICAgKHBheWxvYWQ6IFRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb25bJ3BheWxvYWQnXSkgPT4gKHtwYXlsb2FkfSlcbiAgKTtcblxuLyoqXG4gKiBUaGlzIGRlY2xhcmF0aW9uIGlzIG5lZWRlZCB0byBncm91cCBhY3Rpb25zIGluIGRvY3NcbiAqL1xuLyoqXG4gKiBBY3Rpb25zIGhhbmRsZWQgbW9zdGx5IGJ5ICBgdWlTdGF0ZWAgcmVkdWNlci5cbiAqIFRoZXkgbWFuYWdlIFVJIGNoYW5nZXMgaW4gdGhhIGFwcCwgc3VjaCBhcyBvcGVuIGFuZCBjbG9zZSBzaWRlIHBhbmVsLFxuICogc3dpdGNoIGJldHdlZW4gdGFicyBpbiB0aGUgc2lkZSBwYW5lbCwgb3BlbiBhbmQgY2xvc2UgbW9kYWwgZGlhbG9nIGZvciBleHBvcnRpbmcgZGF0YSAvIGltYWdlcyBldGMuXG4gKiBJdCBhbHNvIG1hbmdlcyB3aGljaCBzZXR0aW5ncyBhcmUgc2VsZWN0ZWQgZHVyaW5nIGltYWdlIGFuZCBtYXAgZXhwb3J0XG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHVpU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbi8qKiBTRVRfTE9BRElOR19JTkRJQ0FUT1IgKi9cbmV4cG9ydCB0eXBlIFNldExvYWRpbmdJbmRpY2F0b3JBY3Rpb24gPSB7XG4gIHBheWxvYWQ6IHtcbiAgICBjaGFuZ2U6IG51bWJlcjtcbiAgfTtcbn07XG5cbi8qKlxuICogQ2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQG1lbWJlcm9mIHVpU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQuY2hhbmdlIENoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3I6IChcbiAgcGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvckFjdGlvblsncGF5bG9hZCddXG4pID0+IE1lcmdlPFNldExvYWRpbmdJbmRpY2F0b3JBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0xPQURJTkdfSU5ESUNBVE9SfT4gPVxuICBjcmVhdGVBY3Rpb24oXG4gICAgQWN0aW9uVHlwZXMuU0VUX0xPQURJTkdfSU5ESUNBVE9SLFxuICAgIChwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yQWN0aW9uWydwYXlsb2FkJ10pID0+ICh7cGF5bG9hZH0pXG4gICk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFKQTtBQUNBOztBQU9BOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1HLGVBRXlFLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSxHQUNwRixJQUFBRSxxQkFBWSxFQUFDQyx1QkFBVyxDQUFDQyxpQkFBaUIsRUFBRSxVQUFDQyxFQUFpQjtFQUFBLE9BQU07SUFBQ0MsT0FBTyxFQUFFRDtFQUFFLENBQUM7QUFBQSxDQUFDLENBQUM7O0FBRXJGOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1FLFdBRWdFLEdBQUFOLE9BQUEsQ0FBQU0sV0FBQSxHQUFHLElBQUFMLHFCQUFZLEVBQzFGQyx1QkFBVyxDQUFDSyxZQUFZLEVBQ3hCLFVBQUNILEVBQXVDO0VBQUEsT0FBTTtJQUM1Q0MsT0FBTyxFQUFFRDtFQUNYLENBQUM7QUFBQSxDQUNILENBQUM7O0FBRUQ7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUksa0JBRStFLEdBQUFSLE9BQUEsQ0FBQVEsa0JBQUEsR0FDMUYsSUFBQVAscUJBQVksRUFDVkMsdUJBQVcsQ0FBQ08sb0JBQW9CLEVBQ2hDLFVBQUNMLEVBQThDO0VBQUEsT0FBTTtJQUFDQyxPQUFPLEVBQUVEO0VBQUUsQ0FBQztBQUFBLENBQ3BFLENBQUM7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1NLGtCQUVaLEdBQUFWLE9BQUEsQ0FBQVUsa0JBQUEsR0FBRyxJQUFBVCxxQkFBWSxFQUFDQyx1QkFBVyxDQUFDUyxvQkFBb0IsQ0FBQzs7QUFFbEQ7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsMEJBS1osR0FBQVosT0FBQSxDQUFBWSwwQkFBQSxHQUFHLElBQUFYLHFCQUFZLEVBQUNDLHVCQUFXLENBQUNXLDhCQUE4QixFQUFFLFVBQUFDLElBQUk7RUFBQSxPQUFLO0lBQUNULE9BQU8sRUFBRTtNQUFDUyxJQUFJLEVBQUpBO0lBQUk7RUFBQyxDQUFDO0FBQUEsQ0FBQyxDQUFDOztBQUV6Rjs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQkFHMkUsR0FBQWYsT0FBQSxDQUFBZSxnQkFBQSxHQUN0RixJQUFBZCxxQkFBWSxFQUNWQyx1QkFBVyxDQUFDYyxrQkFBa0IsRUFDOUIsVUFDRUMsT0FBNEQsRUFDNURDLEtBQXdEO0VBQUEsT0FDcEQ7SUFDSmIsT0FBTyxFQUFFO01BQ1BZLE9BQU8sRUFBUEEsT0FBTztNQUNQQyxLQUFLLEVBQUxBO0lBQ0Y7RUFDRixDQUFDO0FBQUEsQ0FDSCxDQUFDOztBQUVIOztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHVCQU1aLEdBQUFuQixPQUFBLENBQUFtQix1QkFBQSxHQUFHLElBQUFsQixxQkFBWSxFQUNkQyx1QkFBVyxDQUFDa0IsMEJBQTBCLEVBQ3RDLFVBQ0VILE9BQW1FLEVBQ25FSCxJQUE2RDtFQUFBLE9BQ3pEO0lBQ0pULE9BQU8sRUFBRTtNQUNQWSxPQUFPLEVBQVBBLE9BQU87TUFDUEgsSUFBSSxFQUFKQTtJQUNGO0VBQ0YsQ0FBQztBQUFBLENBQ0gsQ0FBQzs7QUFFRDs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNTyxxQkFNWixHQUFBckIsT0FBQSxDQUFBcUIscUJBQUEsR0FBRyxJQUFBcEIscUJBQVksRUFBQ0MsdUJBQVcsQ0FBQ29CLHdCQUF3QixFQUFFLFVBQUNMLE9BQU8sRUFBRU0sUUFBUTtFQUFBLE9BQU07SUFDN0VsQixPQUFPLEVBQUU7TUFBQ1ksT0FBTyxFQUFQQSxPQUFPO01BQUVNLFFBQVEsRUFBUkE7SUFBUTtFQUM3QixDQUFDO0FBQUEsQ0FBQyxDQUFDOztBQUVIOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBRXlFLEdBQUF4QixPQUFBLENBQUF3QixlQUFBLEdBQ3BGLElBQUF2QixxQkFBWSxFQUNWQyx1QkFBVyxDQUFDdUIsaUJBQWlCLEVBQzdCLFVBQUNDLFNBQWtEO0VBQUEsT0FBTTtJQUFDckIsT0FBTyxFQUFFcUI7RUFBUyxDQUFDO0FBQUEsQ0FDL0UsQ0FBQzs7QUFFSDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBS1osR0FBQTNCLE9BQUEsQ0FBQTJCLGVBQUEsR0FBRyxJQUFBMUIscUJBQVksRUFDZEMsdUJBQVcsQ0FBQzBCLGdCQUFnQixFQUM1QixVQUFDQyxZQUFxRDtFQUFBLE9BQU07SUFBQ3hCLE9BQU8sRUFBRXdCO0VBQVksQ0FBQztBQUFBLENBQ3JGLENBQUM7O0FBRUQ7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBRThFLEdBQUE5QixPQUFBLENBQUE4QixrQkFBQSxHQUN6RixJQUFBN0IscUJBQVksRUFDVkMsdUJBQVcsQ0FBQzZCLG1CQUFtQixFQUMvQixVQUFDM0IsRUFBOEM7RUFBQSxPQUFNO0lBQUNDLE9BQU8sRUFBRUQ7RUFBRSxDQUFDO0FBQUEsQ0FDcEUsQ0FBQzs7QUFFSDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNEIscUJBS1osR0FBQWhDLE9BQUEsQ0FBQWdDLHFCQUFBLEdBQUcsSUFBQS9CLHFCQUFZLEVBQ2RDLHVCQUFXLENBQUMrQix3QkFBd0IsRUFDcEMsVUFBQ0MsVUFBeUQ7RUFBQSxPQUFNO0lBQUM3QixPQUFPLEVBQUU2QjtFQUFVLENBQUM7QUFBQSxDQUN2RixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFLb0YsR0FBQW5DLE9BQUEsQ0FBQW1DLG1CQUFBLEdBQy9GLElBQUFsQyxxQkFBWSxFQUFDQyx1QkFBVyxDQUFDa0MscUJBQXFCLEVBQUUsVUFBQy9CLE9BQVk7RUFBQSxPQUFNO0lBQUNBLE9BQU8sRUFBUEE7RUFBTyxDQUFDO0FBQUEsQ0FBQyxDQUFDOztBQUVoRjs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNZ0MscUJBS1osR0FBQXJDLE9BQUEsQ0FBQXFDLHFCQUFBLEdBQUcsSUFBQXBDLHFCQUFZLEVBQ2RDLHVCQUFXLENBQUNvQyx5QkFBeUIsRUFDckMsVUFBQ0MsT0FBc0Q7RUFBQSxPQUFNO0lBQUNsQyxPQUFPLEVBQUVrQztFQUFPLENBQUM7QUFBQSxDQUNqRixDQUFDOztBQUVEOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFFa0YsR0FBQXhDLE9BQUEsQ0FBQXdDLG1CQUFBLEdBQzdGLElBQUF2QyxxQkFBWSxFQUNWQyx1QkFBVyxDQUFDdUMsc0JBQXNCLEVBQ2xDLFVBQUNDLEtBQWtEO0VBQUEsT0FBTTtJQUFDckMsT0FBTyxFQUFFcUM7RUFBSyxDQUFDO0FBQUEsQ0FDM0UsQ0FBQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBRVosR0FBQTNDLE9BQUEsQ0FBQTJDLGtCQUFBLEdBQUcsSUFBQTFDLHFCQUFZLEVBQUNDLHVCQUFXLENBQUMwQyxvQkFBb0IsQ0FBQzs7QUFFbEQ7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsd0JBS1osR0FBQTdDLE9BQUEsQ0FBQTZDLHdCQUFBLEdBQUcsSUFBQTVDLHFCQUFZLEVBQ2RDLHVCQUFXLENBQUM0QywyQkFBMkIsRUFDdkMsVUFBQ3BCLFNBQTJEO0VBQUEsT0FBTTtJQUFDckIsT0FBTyxFQUFFcUI7RUFBUyxDQUFDO0FBQUEsQ0FDeEYsQ0FBQzs7QUFFRDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUIsaUJBRThFLEdBQUEvQyxPQUFBLENBQUErQyxpQkFBQSxHQUN6RixJQUFBOUMscUJBQVksRUFDVkMsdUJBQVcsQ0FBQzhDLG9CQUFvQixFQUNoQyxVQUFDQyxRQUFtRDtFQUFBLE9BQU07SUFBQzVDLE9BQU8sRUFBRTRDO0VBQVEsQ0FBQztBQUFBLENBQy9FLENBQUM7O0FBRUg7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsaUJBRTZFLEdBQUFsRCxPQUFBLENBQUFrRCxpQkFBQSxHQUN4RixJQUFBakQscUJBQVksRUFDVkMsdUJBQVcsQ0FBQ2lELG1CQUFtQixFQUMvQixVQUFDOUMsT0FBa0Q7RUFBQSxPQUFNO0lBQUNBLE9BQU8sRUFBUEE7RUFBTyxDQUFDO0FBQUEsQ0FDcEUsQ0FBQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTStDLGFBQStELEdBQUFwRCxPQUFBLENBQUFvRCxhQUFBLEdBQUcsSUFBQW5ELHFCQUFZLEVBQ3pGQyx1QkFBVyxDQUFDbUQsZUFDZCxDQUFDOztBQUVEOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHdCQUtaLEdBQUF0RCxPQUFBLENBQUFzRCx3QkFBQSxHQUFHLElBQUFyRCxxQkFBWSxFQUNkQyx1QkFBVyxDQUFDcUQsNEJBQTRCLEVBQ3hDLFVBQUNsRCxPQUF5RDtFQUFBLE9BQU07SUFBQ0EsT0FBTyxFQUFQQTtFQUFPLENBQUM7QUFBQSxDQUMzRSxDQUFDOztBQUVEOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1tRCxrQkFFZ0YsR0FBQXhELE9BQUEsQ0FBQXdELGtCQUFBLEdBQzNGLElBQUF2RCxxQkFBWSxFQUNWQyx1QkFBVyxDQUFDdUQscUJBQXFCLEVBQ2pDLFVBQUNwRCxPQUFtRDtFQUFBLE9BQU07SUFBQ0EsT0FBTyxFQUFQQTtFQUFPLENBQUM7QUFBQSxDQUNyRSxDQUFDOztBQUVIOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUQsb0JBRXFGLEdBQUExRCxPQUFBLENBQUEwRCxvQkFBQSxHQUNoRyxJQUFBekQscUJBQVksRUFDVkMsdUJBQVcsQ0FBQ3lELHdCQUF3QixFQUNwQyxVQUFDdEQsT0FBcUQ7RUFBQSxPQUFNO0lBQUNBLE9BQU8sRUFBUEE7RUFBTyxDQUFDO0FBQUEsQ0FDdkUsQ0FBQzs7QUFFSDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNdUQsU0FFNEQsR0FBQTVELE9BQUEsQ0FBQTRELFNBQUEsR0FBRyxJQUFBM0QscUJBQVksRUFDdEZDLHVCQUFXLENBQUMyRCxVQUFVLEVBQ3RCLFVBQUNDLE1BQW1EO0VBQUEsT0FBTTtJQUN4RHpELE9BQU8sRUFBRTtNQUNQeUQsTUFBTSxFQUFOQTtJQUNGO0VBQ0YsQ0FBQztBQUFBLENBQ0gsQ0FBQzs7QUFFRDs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsbUJBRTJFLEdBQUEvRCxPQUFBLENBQUErRCxtQkFBQSxHQUN0RixJQUFBOUQscUJBQVksRUFDVkMsdUJBQVcsQ0FBQzhELHNCQUFzQixFQUNsQyxVQUFDM0QsT0FBNkM7RUFBQSxPQUFNO0lBQUNBLE9BQU8sRUFBUEE7RUFBTyxDQUFDO0FBQUEsQ0FDL0QsQ0FBQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU00RCxjQUFjLEdBQUcsSUFBSTtBQUMzQjs7QUFFQTs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG1CQUUwRSxHQUFBbEUsT0FBQSxDQUFBa0UsbUJBQUEsR0FDckYsSUFBQWpFLHFCQUFZLEVBQ1ZDLHVCQUFXLENBQUNpRSxxQkFBcUIsRUFDakMsVUFBQzlELE9BQTZDO0VBQUEsT0FBTTtJQUFDQSxPQUFPLEVBQVBBO0VBQU8sQ0FBQztBQUFBLENBQy9ELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=