kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
129 lines (127 loc) • 20 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.clusterVisConfigs = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _aggregationLayer = _interopRequireDefault(require("../aggregation-layer"));
var _layers = require("@deck.gl/layers");
var _deckglLayers = require("@kepler.gl/deckgl-layers");
var _clusterLayerIcon = _interopRequireDefault(require("./cluster-layer-icon"));
var _constants = require("@kepler.gl/constants");
var _excluded = ["_filterData"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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 clusterVisConfigs = exports.clusterVisConfigs = {
opacity: 'opacity',
clusterRadius: 'clusterRadius',
colorRange: 'colorRange',
radiusRange: 'clusterRadiusRange',
colorAggregation: 'colorAggregation'
};
var ClusterLayer = exports["default"] = /*#__PURE__*/function (_AggregationLayer) {
function ClusterLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, ClusterLayer);
_this = _callSuper(this, ClusterLayer, [props]);
_this.registerVisConfig(clusterVisConfigs);
// Access data of a point from aggregated clusters, depends on how getClusterer works
_this.getPointData = function (pt) {
return pt;
};
return _this;
}
(0, _inherits2["default"])(ClusterLayer, _AggregationLayer);
return (0, _createClass2["default"])(ClusterLayer, [{
key: "type",
get: function get() {
return 'cluster';
}
}, {
key: "layerIcon",
get: function get() {
return _clusterLayerIcon["default"];
}
}, {
key: "visualChannels",
get: function get() {
return {
color: {
aggregation: 'colorAggregation',
channelScaleType: _constants.CHANNEL_SCALES.colorAggr,
defaultMeasure: 'property.pointCount',
domain: 'colorDomain',
field: 'colorField',
key: 'color',
property: 'color',
range: 'colorRange',
scale: 'colorScale'
}
};
}
}, {
key: "renderLayer",
value: function renderLayer(opts) {
var visConfig = this.config.visConfig;
var data = opts.data,
gpuFilter = opts.gpuFilter,
objectHovered = opts.objectHovered,
mapState = opts.mapState,
layerCallbacks = opts.layerCallbacks;
var updateTriggers = {
getColorValue: {
colorField: this.config.colorField,
colorAggregation: this.config.visConfig.colorAggregation
},
filterData: _objectSpread({
filterRange: gpuFilter.filterRange
}, gpuFilter.filterValueUpdateTriggers)
};
var defaultLayerProps = this.getDefaultDeckLayerProps(opts);
var filterData = data._filterData,
clusterData = (0, _objectWithoutProperties2["default"])(data, _excluded);
var hoveredObject = this.hasHoveredObject(objectHovered);
return [new _deckglLayers.DeckGLClusterLayer(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), clusterData), {}, {
filterData: filterData,
// radius
radiusScale: 1,
radiusRange: visConfig.radiusRange,
clusterRadius: visConfig.clusterRadius,
// color
colorRange: this.getColorRange(visConfig.colorRange),
colorMap: visConfig.colorRange.colorMap,
colorScaleType: this.config.colorScale,
colorAggregation: visConfig.colorAggregation,
zoom: Math.round(mapState.zoom),
width: mapState.width,
height: mapState.height,
// updateTriggers
updateTriggers: updateTriggers,
// call back from layer after calculate clusters
onSetColorDomain: layerCallbacks.onSetLayerDomain
}))].concat((0, _toConsumableArray2["default"])(hoveredObject ? [new _layers.ScatterplotLayer({
id: "".concat(this.id, "-hovered"),
visible: defaultLayerProps.visible,
data: [hoveredObject],
getFillColor: this.config.highlightColor,
getRadius: function getRadius(d) {
return d.radius;
},
radiusScale: 1,
pickable: false
})] : []));
}
}]);
}(_aggregationLayer["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWdncmVnYXRpb25MYXllciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xheWVycyIsIl9kZWNrZ2xMYXllcnMiLCJfY2x1c3RlckxheWVySWNvbiIsIl9jb25zdGFudHMiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImNsdXN0ZXJWaXNDb25maWdzIiwiZXhwb3J0cyIsIm9wYWNpdHkiLCJjbHVzdGVyUmFkaXVzIiwiY29sb3JSYW5nZSIsInJhZGl1c1JhbmdlIiwiY29sb3JBZ2dyZWdhdGlvbiIsIkNsdXN0ZXJMYXllciIsIl9BZ2dyZWdhdGlvbkxheWVyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvaW50RGF0YSIsInB0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXQiLCJDbHVzdGVyTGF5ZXJJY29uIiwiY29sb3IiLCJhZ2dyZWdhdGlvbiIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yQWdnciIsImRlZmF1bHRNZWFzdXJlIiwiZG9tYWluIiwiZmllbGQiLCJwcm9wZXJ0eSIsInJhbmdlIiwic2NhbGUiLCJ2YWx1ZSIsInJlbmRlckxheWVyIiwib3B0cyIsInZpc0NvbmZpZyIsImNvbmZpZyIsImRhdGEiLCJncHVGaWx0ZXIiLCJvYmplY3RIb3ZlcmVkIiwibWFwU3RhdGUiLCJsYXllckNhbGxiYWNrcyIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0Q29sb3JWYWx1ZSIsImNvbG9yRmllbGQiLCJmaWx0ZXJEYXRhIiwiZmlsdGVyUmFuZ2UiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJfZmlsdGVyRGF0YSIsImNsdXN0ZXJEYXRhIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwiRGVja0dMQ2x1c3RlckxheWVyIiwicmFkaXVzU2NhbGUiLCJnZXRDb2xvclJhbmdlIiwiY29sb3JNYXAiLCJjb2xvclNjYWxlVHlwZSIsImNvbG9yU2NhbGUiLCJ6b29tIiwiTWF0aCIsInJvdW5kIiwid2lkdGgiLCJoZWlnaHQiLCJvblNldENvbG9yRG9tYWluIiwib25TZXRMYXllckRvbWFpbiIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJTY2F0dGVycGxvdExheWVyIiwiaWQiLCJ2aXNpYmxlIiwiZ2V0RmlsbENvbG9yIiwiaGlnaGxpZ2h0Q29sb3IiLCJnZXRSYWRpdXMiLCJkIiwicmFkaXVzIiwicGlja2FibGUiLCJBZ2dyZWdhdGlvbkxheWVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsdXN0ZXItbGF5ZXIvY2x1c3Rlci1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQWdncmVnYXRpb25MYXllciwge0FnZ3JlZ2F0aW9uTGF5ZXJDb25maWd9IGZyb20gJy4uL2FnZ3JlZ2F0aW9uLWxheWVyJztcbmltcG9ydCB7U2NhdHRlcnBsb3RMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcblxuaW1wb3J0IHtEZWNrR0xDbHVzdGVyTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5pbXBvcnQgQ2x1c3RlckxheWVySWNvbiBmcm9tICcuL2NsdXN0ZXItbGF5ZXItaWNvbic7XG5pbXBvcnQge1xuICBDb2xvclJhbmdlLFxuICBNZXJnZSxcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgVmlzQ29uZmlnU2VsZWN0aW9uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtDSEFOTkVMX1NDQUxFUywgQWdncmVnYXRpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtWaXN1YWxDaGFubmVsc30gZnJvbSAnLi4vYmFzZS1sYXllcic7XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJMYXllclZpc0NvbmZpZ1NldHRpbmdzID0ge1xuICBvcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIGNsdXN0ZXJSYWRpdXM6IFZpc0NvbmZpZ051bWJlcjtcbiAgY29sb3JSYW5nZTogVmlzQ29uZmlnQ29sb3JSYW5nZTtcbiAgcmFkaXVzUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICBjb2xvckFnZ3JlZ2F0aW9uOiBWaXNDb25maWdTZWxlY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBDbHVzdGVyTGF5ZXJWaXNDb25maWcgPSB7XG4gIG9wYWNpdHk6IG51bWJlcjtcbiAgY2x1c3RlclJhZGl1czogbnVtYmVyO1xuICBjb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICByYWRpdXNSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgY29sb3JBZ2dyZWdhdGlvbjogQWdncmVnYXRpb25UeXBlcztcbn07XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJMYXllckNvbmZpZyA9IE1lcmdlPEFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcsIHt2aXNDb25maWc6IENsdXN0ZXJMYXllclZpc0NvbmZpZ30+O1xuXG5leHBvcnQgY29uc3QgY2x1c3RlclZpc0NvbmZpZ3M6IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknO1xuICBjbHVzdGVyUmFkaXVzOiAnY2x1c3RlclJhZGl1cyc7XG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJztcbiAgcmFkaXVzUmFuZ2U6ICdjbHVzdGVyUmFkaXVzUmFuZ2UnO1xuICBjb2xvckFnZ3JlZ2F0aW9uOiAnY29sb3JBZ2dyZWdhdGlvbic7XG59ID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIGNsdXN0ZXJSYWRpdXM6ICdjbHVzdGVyUmFkaXVzJyxcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ2NsdXN0ZXJSYWRpdXNSYW5nZScsXG4gIGNvbG9yQWdncmVnYXRpb246ICdjb2xvckFnZ3JlZ2F0aW9uJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2x1c3RlckxheWVyIGV4dGVuZHMgQWdncmVnYXRpb25MYXllciB7XG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IENsdXN0ZXJMYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogQ2x1c3RlckxheWVyQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucmVnaXN0ZXJWaXNDb25maWcoY2x1c3RlclZpc0NvbmZpZ3MpO1xuXG4gICAgLy8gQWNjZXNzIGRhdGEgb2YgYSBwb2ludCBmcm9tIGFnZ3JlZ2F0ZWQgY2x1c3RlcnMsIGRlcGVuZHMgb24gaG93IGdldENsdXN0ZXJlciB3b3Jrc1xuICAgIHRoaXMuZ2V0UG9pbnREYXRhID0gcHQgPT4gcHQ7XG4gIH1cblxuICBnZXQgdHlwZSgpOiAnY2x1c3Rlcicge1xuICAgIHJldHVybiAnY2x1c3Rlcic7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBDbHVzdGVyTGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCk6IFZpc3VhbENoYW5uZWxzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgYWdncmVnYXRpb246ICdjb2xvckFnZ3JlZ2F0aW9uJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyLFxuICAgICAgICBkZWZhdWx0TWVhc3VyZTogJ3Byb3BlcnR5LnBvaW50Q291bnQnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZCwgbWFwU3RhdGUsIGxheWVyQ2FsbGJhY2tzfSA9IG9wdHM7XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldENvbG9yVmFsdWU6IHtcbiAgICAgICAgY29sb3JGaWVsZDogdGhpcy5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgY29sb3JBZ2dyZWdhdGlvbjogdGhpcy5jb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb25cbiAgICAgIH0sXG4gICAgICBmaWx0ZXJEYXRhOiB7XG4gICAgICAgIGZpbHRlclJhbmdlOiBncHVGaWx0ZXIuZmlsdGVyUmFuZ2UsXG4gICAgICAgIC4uLmdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG5cbiAgICBjb25zdCB7X2ZpbHRlckRhdGE6IGZpbHRlckRhdGEsIC4uLmNsdXN0ZXJEYXRhfSA9IGRhdGE7XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgRGVja0dMQ2x1c3RlckxheWVyKHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgIC4uLmNsdXN0ZXJEYXRhLFxuICAgICAgICBmaWx0ZXJEYXRhLFxuXG4gICAgICAgIC8vIHJhZGl1c1xuICAgICAgICByYWRpdXNTY2FsZTogMSxcbiAgICAgICAgcmFkaXVzUmFuZ2U6IHZpc0NvbmZpZy5yYWRpdXNSYW5nZSxcbiAgICAgICAgY2x1c3RlclJhZGl1czogdmlzQ29uZmlnLmNsdXN0ZXJSYWRpdXMsXG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgY29sb3JSYW5nZTogdGhpcy5nZXRDb2xvclJhbmdlKHZpc0NvbmZpZy5jb2xvclJhbmdlKSxcbiAgICAgICAgY29sb3JNYXA6IHZpc0NvbmZpZy5jb2xvclJhbmdlLmNvbG9yTWFwLFxuICAgICAgICBjb2xvclNjYWxlVHlwZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgY29sb3JBZ2dyZWdhdGlvbjogdmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb24sXG5cbiAgICAgICAgem9vbTogTWF0aC5yb3VuZChtYXBTdGF0ZS56b29tKSxcbiAgICAgICAgd2lkdGg6IG1hcFN0YXRlLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IG1hcFN0YXRlLmhlaWdodCxcblxuICAgICAgICAvLyB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcblxuICAgICAgICAvLyBjYWxsIGJhY2sgZnJvbSBsYXllciBhZnRlciBjYWxjdWxhdGUgY2x1c3RlcnNcbiAgICAgICAgb25TZXRDb2xvckRvbWFpbjogbGF5ZXJDYWxsYmFja3Mub25TZXRMYXllckRvbWFpblxuICAgICAgfSksXG4gICAgICAvLyBob3ZlciBsYXllclxuICAgICAgLi4uKGhvdmVyZWRPYmplY3RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgU2NhdHRlcnBsb3RMYXllcjx7cmFkaXVzOiBudW1iZXJ9Pih7XG4gICAgICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgICAgICAgICAgdmlzaWJsZTogZGVmYXVsdExheWVyUHJvcHMudmlzaWJsZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRSYWRpdXM6IGQgPT4gZC5yYWRpdXMsXG4gICAgICAgICAgICAgIHJhZGl1c1NjYWxlOiAxLFxuICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFTQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFBc0UsSUFBQUssU0FBQTtBQUFBLFNBQUFDLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFB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
;