kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
137 lines (106 loc) • 13.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addDataToMapComposed = exports.updateVisDataComposed = undefined;
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _compostedUpdaters; // Copyright (c) 2018 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.
var _actionTypes = require('../constants/action-types');
var _actionTypes2 = _interopRequireDefault(_actionTypes);
var _mapStateUpdaters = require('./map-state-updaters');
var _uiStateUpdaters = require('./ui-state-updaters');
var _visStateUpdaters = require('./vis-state-updaters');
var _mapStyleUpdaters = require('./map-style-updaters');
var _dataUtils = require('../utils/data-utils');
var _schemas = require('../schemas');
var _schemas2 = _interopRequireDefault(_schemas);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// compose action to apply result multiple reducers, with the output of one
/**
* Apply data and config to visState reducer
* @param {object} state
* @param {object} action
* @param {object} action.options
* @param {Boolean} action.options.centerMap
* @param {Boolean} action.options.readOnly
* @param {object} action.config
* @returns state new reducer state
*/
var updateVisDataComposed = exports.updateVisDataComposed = function updateVisDataComposed(state, action) {
// keep a copy of oldLayers
var oldLayers = state.visState.layers;
var visState = (0, _visStateUpdaters.updateVisDataUpdater)(state.visState, action);
var defaultOptions = {
centerMap: true
};
var options = (0, _extends3.default)({}, defaultOptions, action.options);
var bounds = void 0;
if (options.centerMap) {
// find map bounds for new layers
var newLayers = visState.layers.filter(function (nl) {
return !oldLayers.find(function (ol) {
return ol === nl;
});
});
bounds = (0, _dataUtils.findMapBounds)(newLayers);
}
return (0, _extends3.default)({}, state, {
visState: visState,
mapState: bounds ? (0, _mapStateUpdaters.fitBoundsUpdater)(state.mapState, {
payload: bounds
}) : state.mapState,
uiState: (0, _extends3.default)({}, (0, _uiStateUpdaters.toggleModalUpdater)(state.uiState, { payload: null }), options.hasOwnProperty('readOnly') ? { readOnly: options.readOnly } : {})
});
};
/**
* Combine data and full configuration update in a single action
* @param state
* @param action {datasets, options, config}
* @returns state
*/
var addDataToMapComposed = exports.addDataToMapComposed = function addDataToMapComposed(state, action) {
var _action$payload = action.payload,
datasets = _action$payload.datasets,
options = _action$payload.options,
config = _action$payload.config;
var parsedConfig = config;
if (config && config.config && config.version) {
// if passed in saved config
parsedConfig = _schemas2.default.parseSavedConfig(config);
}
// Update visState store
var mergedState = updateVisDataComposed(state, { datasets: datasets, options: options, config: parsedConfig && parsedConfig.visState });
// Update mapState store
mergedState = (0, _extends3.default)({}, mergedState, {
mapState: (0, _mapStateUpdaters.receiveMapConfigUpdater)(mergedState.mapState, { payload: { mapState: parsedConfig && parsedConfig.mapState } })
});
// Update mapStyle store
mergedState = (0, _extends3.default)({}, mergedState, {
mapStyle: (0, _mapStyleUpdaters.receiveMapConfigUpdater)(mergedState.mapStyle, { payload: { mapStyle: parsedConfig && parsedConfig.mapStyle } })
});
return mergedState;
};
var compostedUpdaters = (_compostedUpdaters = {}, (0, _defineProperty3.default)(_compostedUpdaters, _actionTypes2.default.UPDATE_VIS_DATA, updateVisDataComposed), (0, _defineProperty3.default)(_compostedUpdaters, _actionTypes2.default.ADD_DATA_TO_MAP, addDataToMapComposed), _compostedUpdaters);
exports.default = compostedUpdaters;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy9jb21wb3NlcnMuanMiXSwibmFtZXMiOlsidXBkYXRlVmlzRGF0YUNvbXBvc2VkIiwic3RhdGUiLCJhY3Rpb24iLCJvbGRMYXllcnMiLCJ2aXNTdGF0ZSIsImxheWVycyIsImRlZmF1bHRPcHRpb25zIiwiY2VudGVyTWFwIiwib3B0aW9ucyIsImJvdW5kcyIsIm5ld0xheWVycyIsImZpbHRlciIsImZpbmQiLCJvbCIsIm5sIiwibWFwU3RhdGUiLCJwYXlsb2FkIiwidWlTdGF0ZSIsImhhc093blByb3BlcnR5IiwicmVhZE9ubHkiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsImRhdGFzZXRzIiwiY29uZmlnIiwicGFyc2VkQ29uZmlnIiwidmVyc2lvbiIsIktlcGxlckdsU2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm1lcmdlZFN0YXRlIiwibWFwU3R5bGUiLCJjb21wb3N0ZWRVcGRhdGVycyIsIkFjdGlvblR5cGVzIiwiVVBEQVRFX1ZJU19EQVRBIiwiQUREX0RBVEFfVE9fTUFQIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7d0JBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7QUFVTyxJQUFNQSx3REFBd0IsU0FBeEJBLHFCQUF3QixDQUFDQyxLQUFELEVBQVFDLE1BQVIsRUFBbUI7QUFDdEQ7QUFDQSxNQUFNQyxZQUFZRixNQUFNRyxRQUFOLENBQWVDLE1BQWpDOztBQUVBLE1BQU1ELFdBQVcsNENBQXFCSCxNQUFNRyxRQUEzQixFQUFxQ0YsTUFBckMsQ0FBakI7O0FBRUEsTUFBTUksaUJBQWlCO0FBQ3JCQyxlQUFXO0FBRFUsR0FBdkI7O0FBSUEsTUFBTUMscUNBQ0RGLGNBREMsRUFFREosT0FBT00sT0FGTixDQUFOOztBQUtBLE1BQUlDLGVBQUo7QUFDQSxNQUFJRCxRQUFRRCxTQUFaLEVBQXVCO0FBQ3JCO0FBQ0EsUUFBTUcsWUFBWU4sU0FBU0MsTUFBVCxDQUFnQk0sTUFBaEIsQ0FBdUI7QUFBQSxhQUFNLENBQUNSLFVBQVVTLElBQVYsQ0FBZTtBQUFBLGVBQU1DLE9BQU9DLEVBQWI7QUFBQSxPQUFmLENBQVA7QUFBQSxLQUF2QixDQUFsQjtBQUNBTCxhQUFTLDhCQUFjQyxTQUFkLENBQVQ7QUFDRDs7QUFFRCxvQ0FDS1QsS0FETDtBQUVFRyxzQkFGRjtBQUdFVyxjQUFVTixTQUNOLHdDQUFpQlIsTUFBTWMsUUFBdkIsRUFBaUM7QUFDL0JDLGVBQVNQO0FBRHNCLEtBQWpDLENBRE0sR0FJTlIsTUFBTWMsUUFQWjtBQVFFRSx3Q0FDSyx5Q0FBbUJoQixNQUFNZ0IsT0FBekIsRUFBa0MsRUFBQ0QsU0FBUyxJQUFWLEVBQWxDLENBREwsRUFFTVIsUUFBUVUsY0FBUixDQUF1QixVQUF2QixJQUFxQyxFQUFDQyxVQUFVWCxRQUFRVyxRQUFuQixFQUFyQyxHQUFvRSxFQUYxRTtBQVJGO0FBYUQsQ0FuQ007O0FBcUNQOzs7Ozs7QUFNTyxJQUFNQyxzREFBdUIsU0FBdkJBLG9CQUF1QixDQUFDbkIsS0FBRCxFQUFRQyxNQUFSLEVBQW1CO0FBQUEsd0JBRWpCQSxPQUFPYyxPQUZVO0FBQUEsTUFFOUNLLFFBRjhDLG1CQUU5Q0EsUUFGOEM7QUFBQSxNQUVwQ2IsT0FGb0MsbUJBRXBDQSxPQUZvQztBQUFBLE1BRTNCYyxNQUYyQixtQkFFM0JBLE1BRjJCOztBQUdyRCxNQUFJQyxlQUFlRCxNQUFuQjs7QUFFQSxNQUFJQSxVQUFVQSxPQUFPQSxNQUFqQixJQUEyQkEsT0FBT0UsT0FBdEMsRUFBK0M7QUFDN0M7QUFDQUQsbUJBQWVFLGtCQUFlQyxnQkFBZixDQUFnQ0osTUFBaEMsQ0FBZjtBQUNEO0FBQ0Q7QUFDQSxNQUFJSyxjQUFjM0Isc0JBQXNCQyxLQUF0QixFQUE2QixFQUFDb0Isa0JBQUQsRUFBV2IsZ0JBQVgsRUFBb0JjLFFBQVFDLGdCQUFnQkEsYUFBYW5CLFFBQXpELEVBQTdCLENBQWxCOztBQUVBO0FBQ0F1QiwyQ0FDS0EsV0FETDtBQUVFWixjQUFVLCtDQUFzQlksWUFBWVosUUFBbEMsRUFBNEMsRUFBQ0MsU0FBUyxFQUFDRCxVQUFVUSxnQkFBZ0JBLGFBQWFSLFFBQXhDLEVBQVYsRUFBNUM7QUFGWjs7QUFLQTtBQUNBWSwyQ0FDS0EsV0FETDtBQUVFQyxjQUFVLCtDQUFzQkQsWUFBWUMsUUFBbEMsRUFBNEMsRUFBQ1osU0FBUyxFQUFDWSxVQUFVTCxnQkFBZ0JBLGFBQWFLLFFBQXhDLEVBQVYsRUFBNUM7QUFGWjs7QUFLQSxTQUFPRCxXQUFQO0FBQ0QsQ0F6Qk07O0FBMkJQLElBQU1FLGdHQUNIQyxzQkFBWUMsZUFEVCxFQUMyQi9CLHFCQUQzQixxREFFSDhCLHNCQUFZRSxlQUZULEVBRTJCWixvQkFGM0Isc0JBQU47O2tCQUtlUyxpQiIsImZpbGUiOiJjb21wb3NlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgQWN0aW9uVHlwZXMgZnJvbSAnY29uc3RhbnRzL2FjdGlvbi10eXBlcyc7XG5pbXBvcnQge2ZpdEJvdW5kc1VwZGF0ZXJ9IGZyb20gJy4vbWFwLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7dG9nZ2xlTW9kYWxVcGRhdGVyfSBmcm9tICcuL3VpLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7dXBkYXRlVmlzRGF0YVVwZGF0ZXJ9IGZyb20gJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7cmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgc3RhdGVNYXBDb25maWdVcGRhdGVyfSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge3JlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlcn0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCBLZXBsZXJHbFNjaGVtYSBmcm9tICdzY2hlbWFzJztcblxuLy8gY29tcG9zZSBhY3Rpb24gdG8gYXBwbHkgcmVzdWx0IG11bHRpcGxlIHJlZHVjZXJzLCB3aXRoIHRoZSBvdXRwdXQgb2Ygb25lXG5cbi8qKlxuICogQXBwbHkgZGF0YSBhbmQgY29uZmlnIHRvIHZpc1N0YXRlIHJlZHVjZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGFjdGlvbi5vcHRpb25zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFjdGlvbi5vcHRpb25zLmNlbnRlck1hcFxuICogQHBhcmFtIHtCb29sZWFufSBhY3Rpb24ub3B0aW9ucy5yZWFkT25seVxuICogQHBhcmFtIHtvYmplY3R9IGFjdGlvbi5jb25maWdcbiAqIEByZXR1cm5zIHN0YXRlIG5ldyByZWR1Y2VyIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhQ29tcG9zZWQgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAvLyBrZWVwIGEgY29weSBvZiBvbGRMYXllcnNcbiAgY29uc3Qgb2xkTGF5ZXJzID0gc3RhdGUudmlzU3RhdGUubGF5ZXJzO1xuXG4gIGNvbnN0IHZpc1N0YXRlID0gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbik7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY2VudGVyTWFwOiB0cnVlXG4gIH07XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAuLi5hY3Rpb24ub3B0aW9uc1xuICB9O1xuXG4gIGxldCBib3VuZHM7XG4gIGlmIChvcHRpb25zLmNlbnRlck1hcCkge1xuICAgIC8vIGZpbmQgbWFwIGJvdW5kcyBmb3IgbmV3IGxheWVyc1xuICAgIGNvbnN0IG5ld0xheWVycyA9IHZpc1N0YXRlLmxheWVycy5maWx0ZXIobmwgPT4gIW9sZExheWVycy5maW5kKG9sID0+IG9sID09PSBubCkpO1xuICAgIGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGUsXG4gICAgbWFwU3RhdGU6IGJvdW5kc1xuICAgICAgPyBmaXRCb3VuZHNVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCB7XG4gICAgICAgICAgcGF5bG9hZDogYm91bmRzXG4gICAgICAgIH0pXG4gICAgICA6IHN0YXRlLm1hcFN0YXRlLFxuICAgIHVpU3RhdGU6IHtcbiAgICAgIC4uLnRvZ2dsZU1vZGFsVXBkYXRlcihzdGF0ZS51aVN0YXRlLCB7cGF5bG9hZDogbnVsbH0pLFxuICAgICAgLi4uKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3JlYWRPbmx5JykgPyB7cmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHl9IDoge30pXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBDb21iaW5lIGRhdGEgYW5kIGZ1bGwgY29uZmlndXJhdGlvbiB1cGRhdGUgaW4gYSBzaW5nbGUgYWN0aW9uXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBhY3Rpb24ge2RhdGFzZXRzLCBvcHRpb25zLCBjb25maWd9XG4gKiBAcmV0dXJucyBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwQ29tcG9zZWQgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuXG4gIGNvbnN0IHtkYXRhc2V0cywgb3B0aW9ucywgY29uZmlnfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBsZXQgcGFyc2VkQ29uZmlnID0gY29uZmlnO1xuXG4gIGlmIChjb25maWcgJiYgY29uZmlnLmNvbmZpZyAmJiBjb25maWcudmVyc2lvbikge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBzYXZlZCBjb25maWdcbiAgICBwYXJzZWRDb25maWcgPSBLZXBsZXJHbFNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKGNvbmZpZylcbiAgfVxuICAvLyBVcGRhdGUgdmlzU3RhdGUgc3RvcmVcbiAgbGV0IG1lcmdlZFN0YXRlID0gdXBkYXRlVmlzRGF0YUNvbXBvc2VkKHN0YXRlLCB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZzogcGFyc2VkQ29uZmlnICYmIHBhcnNlZENvbmZpZy52aXNTdGF0ZX0pO1xuXG4gIC8vIFVwZGF0ZSBtYXBTdGF0ZSBzdG9yZVxuICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICBtYXBTdGF0ZTogc3RhdGVNYXBDb25maWdVcGRhdGVyKG1lcmdlZFN0YXRlLm1hcFN0YXRlLCB7cGF5bG9hZDoge21hcFN0YXRlOiBwYXJzZWRDb25maWcgJiYgcGFyc2VkQ29uZmlnLm1hcFN0YXRlfX0pXG4gIH07XG5cbiAgLy8gVXBkYXRlIG1hcFN0eWxlIHN0b3JlXG4gIG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgIG1hcFN0eWxlOiBzdHlsZU1hcENvbmZpZ1VwZGF0ZXIobWVyZ2VkU3RhdGUubWFwU3R5bGUsIHtwYXlsb2FkOiB7bWFwU3R5bGU6IHBhcnNlZENvbmZpZyAmJiBwYXJzZWRDb25maWcubWFwU3R5bGV9fSlcbiAgfTtcblxuICByZXR1cm4gbWVyZ2VkU3RhdGVcbn07XG5cbmNvbnN0IGNvbXBvc3RlZFVwZGF0ZXJzID0ge1xuICBbQWN0aW9uVHlwZXMuVVBEQVRFX1ZJU19EQVRBXTogdXBkYXRlVmlzRGF0YUNvbXBvc2VkLFxuICBbQWN0aW9uVHlwZXMuQUREX0RBVEFfVE9fTUFQXTogYWRkRGF0YVRvTWFwQ29tcG9zZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc3RlZFVwZGF0ZXJzO1xuIl19