UNPKG

kepler.gl

Version:

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

214 lines (210 loc) 22.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.IndexedDataContainer = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _dataRow = require("./data-row"); var _marked = /*#__PURE__*/_regenerator["default"].mark(rowsIterator), _marked2 = /*#__PURE__*/_regenerator["default"].mark(columnIterator); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project /** * @param dataContainer * @param indices * @param sharedRow * @returns */ function rowsIterator(dataContainer, indices, sharedRow) { var numRows, rowIndex, mappedRowIndex; return _regenerator["default"].wrap(function rowsIterator$(_context) { while (1) switch (_context.prev = _context.next) { case 0: numRows = indices.length; rowIndex = 0; case 2: if (!(rowIndex < numRows)) { _context.next = 9; break; } mappedRowIndex = indices[rowIndex]; _context.next = 6; return dataContainer.row(mappedRowIndex, sharedRow); case 6: ++rowIndex; _context.next = 2; break; case 9: case "end": return _context.stop(); } }, _marked); } /** * @param dataContainer * @param indices * @param columnIndex * @returns */ function columnIterator(dataContainer, indices, columnIndex) { var numRows, rowIndex, mappedRowIndex; return _regenerator["default"].wrap(function columnIterator$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: numRows = indices.length; rowIndex = 0; case 2: if (!(rowIndex < numRows)) { _context2.next = 9; break; } mappedRowIndex = indices[rowIndex]; _context2.next = 6; return dataContainer.valueAt(mappedRowIndex, columnIndex); case 6: ++rowIndex; _context2.next = 2; break; case 9: case "end": return _context2.stop(); } }, _marked2); } /** * A data container wrapper around another data container. * You have to pass an array of indices to reference rows in the parent data container. * For example indices [3, 4, 6, 8] means that IndexedDataContainer is going to have * 4 rows and row(2) points to 6th row in the referenced data container. */ var IndexedDataContainer = exports.IndexedDataContainer = /*#__PURE__*/function () { function IndexedDataContainer(parentDataContainer, indices) { (0, _classCallCheck2["default"])(this, IndexedDataContainer); (0, _defineProperty2["default"])(this, "_parentDataContainer", void 0); (0, _defineProperty2["default"])(this, "_indices", void 0); this._parentDataContainer = parentDataContainer; this._indices = indices; } return (0, _createClass2["default"])(IndexedDataContainer, [{ key: "numRows", value: function numRows() { return this._indices.length; } }, { key: "numColumns", value: function numColumns() { return this._parentDataContainer.numColumns(); } /** * Remaps a local index to an index in the parent dataset * @param rowIndex * @returns number */ }, { key: "_mappedRowIndex", value: function _mappedRowIndex(rowIndex) { return this._indices[rowIndex]; } }, { key: "valueAt", value: function valueAt(rowIndex, columnIndex) { return this._parentDataContainer.valueAt(this._mappedRowIndex(rowIndex), columnIndex); } }, { key: "row", value: function row(rowIndex, sharedRow) { return this._parentDataContainer.row(this._mappedRowIndex(rowIndex), sharedRow); } }, { key: "rowAsArray", value: function rowAsArray(rowIndex) { return this._parentDataContainer.rowAsArray(this._mappedRowIndex(rowIndex)); } }, { key: "rows", value: function rows(sharedRow) { return rowsIterator(this._parentDataContainer, this._indices, sharedRow); } }, { key: "column", value: function column(columnIndex) { return columnIterator(this._parentDataContainer, this._indices, columnIndex); } }, { key: "getPlainIndex", value: function getPlainIndex() { return this._indices.map(function (_, i) { return i; }); } }, { key: "flattenData", value: function flattenData() { var _this = this; var tSharedRow = _dataRow.DataRow.createSharedRow(true); return this._indices.map(function (_, i) { return _this.row(i, tSharedRow).values(); }, this); } }, { key: "map", value: function map(func, sharedRow) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _options$start = options.start, start = _options$start === void 0 ? 0 : _options$start, _options$end = options.end, end = _options$end === void 0 ? this.numRows() : _options$end; var endRow = Math.min(this.numRows(), end); var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); var out = []; for (var rowIndex = start; rowIndex < endRow; ++rowIndex) { var row = this.row(rowIndex, tSharedRow); out.push(func(row, rowIndex)); } return out; } }, { key: "mapIndex", value: function mapIndex(func) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _options$start2 = options.start, start = _options$start2 === void 0 ? 0 : _options$start2, _options$end2 = options.end, end = _options$end2 === void 0 ? this.numRows() : _options$end2; var endRow = Math.min(this.numRows(), end); var out = []; for (var rowIndex = start; rowIndex < endRow; ++rowIndex) { out.push(func({ index: this._mappedRowIndex(rowIndex) }, this._parentDataContainer)); } return out; } }, { key: "find", value: function find(func, sharedRow) { var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); for (var rowIndex = 0; rowIndex < this.numRows(); ++rowIndex) { var row = this.row(rowIndex, tSharedRow); if (func(row, rowIndex)) { return row; } } return undefined; } }, { key: "reduce", value: function reduce(func, initialValue, sharedRow) { var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); for (var rowIndex = 0; rowIndex < this._indices.length; ++rowIndex) { var row = this.row(rowIndex, tSharedRow); initialValue = func(initialValue, row, rowIndex); } return initialValue; } }]); }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0YVJvdyIsInJlcXVpcmUiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsInJvd3NJdGVyYXRvciIsIl9tYXJrZWQyIiwiY29sdW1uSXRlcmF0b3IiLCJkYXRhQ29udGFpbmVyIiwiaW5kaWNlcyIsInNoYXJlZFJvdyIsIm51bVJvd3MiLCJyb3dJbmRleCIsIm1hcHBlZFJvd0luZGV4Iiwid3JhcCIsInJvd3NJdGVyYXRvciQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwicm93Iiwic3RvcCIsImNvbHVtbkluZGV4IiwiY29sdW1uSXRlcmF0b3IkIiwiX2NvbnRleHQyIiwidmFsdWVBdCIsIkluZGV4ZWREYXRhQ29udGFpbmVyIiwiZXhwb3J0cyIsInBhcmVudERhdGFDb250YWluZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIl9wYXJlbnREYXRhQ29udGFpbmVyIiwiX2luZGljZXMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJudW1Db2x1bW5zIiwiX21hcHBlZFJvd0luZGV4Iiwicm93QXNBcnJheSIsInJvd3MiLCJjb2x1bW4iLCJnZXRQbGFpbkluZGV4IiwibWFwIiwiXyIsImkiLCJmbGF0dGVuRGF0YSIsIl90aGlzIiwidFNoYXJlZFJvdyIsIkRhdGFSb3ciLCJjcmVhdGVTaGFyZWRSb3ciLCJ2YWx1ZXMiLCJmdW5jIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9vcHRpb25zJHN0YXJ0Iiwic3RhcnQiLCJfb3B0aW9ucyRlbmQiLCJlbmQiLCJlbmRSb3ciLCJNYXRoIiwibWluIiwib3V0IiwicHVzaCIsIm1hcEluZGV4IiwiX29wdGlvbnMkc3RhcnQyIiwiX29wdGlvbnMkZW5kMiIsImluZGV4IiwiZmluZCIsInJlZHVjZSIsImluaXRpYWxWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleGVkLWRhdGEtY29udGFpbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge0RhdGFSb3csIFNoYXJlZFJvd09wdGlvbnN9IGZyb20gJy4vZGF0YS1yb3cnO1xuXG4vKipcbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyXG4gKiBAcGFyYW0gaW5kaWNlc1xuICogQHBhcmFtIHNoYXJlZFJvd1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIHJvd3NJdGVyYXRvcihcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgaW5kaWNlczogbnVtYmVyW10sXG4gIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9uc1xuKTogR2VuZXJhdG9yPERhdGFSb3c+IHtcbiAgY29uc3QgbnVtUm93cyA9IGluZGljZXMubGVuZ3RoO1xuICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgbnVtUm93czsgKytyb3dJbmRleCkge1xuICAgIGNvbnN0IG1hcHBlZFJvd0luZGV4ID0gaW5kaWNlc1tyb3dJbmRleF07XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cobWFwcGVkUm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGluZGljZXNcbiAqIEBwYXJhbSBjb2x1bW5JbmRleFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIGNvbHVtbkl0ZXJhdG9yKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBpbmRpY2VzOiBudW1iZXJbXSxcbiAgY29sdW1uSW5kZXg6IG51bWJlclxuKTogR2VuZXJhdG9yPGFueT4ge1xuICBjb25zdCBudW1Sb3dzID0gaW5kaWNlcy5sZW5ndGg7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgY29uc3QgbWFwcGVkUm93SW5kZXggPSBpbmRpY2VzW3Jvd0luZGV4XTtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQobWFwcGVkUm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd3JhcHBlciBhcm91bmQgYW5vdGhlciBkYXRhIGNvbnRhaW5lci5cbiAqIFlvdSBoYXZlIHRvIHBhc3MgYW4gYXJyYXkgb2YgaW5kaWNlcyB0byByZWZlcmVuY2Ugcm93cyBpbiB0aGUgcGFyZW50IGRhdGEgY29udGFpbmVyLlxuICogRm9yIGV4YW1wbGUgaW5kaWNlcyBbMywgNCwgNiwgOF0gbWVhbnMgdGhhdCBJbmRleGVkRGF0YUNvbnRhaW5lciBpcyBnb2luZyB0byBoYXZlXG4gKiA0IHJvd3MgYW5kIHJvdygyKSBwb2ludHMgdG8gNnRoIHJvdyBpbiB0aGUgcmVmZXJlbmNlZCBkYXRhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGNsYXNzIEluZGV4ZWREYXRhQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIF9wYXJlbnREYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBfaW5kaWNlczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IocGFyZW50RGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgaW5kaWNlczogbnVtYmVyW10pIHtcbiAgICB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyID0gcGFyZW50RGF0YUNvbnRhaW5lcjtcbiAgICB0aGlzLl9pbmRpY2VzID0gaW5kaWNlcztcbiAgfVxuXG4gIG51bVJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5sZW5ndGg7XG4gIH1cblxuICBudW1Db2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhdGFDb250YWluZXIubnVtQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbWFwcyBhIGxvY2FsIGluZGV4IHRvIGFuIGluZGV4IGluIHRoZSBwYXJlbnQgZGF0YXNldFxuICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBfbWFwcGVkUm93SW5kZXgocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luZGljZXNbcm93SW5kZXhdO1xuICB9XG5cbiAgdmFsdWVBdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci52YWx1ZUF0KHRoaXMuX21hcHBlZFJvd0luZGV4KHJvd0luZGV4KSwgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgcm93KHJvd0luZGV4OiBudW1iZXIsIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMpOiBEYXRhUm93IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci5yb3codGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpLCBzaGFyZWRSb3cpO1xuICB9XG5cbiAgcm93QXNBcnJheShyb3dJbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkodGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpKTtcbiAgfVxuXG4gIHJvd3Moc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9ucykge1xuICAgIHJldHVybiByb3dzSXRlcmF0b3IodGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lciwgdGhpcy5faW5kaWNlcywgc2hhcmVkUm93KTtcbiAgfVxuXG4gIGNvbHVtbihjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNvbHVtbkl0ZXJhdG9yKHRoaXMuX3BhcmVudERhdGFDb250YWluZXIsIHRoaXMuX2luZGljZXMsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIGdldFBsYWluSW5kZXgoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmRpY2VzLm1hcCgoXywgaSkgPT4gaSk7XG4gIH1cblxuICBmbGF0dGVuRGF0YSgpOiBhbnlbXVtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3codHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJvdyhpLCB0U2hhcmVkUm93KS52YWx1ZXMoKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB7c3RhcnQgPSAwLCBlbmQgPSB0aGlzLm51bVJvd3MoKX0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVuZFJvdyA9IE1hdGgubWluKHRoaXMubnVtUm93cygpLCBlbmQpO1xuXG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KFxuICAgIGZ1bmM6ICh7aW5kZXh9OiB7aW5kZXg6IG51bWJlcn0sIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBULFxuICAgIG9wdGlvbnM6IFJhbmdlT3B0aW9ucyA9IHt9XG4gICk6IFRbXSB7XG4gICAgY29uc3Qge3N0YXJ0ID0gMCwgZW5kID0gdGhpcy5udW1Sb3dzKCl9ID0gb3B0aW9ucztcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1pbih0aGlzLm51bVJvd3MoKSwgZW5kKTtcblxuICAgIGNvbnN0IG91dDogVFtdID0gW107XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBzdGFydDsgcm93SW5kZXggPCBlbmRSb3c7ICsrcm93SW5kZXgpIHtcbiAgICAgIG91dC5wdXNoKGZ1bmMoe2luZGV4OiB0aGlzLl9tYXBwZWRSb3dJbmRleChyb3dJbmRleCl9LCB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmaW5kKFxuICAgIGZ1bmM6IChyb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBEYXRhUm93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLm51bVJvd3MoKTsgKytyb3dJbmRleCkge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3cocm93SW5kZXgsIHRTaGFyZWRSb3cpO1xuICAgICAgaWYgKGZ1bmMocm93LCByb3dJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlZHVjZTxUPihcbiAgICBmdW5jOiAoYWNjOiBULCByb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IFQsXG4gICAgaW5pdGlhbFZhbHVlOiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnNcbiAgKTogVCB7XG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5faW5kaWNlcy5sZW5ndGg7ICsrcm93SW5kZXgpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93KHJvd0luZGV4LCB0U2hhcmVkUm93KTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IGZ1bmMoaW5pdGlhbFZhbHVlLCByb3csIHJvd0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUFxRCxJQUFBQyxPQUFBLGdCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FRM0NDLFlBQVk7RUFBQUMsUUFBQSxnQkFBQUgsWUFBQSxZQUFBQyxJQUFBLENBa0JaRyxjQUFjLEdBOUJ4QjtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBVUYsWUFBWUEsQ0FDcEJHLGFBQXFDLEVBQ3JDQyxPQUFpQixFQUNqQkMsU0FBMkI7RUFBQSxJQUFBQyxPQUFBLEVBQUFDLFFBQUEsRUFBQUMsY0FBQTtFQUFBLE9BQUFWLFlBQUEsWUFBQVcsSUFBQSxVQUFBQyxjQUFBQyxRQUFBO0lBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7TUFBQTtRQUVyQlAsT0FBTyxHQUFHRixPQUFPLENBQUNVLE1BQU07UUFDckJQLFFBQVEsR0FBRyxDQUFDO01BQUE7UUFBQSxNQUFFQSxRQUFRLEdBQUdELE9BQU87VUFBQUssUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtRQUNqQ0ws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