kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
149 lines (132 loc) • 14.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.set3dBuildingColor = exports.requestMapStyles = exports.mapStyleChange = exports.mapConfigChange = exports.loadMapStyles = exports.loadMapStyleErr = exports.loadCustomMapStyle = exports.inputMapStyle = exports.addCustomMapStyle = void 0;
var _reduxActions = require("redux-actions");
var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
// Copyright (c) 2023 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/**
* Add map style from user input to reducer and set it to current style
* This action is called when user click confirm after putting in a valid style url in the custom map style dialog.
* It should not be called from outside kepler.gl without a valid `inputStyle` in the `mapStyle` reducer.
* param {void}
* @memberof mapStyleActions
* @public
*/
var addCustomMapStyle = exports.addCustomMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].ADD_CUSTOM_MAP_STYLE);
/**
* Input a custom map style object
* @memberof mapStyleActions
* @param {Object} inputStyle
* @param {string} inputStyle.url - style url e.g. `'mapbox://styles/heshan/xxxxxyyyyzzz'`
* @param {string} inputStyle.id - style url e.g. `'custom_style_1'`
* @param {Object} inputStyle.style - actual mapbox style json
* @param {string} inputStyle.name - style name
* @param {Object} inputStyle.layerGroups - layer groups that can be used to set map layer visibility
* @param {Object} inputStyle.icon - icon image data url
* @param {Object} mapState - mapState is optional
* @public
*/
var inputMapStyle = exports.inputMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].INPUT_MAP_STYLE, function (inputStyle, mapState) {
return {
inputStyle: inputStyle,
mapState: mapState
};
});
/**
* Update `visibleLayerGroups`to change layer group visibility
* @memberof mapStyleActions
* @param {Object} mapStyle new config `{visibleLayerGroups: {label: false, road: true, background: true}}`
* @public
*/
var mapConfigChange = exports.mapConfigChange = (0, _reduxActions.createAction)(_actionTypes["default"].MAP_CONFIG_CHANGE, function (mapStyle) {
return mapStyle;
});
/**
* Request map style style object based on style.url.
* @memberof mapStyleActions
* @param {Array<Object>} mapStyles
* @public
*/
var requestMapStyles = exports.requestMapStyles = (0, _reduxActions.createAction)(_actionTypes["default"].REQUEST_MAP_STYLES, function (mapStyles) {
return mapStyles;
});
/**
* Callback when load map style success
* @memberof mapStyleActions
* @param {Object} newStyles a `{[id]: style}` mapping
* @public
*/
var loadMapStyles = exports.loadMapStyles = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_MAP_STYLES, function (newStyles) {
return newStyles;
});
/**
* Callback when load map style error
* @memberof mapStyleActions
* @param {*} error
* @public
*/
var loadMapStyleErr = exports.loadMapStyleErr = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_MAP_STYLE_ERR, function (error) {
return error;
});
/**
* Change to another map style. The selected style should already been loaded into `mapStyle.mapStyles`
* @memberof mapStyleActions
* @param {string} styleType the style to change to
* @public
*/
var mapStyleChange = exports.mapStyleChange = (0, _reduxActions.createAction)(_actionTypes["default"].MAP_STYLE_CHANGE, function (styleType) {
return styleType;
});
/**
* Callback when a custom map style object is received
* @memberof mapStyleActions
* @param {Object} customMapStyle
* @param {string} customMapStyle.icon
* @param {Object} customMapStyle.style
* @param {*} customMapStyle.error
* @public
*/
var loadCustomMapStyle = exports.loadCustomMapStyle = (0, _reduxActions.createAction)(_actionTypes["default"].LOAD_CUSTOM_MAP_STYLE, function (customMapStyle) {
return customMapStyle;
}); // SET_3D_BUILDING_COLOR
/**
* Set 3d building layer group color
* @memberof mapStyleActions
* @param {Array} color - [r, g, b]
* @public
*/
var set3dBuildingColor = exports.set3dBuildingColor = (0, _reduxActions.createAction)(_actionTypes["default"].SET_3D_BUILDING_COLOR, function (color) {
return color;
});
/**
* Actions handled mostly by `mapStyle` reducer.
* They manage the display of base map, such as loading and receiving base map styles,
* hiding and showing map layers, user input of custom map style url.
*
* @public
*/
/* eslint-disable no-unused-vars */
var mapStyleActions = null;
/* eslint-enable no-unused-vars */
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL21hcC1zdHlsZS1hY3Rpb25zLmpzIl0sIm5hbWVzIjpbImFkZEN1c3RvbU1hcFN0eWxlIiwiQWN0aW9uVHlwZXMiLCJBRERfQ1VTVE9NX01BUF9TVFlMRSIsImlucHV0TWFwU3R5bGUiLCJJTlBVVF9NQVBfU1RZTEUiLCJpbnB1dFN0eWxlIiwibWFwU3RhdGUiLCJtYXBDb25maWdDaGFuZ2UiLCJNQVBfQ09ORklHX0NIQU5HRSIsIm1hcFN0eWxlIiwicmVxdWVzdE1hcFN0eWxlcyIsIlJFUVVFU1RfTUFQX1NUWUxFUyIsIm1hcFN0eWxlcyIsImxvYWRNYXBTdHlsZXMiLCJMT0FEX01BUF9TVFlMRVMiLCJuZXdTdHlsZXMiLCJsb2FkTWFwU3R5bGVFcnIiLCJMT0FEX01BUF9TVFlMRV9FUlIiLCJlcnJvciIsIm1hcFN0eWxlQ2hhbmdlIiwiTUFQX1NUWUxFX0NIQU5HRSIsInN0eWxlVHlwZSIsImxvYWRDdXN0b21NYXBTdHlsZSIsIkxPQURfQ1VTVE9NX01BUF9TVFlMRSIsImN1c3RvbU1hcFN0eWxlIiwic2V0M2RCdWlsZGluZ0NvbG9yIiwiU0VUXzNEX0JVSUxESU5HX0NPTE9SIiwiY29sb3IiLCJtYXBTdHlsZUFjdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBS0E7Ozs7Ozs7O0FBUU8sSUFBTUEsaUJBQWlCLCtCQUFHLGdDQUMvQkMsd0JBQVlDLG9CQURtQixDQUExQjtBQUlQOzs7Ozs7Ozs7Ozs7OztBQWFPLElBQU1DLGFBQWEsMkJBQUcsZ0NBQzNCRix3QkFBWUcsZUFEZSxFQUUzQixVQUFDQyxVQUFELEVBQWFDLFFBQWI7QUFBQSxTQUEyQjtBQUFDRCxJQUFBQSxVQUFVLEVBQVZBLFVBQUQ7QUFBYUMsSUFBQUEsUUFBUSxFQUFSQTtBQUFiLEdBQTNCO0FBQUEsQ0FGMkIsQ0FBdEI7QUFLUDs7Ozs7OztBQU1PLElBQU1DLGVBQWUsNkJBQUcsZ0NBQzdCTix3QkFBWU8saUJBRGlCLEVBRTdCLFVBQUFDLFFBQVE7QUFBQSxTQUFJQSxRQUFKO0FBQUEsQ0FGcUIsQ0FBeEI7QUFLUDs7Ozs7OztBQU1PLElBQU1DLGdCQUFnQiw4QkFBRyxnQ0FDOUJULHdCQUFZVSxrQkFEa0IsRUFFOUIsVUFBQUMsU0FBUztBQUFBLFNBQUlBLFNBQUo7QUFBQSxDQUZxQixDQUF6QjtBQUlQOzs7Ozs7O0FBTU8sSUFBTUMsYUFBYSwyQkFBRyxnQ0FDM0JaLHdCQUFZYSxlQURlLEVBRTNCLFVBQUFDLFNBQVM7QUFBQSxTQUFJQSxTQUFKO0FBQUEsQ0FGa0IsQ0FBdEI7QUFLUDs7Ozs7OztBQU1PLElBQU1DLGVBQWUsNkJBQUcsZ0NBQzdCZix3QkFBWWdCLGtCQURpQixFQUU3QixVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSjtBQUFBLENBRndCLENBQXhCO0FBS1A7Ozs7Ozs7QUFNTyxJQUFNQyxjQUFjLDRCQUFHLGdDQUM1QmxCLHdCQUFZbUIsZ0JBRGdCLEVBRTVCLFVBQUFDLFNBQVM7QUFBQSxTQUFJQSxTQUFKO0FBQUEsQ0FGbUIsQ0FBdkI7QUFLUDs7Ozs7Ozs7OztBQVNPLElBQU1DLGtCQUFrQixnQ0FBRyxnQ0FDaENyQix3QkFBWXNCLHFCQURvQixFQUVoQyxVQUFBQyxjQUFjO0FBQUEsU0FBSUEsY0FBSjtBQUFBLENBRmtCLENBQTNCLEMsQ0FLUDs7QUFDQTs7Ozs7OztBQU1PLElBQU1DLGtCQUFrQixnQ0FBRyxnQ0FDaEN4Qix3QkFBWXlCLHFCQURvQixFQUVoQyxVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSjtBQUFBLENBRjJCLENBQTNCO0FBS1A7Ozs7Ozs7O0FBT0E7O0FBQ0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NyZWF0ZUFjdGlvbn0gZnJvbSAncmVkdXgtYWN0aW9ucyc7XG5pbXBvcnQgQWN0aW9uVHlwZXMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbi10eXBlcyc7XG5cbi8qKlxuICogQWRkIG1hcCBzdHlsZSBmcm9tIHVzZXIgaW5wdXQgdG8gcmVkdWNlciBhbmQgc2V0IGl0IHRvIGN1cnJlbnQgc3R5bGVcbiAqIFRoaXMgYWN0aW9uIGlzIGNhbGxlZCB3aGVuIHVzZXIgY2xpY2sgY29uZmlybSBhZnRlciBwdXR0aW5nIGluIGEgdmFsaWQgc3R5bGUgdXJsIGluIHRoZSBjdXN0b20gbWFwIHN0eWxlIGRpYWxvZy5cbiAqIEl0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSBrZXBsZXIuZ2wgd2l0aG91dCBhIHZhbGlkIGBpbnB1dFN0eWxlYCBpbiB0aGUgYG1hcFN0eWxlYCByZWR1Y2VyLlxuICogcGFyYW0ge3ZvaWR9XG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21NYXBTdHlsZSA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuQUREX0NVU1RPTV9NQVBfU1RZTEUsXG4pO1xuXG4vKipcbiAqIElucHV0IGEgY3VzdG9tIG1hcCBzdHlsZSBvYmplY3RcbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFN0eWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRTdHlsZS51cmwgLSBzdHlsZSB1cmwgZS5nLiBgJ21hcGJveDovL3N0eWxlcy9oZXNoYW4veHh4eHh5eXl5enp6J2BcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFN0eWxlLmlkIC0gc3R5bGUgdXJsIGUuZy4gYCdjdXN0b21fc3R5bGVfMSdgXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRTdHlsZS5zdHlsZSAtIGFjdHVhbCBtYXBib3ggc3R5bGUganNvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0U3R5bGUubmFtZSAtIHN0eWxlIG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFN0eWxlLmxheWVyR3JvdXBzIC0gbGF5ZXIgZ3JvdXBzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IG1hcCBsYXllciB2aXNpYmlsaXR5XG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRTdHlsZS5pY29uIC0gaWNvbiBpbWFnZSBkYXRhIHVybFxuICogQHBhcmFtIHtPYmplY3R9IG1hcFN0YXRlIC0gbWFwU3RhdGUgaXMgb3B0aW9uYWxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGlucHV0TWFwU3R5bGUgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLklOUFVUX01BUF9TVFlMRSxcbiAgKGlucHV0U3R5bGUsIG1hcFN0YXRlKSA9PiAoe2lucHV0U3R5bGUsIG1hcFN0YXRlfSlcbik7XG5cbi8qKlxuICogVXBkYXRlIGB2aXNpYmxlTGF5ZXJHcm91cHNgdG8gY2hhbmdlIGxheWVyIGdyb3VwIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBTdHlsZSBuZXcgY29uZmlnIGB7dmlzaWJsZUxheWVyR3JvdXBzOiB7bGFiZWw6IGZhbHNlLCByb2FkOiB0cnVlLCBiYWNrZ3JvdW5kOiB0cnVlfX1gXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDb25maWdDaGFuZ2UgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLk1BUF9DT05GSUdfQ0hBTkdFLFxuICBtYXBTdHlsZSA9PiBtYXBTdHlsZVxuKTtcblxuLyoqXG4gKiBSZXF1ZXN0IG1hcCBzdHlsZSBzdHlsZSBvYmplY3QgYmFzZWQgb24gc3R5bGUudXJsLlxuICogQG1lbWJlcm9mIG1hcFN0eWxlQWN0aW9uc1xuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBtYXBTdHlsZXNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVlc3RNYXBTdHlsZXMgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLlJFUVVFU1RfTUFQX1NUWUxFUyxcbiAgbWFwU3R5bGVzID0+IG1hcFN0eWxlc1xuKTtcbi8qKlxuICogQ2FsbGJhY2sgd2hlbiBsb2FkIG1hcCBzdHlsZSBzdWNjZXNzXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gbmV3U3R5bGVzIGEgYHtbaWRdOiBzdHlsZX1gIG1hcHBpbmdcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRNYXBTdHlsZXMgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLkxPQURfTUFQX1NUWUxFUyxcbiAgbmV3U3R5bGVzID0+IG5ld1N0eWxlc1xuKTtcblxuLyoqXG4gKiBDYWxsYmFjayB3aGVuIGxvYWQgbWFwIHN0eWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0geyp9IGVycm9yXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkTWFwU3R5bGVFcnIgPSBjcmVhdGVBY3Rpb24oXG4gIEFjdGlvblR5cGVzLkxPQURfTUFQX1NUWUxFX0VSUixcbiAgZXJyb3IgPT4gZXJyb3Jcbik7XG5cbi8qKlxuICogQ2hhbmdlIHRvIGFub3RoZXIgbWFwIHN0eWxlLiBUaGUgc2VsZWN0ZWQgc3R5bGUgc2hvdWxkIGFscmVhZHkgYmVlbiBsb2FkZWQgaW50byBgbWFwU3R5bGUubWFwU3R5bGVzYFxuICogQG1lbWJlcm9mIG1hcFN0eWxlQWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlVHlwZSB0aGUgc3R5bGUgdG8gY2hhbmdlIHRvXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBTdHlsZUNoYW5nZSA9IGNyZWF0ZUFjdGlvbihcbiAgQWN0aW9uVHlwZXMuTUFQX1NUWUxFX0NIQU5HRSxcbiAgc3R5bGVUeXBlID0+IHN0eWxlVHlwZVxuKTtcblxuLyoqXG4gKiBDYWxsYmFjayB3aGVuIGEgY3VzdG9tIG1hcCBzdHlsZSBvYmplY3QgaXMgcmVjZWl2ZWRcbiAqIEBtZW1iZXJvZiBtYXBTdHlsZUFjdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXN0b21NYXBTdHlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbU1hcFN0eWxlLmljb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXN0b21NYXBTdHlsZS5zdHlsZVxuICogQHBhcmFtIHsqfSBjdXN0b21NYXBTdHlsZS5lcnJvclxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEN1c3RvbU1hcFN0eWxlID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5MT0FEX0NVU1RPTV9NQVBfU1RZTEUsXG4gIGN1c3RvbU1hcFN0eWxlID0+IGN1c3RvbU1hcFN0eWxlXG4pO1xuXG4vLyBTRVRfM0RfQlVJTERJTkdfQ09MT1Jcbi8qKlxuICogU2V0IDNkIGJ1aWxkaW5nIGxheWVyIGdyb3VwIGNvbG9yXG4gKiBAbWVtYmVyb2YgbWFwU3R5bGVBY3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBjb2xvciAtIFtyLCBnLCBiXVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0M2RCdWlsZGluZ0NvbG9yID0gY3JlYXRlQWN0aW9uKFxuICBBY3Rpb25UeXBlcy5TRVRfM0RfQlVJTERJTkdfQ09MT1IsXG4gIGNvbG9yID0+IGNvbG9yXG4pO1xuXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgIGBtYXBTdHlsZWAgcmVkdWNlci5cbiAqIFRoZXkgbWFuYWdlIHRoZSBkaXNwbGF5IG9mIGJhc2UgbWFwLCBzdWNoIGFzIGxvYWRpbmcgYW5kIHJlY2VpdmluZyBiYXNlIG1hcCBzdHlsZXMsXG4gKiBoaWRpbmcgYW5kIHNob3dpbmcgbWFwIGxheWVycywgdXNlciBpbnB1dCBvZiBjdXN0b20gbWFwIHN0eWxlIHVybC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5jb25zdCBtYXBTdHlsZUFjdGlvbnMgPSBudWxsXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4iXX0=