kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
125 lines (121 loc) • 21.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDefaultValueForParameter = 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 _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _core = require("@deck.gl/core");
var _effects = require("@luma.gl/effects");
var _constants = require("@kepler.gl/constants");
var _effect = _interopRequireDefault(require("./effect"));
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; })(); }
function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
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; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var POSTPROCESSING_EFFECTS_DESCS = [_objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.ink), {}, {
"class": _effects.ink
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.brightnessContrast), {}, {
"class": _effects.brightnessContrast
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.hueSaturation), {}, {
"class": _effects.hueSaturation
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.vibrance), {}, {
"class": _effects.vibrance
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.sepia), {}, {
"class": _effects.sepia
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.dotScreen), {}, {
"class": _effects.dotScreen
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.colorHalftone), {}, {
"class": _effects.colorHalftone
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.noise), {}, {
"class": _effects.noise
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.triangleBlur), {}, {
"class": _effects.triangleBlur
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.zoomBlur), {}, {
"class": _effects.zoomBlur
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.tiltShift), {}, {
"class": _effects.tiltShift
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.edgeWork), {}, {
"class": _effects.edgeWork
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.vignette), {}, {
"class": _effects.vignette
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.magnify), {}, {
"class": _effects.magnify
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.hexagonalPixelate), {}, {
"class": _effects.hexagonalPixelate
})];
/**
* Returns default parameter value based on effect description.
* @param name Name of the parameter.
* @param effectDescription Effect's description.
* @param uniformsDesc Effect's uniforms.
* @returns
*/
var getDefaultValueForParameter = exports.getDefaultValueForParameter = function getDefaultValueForParameter(name, effectDescription, uniformsDesc) {
var _ref, _ref2, _description$defaultV;
var description = effectDescription.find(function (param) {
return param.name === name;
});
var uniform = uniformsDesc[name];
return (_ref = (_ref2 = (_description$defaultV = description === null || description === void 0 ? void 0 : description.defaultValue) !== null && _description$defaultV !== void 0 ? _description$defaultV : uniform === null || uniform === void 0 ? void 0 : uniform.value) !== null && _ref2 !== void 0 ? _ref2 : uniform) !== null && _ref !== void 0 ? _ref : description === null || description === void 0 ? void 0 : description.min;
};
var PostProcessingEffect = /*#__PURE__*/function (_Effect) {
// deckEffect: PostProcessEffect | LightingEffect | null;
function PostProcessingEffect(props) {
(0, _classCallCheck2["default"])(this, PostProcessingEffect);
return _callSuper(this, PostProcessingEffect, [props]);
}
(0, _inherits2["default"])(PostProcessingEffect, _Effect);
return (0, _createClass2["default"])(PostProcessingEffect, [{
key: "_initializeEffect",
value: function _initializeEffect() {
var _this = this;
var effectDesc = POSTPROCESSING_EFFECTS_DESCS.find(function (desc) {
return desc.type === _this.type;
});
if (effectDesc) {
var _this$deckEffect;
this.deckEffect = new _core.PostProcessEffect(effectDesc["class"], this.parameters);
var propTypes = (_this$deckEffect = this.deckEffect) === null || _this$deckEffect === void 0 || (_this$deckEffect = _this$deckEffect.module) === null || _this$deckEffect === void 0 ? void 0 : _this$deckEffect.propTypes;
if (propTypes) {
var _this$deckEffect2;
var keys = Object.keys(propTypes);
var defaultParameters = {};
keys.forEach(function (key) {
defaultParameters[key] = getDefaultValueForParameter(key, _this._uiConfig, propTypes);
});
this.parameters = _objectSpread(_objectSpread({}, defaultParameters), this.parameters);
(_this$deckEffect2 = this.deckEffect) === null || _this$deckEffect2 === void 0 || _this$deckEffect2.setProps(this.parameters);
}
}
}
}, {
key: "getDefaultProps",
value: function getDefaultProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return _superPropGet(PostProcessingEffect, "getDefaultProps", this, 3)([_objectSpread({
type: _constants.DEFAULT_POST_PROCESSING_EFFECT_TYPE
}, props)]);
}
}, {
key: "setProps",
value: function setProps(props) {
_superPropGet(PostProcessingEffect, "setProps", this, 3)([props]);
// any uniform updated?
if (props.parameters) {
var _this$deckEffect3;
(_this$deckEffect3 = this.deckEffect) === null || _this$deckEffect3 === void 0 || _this$deckEffect3.setProps(this.parameters);
}
}
}]);
}(_effect["default"]);
var _default = exports["default"] = PostProcessingEffect;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZWZmZWN0cyIsIl9jb25zdGFudHMiLCJfZWZmZWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInIiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIlBPU1RQUk9DRVNTSU5HX0VGRkVDVFNfREVTQ1MiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTIiwiaW5rIiwiYnJpZ2h0bmVzc0NvbnRyYXN0IiwiaHVlU2F0dXJhdGlvbiIsInZpYnJhbmNlIiwic2VwaWEiLCJkb3RTY3JlZW4iLCJjb2xvckhhbGZ0b25lIiwibm9pc2UiLCJ0cmlhbmdsZUJsdXIiLCJ6b29tQmx1ciIsInRpbHRTaGlmdCIsImVkZ2VXb3JrIiwidmlnbmV0dGUiLCJtYWduaWZ5IiwiaGV4YWdvbmFsUGl4ZWxhdGUiLCJnZXREZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXIiLCJleHBvcnRzIiwibmFtZSIsImVmZmVjdERlc2NyaXB0aW9uIiwidW5pZm9ybXNEZXNjIiwiX3JlZiIsIl9yZWYyIiwiX2Rlc2NyaXB0aW9uJGRlZmF1bHRWIiwiZGVzY3JpcHRpb24iLCJmaW5kIiwicGFyYW0iLCJ1bmlmb3JtIiwiZGVmYXVsdFZhbHVlIiwidmFsdWUiLCJtaW4iLCJQb3N0UHJvY2Vzc2luZ0VmZmVjdCIsIl9FZmZlY3QiLCJwcm9wcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsIl9pbml0aWFsaXplRWZmZWN0IiwiX3RoaXMiLCJlZmZlY3REZXNjIiwiZGVzYyIsInR5cGUiLCJfdGhpcyRkZWNrRWZmZWN0IiwiZGVja0VmZmVjdCIsIkRlY2tQb3N0UHJvY2Vzc0VmZmVjdCIsInBhcmFtZXRlcnMiLCJwcm9wVHlwZXMiLCJtb2R1bGUiLCJfdGhpcyRkZWNrRWZmZWN0MiIsImRlZmF1bHRQYXJhbWV0ZXJzIiwiX3VpQ29uZmlnIiwic2V0UHJvcHMiLCJnZXREZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJERUZBVUxUX1BPU1RfUFJPQ0VTU0lOR19FRkZFQ1RfVFlQRSIsIl90aGlzJGRlY2tFZmZlY3QzIiwiRWZmZWN0IiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvcG9zdC1wcm9jZXNzaW5nLWVmZmVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1Bvc3RQcm9jZXNzRWZmZWN0IGFzIERlY2tQb3N0UHJvY2Vzc0VmZmVjdH0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1xuICBicmlnaHRuZXNzQ29udHJhc3QsXG4gIGluayxcbiAgdHJpYW5nbGVCbHVyLFxuICBodWVTYXR1cmF0aW9uLFxuICB2aWJyYW5jZSxcbiAgY29sb3JIYWxmdG9uZSxcbiAgZG90U2NyZWVuLFxuICBlZGdlV29yayxcbiAgbm9pc2UsXG4gIHNlcGlhLFxuICB0aWx0U2hpZnQsXG4gIHZpZ25ldHRlLFxuICB6b29tQmx1cixcbiAgbWFnbmlmeSxcbiAgaGV4YWdvbmFsUGl4ZWxhdGVcbn0gZnJvbSAnQGx1bWEuZ2wvZWZmZWN0cyc7XG5cbmltcG9ydCB7UE9TVFBST0NFU1NJTkdfRUZGRUNUUywgREVGQVVMVF9QT1NUX1BST0NFU1NJTkdfRUZGRUNUX1RZUEV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7RWZmZWN0UHJvcHNQYXJ0aWFsLCBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCBFZmZlY3QgZnJvbSAnLi9lZmZlY3QnO1xuXG5jb25zdCBQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTX0RFU0NTID0gW1xuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5pbmssXG4gICAgY2xhc3M6IGlua1xuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5icmlnaHRuZXNzQ29udHJhc3QsXG4gICAgY2xhc3M6IGJyaWdodG5lc3NDb250cmFzdFxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5odWVTYXR1cmF0aW9uLFxuICAgIGNsYXNzOiBodWVTYXR1cmF0aW9uXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLnZpYnJhbmNlLFxuICAgIGNsYXNzOiB2aWJyYW5jZVxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5zZXBpYSxcbiAgICBjbGFzczogc2VwaWFcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuZG90U2NyZWVuLFxuICAgIGNsYXNzOiBkb3RTY3JlZW5cbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuY29sb3JIYWxmdG9uZSxcbiAgICBjbGFzczogY29sb3JIYWxmdG9uZVxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5ub2lzZSxcbiAgICBjbGFzczogbm9pc2VcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMudHJpYW5nbGVCbHVyLFxuICAgIGNsYXNzOiB0cmlhbmdsZUJsdXJcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuem9vbUJsdXIsXG4gICAgY2xhc3M6IHpvb21CbHVyXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLnRpbHRTaGlmdCxcbiAgICBjbGFzczogdGlsdFNoaWZ0XG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLmVkZ2VXb3JrLFxuICAgIGNsYXNzOiBlZGdlV29ya1xuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy52aWduZXR0ZSxcbiAgICBjbGFzczogdmlnbmV0dGVcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMubWFnbmlmeSxcbiAgICBjbGFzczogbWFnbmlmeVxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5oZXhhZ29uYWxQaXhlbGF0ZSxcbiAgICBjbGFzczogaGV4YWdvbmFsUGl4ZWxhdGVcbiAgfVxuXTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGJhc2VkIG9uIGVmZmVjdCBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSBlZmZlY3REZXNjcmlwdGlvbiBFZmZlY3QncyBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB1bmlmb3Jtc0Rlc2MgRWZmZWN0J3MgdW5pZm9ybXMuXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGVmZmVjdERlc2NyaXB0aW9uOiBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbltdLFxuICB1bmlmb3Jtc0Rlc2M6IGFueVxuKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gZWZmZWN0RGVzY3JpcHRpb24uZmluZChwYXJhbSA9PiBwYXJhbS5uYW1lID09PSBuYW1lKTtcbiAgY29uc3QgdW5pZm9ybSA9IHVuaWZvcm1zRGVzY1tuYW1lXTtcbiAgcmV0dXJuIGRlc2NyaXB0aW9uPy5kZWZhdWx0VmFsdWUgPz8gdW5pZm9ybT8udmFsdWUgPz8gdW5pZm9ybSA/PyBkZXNjcmlwdGlvbj8ubWluO1xufTtcblxuY2xhc3MgUG9zdFByb2Nlc3NpbmdFZmZlY3QgZXh0ZW5kcyBFZmZlY3Qge1xuICAvLyBkZWNrRWZmZWN0OiBQb3N0UHJvY2Vzc0VmZmVjdCB8IExpZ2h0aW5nRWZmZWN0IHwgbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWZmZWN0UHJvcHNQYXJ0aWFsKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgX2luaXRpYWxpemVFZmZlY3QoKSB7XG4gICAgY29uc3QgZWZmZWN0RGVzYyA9IFBPU1RQUk9DRVNTSU5HX0VGRkVDVFNfREVTQ1MuZmluZChkZXNjID0+IGRlc2MudHlwZSA9PT0gdGhpcy50eXBlKTtcbiAgICBpZiAoZWZmZWN0RGVzYykge1xuICAgICAgdGhpcy5kZWNrRWZmZWN0ID0gbmV3IERlY2tQb3N0UHJvY2Vzc0VmZmVjdChlZmZlY3REZXNjLmNsYXNzLCB0aGlzLnBhcmFtZXRlcnMpO1xuXG4gICAgICBjb25zdCBwcm9wVHlwZXMgPSB0aGlzLmRlY2tFZmZlY3Q/Lm1vZHVsZT8ucHJvcFR5cGVzO1xuICAgICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcFR5cGVzKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZGVmYXVsdFBhcmFtZXRlcnNba2V5XSA9IGdldERlZmF1bHRWYWx1ZUZvclBhcmFtZXRlcihrZXksIHRoaXMuX3VpQ29uZmlnLCBwcm9wVHlwZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gey4uLmRlZmF1bHRQYXJhbWV0ZXJzLCAuLi50aGlzLnBhcmFtZXRlcnN9O1xuICAgICAgICB0aGlzLmRlY2tFZmZlY3Q/LnNldFByb3BzKHRoaXMucGFyYW1ldGVycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdFByb3BzKHByb3BzOiBFZmZlY3RQcm9wc1BhcnRpYWwgPSB7fSkge1xuICAgIHJldHVybiBzdXBlci5nZXREZWZhdWx0UHJvcHMoe3R5cGU6IERFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFLCAuLi5wcm9wc30pO1xuICB9XG5cbiAgc2V0UHJvcHMocHJvcHM6IEVmZmVjdFByb3BzUGFydGlhbCkge1xuICAgIHN1cGVyLnNldFByb3BzKHByb3BzKTtcblxuICAgIC8vIGFueSB1bmlmb3JtIHVwZGF0ZWQ/XG4gICAgaWYgKHByb3BzLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuZGVja0VmZmVjdD8uc2V0UHJvcHModGhpcy5wYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9zdFByb2Nlc3NpbmdFZmZlY3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBa0JBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUE4QixTQUFBSyxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4s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