UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

132 lines (131 loc) 21.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _d3Scale = require("d3-scale"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _d3Array = require("d3-array"); var _window = require("global/window"); var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } var StyledLegend = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", "px;\n height: ", "px;\n position: relative;\n svg {\n circle {\n stroke: ", ";\n fill: none;\n }\n line {\n stroke: ", ";\n stroke-dasharray: 2, 1;\n }\n }\n"])), function (props) { return props.width; }, function (props) { return props.height; }, function (props) { return props.theme.borderColorLT; }, function (props) { return props.theme.borderColor; }); var LabelsOuter = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n text-align: right;\n position: absolute;\n left: 0;\n top: 0;\n width: ", "px;\n height: ", "px;\n"])), function (props) { return props.width; }, function (props) { return props.height; }); var tickHeight = 9; var ValueLabel = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n font-size: ", "px;\n height: ", "px;\n line-height: ", "px;\n margin-top: -", "px;\n color: ", ";\n background-color: ", ";\n padding: 0 2px;\n border-radius: 2px;\n"])), tickHeight, tickHeight, tickHeight, tickHeight / 2, function (props) { return props.theme.textColor; }, function (props) { return props.theme.mapPanelBackgroundColor; }); var margin = { left: 1, top: 5, right: 2, bottom: 5 }; var RadiusLegend = function RadiusLegend(_ref) { var scaleType = _ref.scaleType, width = _ref.width, domain = _ref.domain, range = _ref.range, fieldType = _ref.fieldType; var radiusScale = (0, _react.useMemo)(function () { if (scaleType !== _src.SCALE_TYPES.sqrt) { _window.console.warn("Unsupported radius scale type: ".concat(scaleType)); return undefined; } if (!Array.isArray(domain) || !domain.every(Number.isFinite)) { return undefined; } return (0, _d3Scale.scaleSqrt)().domain(domain).range(range); }, [domain, range, scaleType]); var radiusTicks = (0, _react.useMemo)(function () { if (radiusScale === undefined) return []; var numTicksToFit = Math.min(10, (range[1] - range[0]) * 2 / tickHeight); var ticks = radiusScale.ticks(numTicksToFit); // Add min and max values if (ticks[0] > domain[0]) { ticks.unshift(domain[0]); } if (ticks[ticks.length - 1] < domain[1]) { ticks.push(domain[1]); } // Make sure there is no overlap return ticks.reduceRight(function (acc, v) { if (acc.length === 0 || Math.abs(radiusScale(acc[0]) - radiusScale(v)) * 2 > tickHeight) { // @ts-ignore acc.unshift(v); } return acc; }, new Array()); }, [radiusScale, domain, range]); if (!radiusScale || !radiusTicks.length) { return null; } var maxR = Math.ceil(radiusScale((0, _d3Array.max)(radiusTicks) || 0)); var w = width - margin.left - margin.right; var h = maxR * 2; var height = h + margin.top + margin.bottom; return /*#__PURE__*/_react["default"].createElement(StyledLegend, { width: width, height: height }, /*#__PURE__*/_react["default"].createElement("svg", { width: width, height: height }, /*#__PURE__*/_react["default"].createElement("g", { transform: "translate(".concat(margin.left, ",").concat(margin.top, ")") }, /*#__PURE__*/_react["default"].createElement("g", null, radiusTicks.map(function (v, i) { return /*#__PURE__*/_react["default"].createElement("g", { key: i }, /*#__PURE__*/_react["default"].createElement("g", { transform: "translate(".concat(w, ",").concat(h - radiusScale(v) * 2, ")") }, /*#__PURE__*/_react["default"].createElement("line", { x1: 0, x2: maxR - w }))); })), /*#__PURE__*/_react["default"].createElement("g", null, radiusTicks.map(function (v, i) { var r = radiusScale(v); return /*#__PURE__*/_react["default"].createElement("g", { key: i }, /*#__PURE__*/_react["default"].createElement("g", { transform: "translate(0,".concat(h - r * 2, ")") }, /*#__PURE__*/_react["default"].createElement("circle", { cx: maxR, cy: r, r: Math.max(0, r - 1) /* stroke is drawn outside, hence r-1 */ }))); })))), /*#__PURE__*/_react["default"].createElement(LabelsOuter, { width: width, height: height }, radiusTicks.map(function (v, i) { return /*#__PURE__*/_react["default"].createElement(ValueLabel, { key: i, style: { right: margin.right, top: margin.top + h - radiusScale(v) * 2 } }, (0, _src2.formatNumber)(v, fieldType)); }))); }; var _default = exports["default"] = RadiusLegend; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZDNTY2FsZSIsIl9zcmMiLCJfc3JjMiIsIl9kM0FycmF5IiwiX3dpbmRvdyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkTGVnZW5kIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsIndpZHRoIiwiaGVpZ2h0IiwidGhlbWUiLCJib3JkZXJDb2xvckxUIiwiYm9yZGVyQ29sb3IiLCJMYWJlbHNPdXRlciIsInRpY2tIZWlnaHQiLCJWYWx1ZUxhYmVsIiwidGV4dENvbG9yIiwibWFwUGFuZWxCYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW4iLCJsZWZ0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJSYWRpdXNMZWdlbmQiLCJfcmVmIiwic2NhbGVUeXBlIiwiZG9tYWluIiwicmFuZ2UiLCJmaWVsZFR5cGUiLCJyYWRpdXNTY2FsZSIsInVzZU1lbW8iLCJTQ0FMRV9UWVBFUyIsInNxcnQiLCJDb25zb2xlIiwid2FybiIsImNvbmNhdCIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzY2FsZVNxcnQiLCJyYWRpdXNUaWNrcyIsIm51bVRpY2tzVG9GaXQiLCJNYXRoIiwibWluIiwidGlja3MiLCJ1bnNoaWZ0IiwibGVuZ3RoIiwicHVzaCIsInJlZHVjZVJpZ2h0IiwiYWNjIiwidiIsImFicyIsIm1heFIiLCJjZWlsIiwibWF4IiwidyIsImgiLCJjcmVhdGVFbGVtZW50IiwidHJhbnNmb3JtIiwibWFwIiwia2V5IiwieDEiLCJ4MiIsImN4IiwiY3kiLCJzdHlsZSIsImZvcm1hdE51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9jb21tb24vcmFkaXVzLWxlZ2VuZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgRkN9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtzY2FsZVNxcnR9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7U0NBTEVfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Zm9ybWF0TnVtYmVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7bWF4fSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5cbmNvbnN0IFN0eWxlZExlZ2VuZCA9IHN0eWxlZC5kaXY8e3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuaGVpZ2h0fXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHN2ZyB7XG4gICAgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5ib3JkZXJDb2xvckxUfTtcbiAgICAgIGZpbGw6IG5vbmU7XG4gICAgfVxuICAgIGxpbmUge1xuICAgICAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJvcmRlckNvbG9yfTtcbiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDE7XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBMYWJlbHNPdXRlciA9IHN0eWxlZC5kaXY8e3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfT5gXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMud2lkdGh9cHg7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy5oZWlnaHR9cHg7XG5gO1xuXG5jb25zdCB0aWNrSGVpZ2h0ID0gOTtcblxuY29uc3QgVmFsdWVMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZm9udC1zaXplOiAke3RpY2tIZWlnaHR9cHg7XG4gIGhlaWdodDogJHt0aWNrSGVpZ2h0fXB4O1xuICBsaW5lLWhlaWdodDogJHt0aWNrSGVpZ2h0fXB4O1xuICBtYXJnaW4tdG9wOiAtJHt0aWNrSGVpZ2h0IC8gMn1weDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5tYXBQYW5lbEJhY2tncm91bmRDb2xvcn07XG4gIHBhZGRpbmc6IDAgMnB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG5gO1xuXG5jb25zdCBtYXJnaW4gPSB7bGVmdDogMSwgdG9wOiA1LCByaWdodDogMiwgYm90dG9tOiA1fTtcblxudHlwZSBQcm9wcyA9IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgc2NhbGVUeXBlOiBzdHJpbmc7XG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXTtcbiAgZmllbGRUeXBlOiBzdHJpbmc7XG4gIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xufTtcblxuY29uc3QgUmFkaXVzTGVnZW5kOiBGQzxQcm9wcz4gPSAoe3NjYWxlVHlwZSwgd2lkdGgsIGRvbWFpbiwgcmFuZ2UsIGZpZWxkVHlwZX0pID0+IHtcbiAgY29uc3QgcmFkaXVzU2NhbGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoc2NhbGVUeXBlICE9PSBTQ0FMRV9UWVBFUy5zcXJ0KSB7XG4gICAgICBDb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIHJhZGl1cyBzY2FsZSB0eXBlOiAke3NjYWxlVHlwZX1gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShkb21haW4pIHx8ICFkb21haW4uZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlU3FydCgpLmRvbWFpbihkb21haW4pLnJhbmdlKHJhbmdlKTtcbiAgfSwgW2RvbWFpbiwgcmFuZ2UsIHNjYWxlVHlwZV0pO1xuXG4gIGNvbnN0IHJhZGl1c1RpY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJhZGl1c1NjYWxlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBudW1UaWNrc1RvRml0ID0gTWF0aC5taW4oMTAsICgocmFuZ2VbMV0gLSByYW5nZVswXSkgKiAyKSAvIHRpY2tIZWlnaHQpO1xuICAgIGNvbnN0IHRpY2tzID0gcmFkaXVzU2NhbGUudGlja3MobnVtVGlja3NUb0ZpdCk7XG4gICAgLy8gQWRkIG1pbiBhbmQgbWF4IHZhbHVlc1xuICAgIGlmICh0aWNrc1swXSA+IGRvbWFpblswXSkge1xuICAgICAgdGlja3MudW5zaGlmdChkb21haW5bMF0pO1xuICAgIH1cbiAgICBpZiAodGlja3NbdGlja3MubGVuZ3RoIC0gMV0gPCBkb21haW5bMV0pIHtcbiAgICAgIHRpY2tzLnB1c2goZG9tYWluWzFdKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIG5vIG92ZXJsYXBcbiAgICByZXR1cm4gdGlja3MucmVkdWNlUmlnaHQoKGFjYywgdikgPT4ge1xuICAgICAgaWYgKGFjYy5sZW5ndGggPT09IDAgfHwgTWF0aC5hYnMocmFkaXVzU2NhbGUoYWNjWzBdKSAtIHJhZGl1c1NjYWxlKHYpKSAqIDIgPiB0aWNrSGVpZ2h0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYWNjLnVuc2hpZnQodik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ldyBBcnJheTxudW1iZXI+KCkpO1xuICB9LCBbcmFkaXVzU2NhbGUsIGRvbWFpbiwgcmFuZ2VdKTtcblxuICBpZiAoIXJhZGl1c1NjYWxlIHx8ICFyYWRpdXNUaWNrcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBtYXhSID0gTWF0aC5jZWlsKHJhZGl1c1NjYWxlKG1heChyYWRpdXNUaWNrcykgfHwgMCkpO1xuICBjb25zdCB3ID0gd2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgY29uc3QgaCA9IG1heFIgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBoICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b207XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkTGVnZW5kIHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgPHN2ZyB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCR7bWFyZ2luLnRvcH0pYH0+XG4gICAgICAgICAgPGc+XG4gICAgICAgICAgICB7cmFkaXVzVGlja3MubWFwKCh2LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxnIGtleT17aX0+XG4gICAgICAgICAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKCR7d30sJHtoIC0gcmFkaXVzU2NhbGUodikgKiAyfSlgfT5cbiAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPXswfSB4Mj17bWF4UiAtIHd9IC8+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2c+XG4gICAgICAgICAgPGc+XG4gICAgICAgICAgICB7cmFkaXVzVGlja3MubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHIgPSByYWRpdXNTY2FsZSh2KTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZyBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKDAsJHtoIC0gciAqIDJ9KWB9PlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICAgICAgY3g9e21heFJ9XG4gICAgICAgICAgICAgICAgICAgICAgY3k9e3J9XG4gICAgICAgICAgICAgICAgICAgICAgcj17TWF0aC5tYXgoMCwgciAtIDEpfSAvKiBzdHJva2UgaXMgZHJhd24gb3V0c2lkZSwgaGVuY2Ugci0xICovXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L2c+XG4gICAgICA8L3N2Zz5cbiAgICAgIDxMYWJlbHNPdXRlciB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAge3JhZGl1c1RpY2tzLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgIDxWYWx1ZUxhYmVsXG4gICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICByaWdodDogbWFyZ2luLnJpZ2h0LFxuICAgICAgICAgICAgICB0b3A6IG1hcmdpbi50b3AgKyBoIC0gcmFkaXVzU2NhbGUodikgKiAyXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb3JtYXROdW1iZXIodiwgZmllbGRUeXBlKX1cbiAgICAgICAgICA8L1ZhbHVlTGFiZWw+XG4gICAgICAgICkpfVxuICAgICAgPC9MYWJlbHNPdXRlcj5cbiAgICA8L1N0eWxlZExlZ2VuZD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJhZGl1c0xlZ2VuZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLElBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUFpRCxJQUFBUSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBVGpEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWIsd0JBQUFhLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFH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