UNPKG

kepler.gl

Version:

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

206 lines (203 loc) 20.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RowDataContainer = 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 sharedRow */ function rowsIterator(dataContainer, sharedRow) { var numRows, rowIndex; return _regenerator["default"].wrap(function rowsIterator$(_context) { while (1) switch (_context.prev = _context.next) { case 0: numRows = dataContainer.numRows(); rowIndex = 0; case 2: if (!(rowIndex < numRows)) { _context.next = 8; break; } _context.next = 5; return dataContainer.row(rowIndex, sharedRow); case 5: ++rowIndex; _context.next = 2; break; case 8: case "end": return _context.stop(); } }, _marked); } /** * @param dataContainer * @param columnIndex */ function columnIterator(dataContainer, columnIndex) { var numRows, rowIndex; return _regenerator["default"].wrap(function columnIterator$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: numRows = dataContainer.numRows(); rowIndex = 0; case 2: if (!(rowIndex < numRows)) { _context2.next = 8; break; } _context2.next = 5; return dataContainer.valueAt(rowIndex, columnIndex); case 5: ++rowIndex; _context2.next = 2; break; case 8: case "end": return _context2.stop(); } }, _marked2); } /** * A data container where all data is stored internally as a 2D array. */ var RowDataContainer = exports.RowDataContainer = /*#__PURE__*/function () { function RowDataContainer(data) { var _data$rows$; (0, _classCallCheck2["default"])(this, RowDataContainer); (0, _defineProperty2["default"])(this, "_rows", void 0); (0, _defineProperty2["default"])(this, "_numColumns", void 0); if (!data.rows) { throw Error('RowDataContainer: no rows provided'); } if (!Array.isArray(data.rows)) { throw Error("RowDataContainer: rows object isn't an array"); } this._rows = data.rows; this._numColumns = ((_data$rows$ = data.rows[0]) === null || _data$rows$ === void 0 ? void 0 : _data$rows$.length) || 0; } return (0, _createClass2["default"])(RowDataContainer, [{ key: "numRows", value: function numRows() { return this._rows.length; } }, { key: "numColumns", value: function numColumns() { return this._numColumns; } }, { key: "valueAt", value: function valueAt(rowIndex, columnIndex) { if (this._rows[rowIndex] === null) { return null; } return this._rows[rowIndex][columnIndex]; } }, { key: "row", value: function row(rowIndex, sharedRow) { var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); if (tSharedRow) { tSharedRow.setSource(this, rowIndex); return tSharedRow; } return new _dataRow.DataRow(this, rowIndex); } }, { key: "rowAsArray", value: function rowAsArray(rowIndex) { return this._rows[rowIndex]; } }, { key: "rows", value: function rows(sharedRow) { var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); return rowsIterator(this, tSharedRow); } }, { key: "column", value: function column(columnIndex) { return columnIterator(this, columnIndex); } }, { key: "flattenData", value: function flattenData() { return this._rows; } }, { key: "getPlainIndex", value: function getPlainIndex() { return this._rows.map(function (_, i) { return i; }); } }, { key: "map", value: function map(func, sharedRow) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); 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 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: rowIndex }, this)); } return out; } }, { key: "find", value: function find(func, sharedRow) { var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow); for (var rowIndex = 0; rowIndex < this._rows.length; ++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._rows.length; ++rowIndex) { var row = this.row(rowIndex, tSharedRow); initialValue = func(initialValue, row, rowIndex); } return initialValue; } }]); }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0YVJvdyIsInJlcXVpcmUiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsInJvd3NJdGVyYXRvciIsIl9tYXJrZWQyIiwiY29sdW1uSXRlcmF0b3IiLCJkYXRhQ29udGFpbmVyIiwic2hhcmVkUm93IiwibnVtUm93cyIsInJvd0luZGV4Iiwid3JhcCIsInJvd3NJdGVyYXRvciQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwicm93Iiwic3RvcCIsImNvbHVtbkluZGV4IiwiY29sdW1uSXRlcmF0b3IkIiwiX2NvbnRleHQyIiwidmFsdWVBdCIsIlJvd0RhdGFDb250YWluZXIiLCJleHBvcnRzIiwiZGF0YSIsIl9kYXRhJHJvd3MkIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJyb3dzIiwiRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJfcm93cyIsIl9udW1Db2x1bW5zIiwibGVuZ3RoIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwibnVtQ29sdW1ucyIsInRTaGFyZWRSb3ciLCJEYXRhUm93IiwiY3JlYXRlU2hhcmVkUm93Iiwic2V0U291cmNlIiwicm93QXNBcnJheSIsImNvbHVtbiIsImZsYXR0ZW5EYXRhIiwiZ2V0UGxhaW5JbmRleCIsIm1hcCIsIl8iLCJpIiwiZnVuYyIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfb3B0aW9ucyRzdGFydCIsInN0YXJ0IiwiX29wdGlvbnMkZW5kIiwiZW5kIiwiZW5kUm93IiwiTWF0aCIsIm1pbiIsIm91dCIsInB1c2giLCJtYXBJbmRleCIsIl9vcHRpb25zJHN0YXJ0MiIsIl9vcHRpb25zJGVuZDIiLCJpbmRleCIsImZpbmQiLCJyZWR1Y2UiLCJpbml0aWFsVmFsdWUiXSwic291cmNlcyI6WyIuLi9zcmMvcm93LWRhdGEtY29udGFpbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YVJvdywgU2hhcmVkUm93T3B0aW9uc30gZnJvbSAnLi9kYXRhLXJvdyc7XG5pbXBvcnQge1Byb3RvRGF0YXNldEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5cbnR5cGUgUm93RGF0YUNvbnRhaW5lcklucHV0ID0ge1xuICByb3dzOiBhbnlbXVtdO1xuICBmaWVsZHM/OiBQcm90b0RhdGFzZXRGaWVsZFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIHNoYXJlZFJvd1xuICovXG5mdW5jdGlvbiogcm93c0l0ZXJhdG9yKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9ucykge1xuICBjb25zdCBudW1Sb3dzID0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cocm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGNvbHVtbkluZGV4XG4gKi9cbmZ1bmN0aW9uKiBjb2x1bW5JdGVyYXRvcihkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IG51bVJvd3M7ICsrcm93SW5kZXgpIHtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd2hlcmUgYWxsIGRhdGEgaXMgc3RvcmVkIGludGVybmFsbHkgYXMgYSAyRCBhcnJheS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvd0RhdGFDb250YWluZXIgaW1wbGVtZW50cyBEYXRhQ29udGFpbmVySW50ZXJmYWNlIHtcbiAgX3Jvd3M6IGFueVtdW107XG4gIF9udW1Db2x1bW5zOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogUm93RGF0YUNvbnRhaW5lcklucHV0KSB7XG4gICAgaWYgKCFkYXRhLnJvd3MpIHtcbiAgICAgIHRocm93IEVycm9yKCdSb3dEYXRhQ29udGFpbmVyOiBubyByb3dzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEucm93cykpIHtcbiAgICAgIHRocm93IEVycm9yKFwiUm93RGF0YUNvbnRhaW5lcjogcm93cyBvYmplY3QgaXNuJ3QgYW4gYXJyYXlcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fcm93cyA9IGRhdGEucm93cztcbiAgICB0aGlzLl9udW1Db2x1bW5zID0gZGF0YS5yb3dzWzBdPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIG51bVJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm93cy5sZW5ndGg7XG4gIH1cblxuICBudW1Db2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX251bUNvbHVtbnM7XG4gIH1cblxuICB2YWx1ZUF0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGlmICh0aGlzLl9yb3dzW3Jvd0luZGV4XSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb3dzW3Jvd0luZGV4XVtjb2x1bW5JbmRleF07XG4gIH1cblxuICByb3cocm93SW5kZXg6IG51bWJlciwgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9ucyk6IERhdGFSb3cge1xuICAgIGNvbnN0IHRTaGFyZWRSb3cgPSBEYXRhUm93LmNyZWF0ZVNoYXJlZFJvdyhzaGFyZWRSb3cpO1xuICAgIGlmICh0U2hhcmVkUm93KSB7XG4gICAgICB0U2hhcmVkUm93LnNldFNvdXJjZSh0aGlzLCByb3dJbmRleCk7XG4gICAgICByZXR1cm4gdFNoYXJlZFJvdztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGFSb3codGhpcywgcm93SW5kZXgpO1xuICB9XG5cbiAgcm93QXNBcnJheShyb3dJbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9yb3dzW3Jvd0luZGV4XTtcbiAgfVxuXG4gIHJvd3Moc2hhcmVkUm93OiBTaGFyZWRSb3dPcHRpb25zKSB7XG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG4gICAgcmV0dXJuIHJvd3NJdGVyYXRvcih0aGlzLCB0U2hhcmVkUm93KTtcbiAgfVxuXG4gIGNvbHVtbihjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNvbHVtbkl0ZXJhdG9yKHRoaXMsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIGZsYXR0ZW5EYXRhKCk6IGFueVtdW10ge1xuICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICB9XG5cbiAgZ2V0UGxhaW5JbmRleCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3MubWFwKChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGNvbnN0IHtzdGFydCA9IDAsIGVuZCA9IHRoaXMubnVtUm93cygpfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4odGhpcy5udW1Sb3dzKCksIGVuZCk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KFxuICAgIGZ1bmM6ICh7aW5kZXg6IG51bWJlcn0sIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBULFxuICAgIG9wdGlvbnM6IFJhbmdlT3B0aW9ucyA9IHt9XG4gICk6IFRbXSB7XG4gICAgY29uc3Qge3N0YXJ0ID0gMCwgZW5kID0gdGhpcy5udW1Sb3dzKCl9ID0gb3B0aW9ucztcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1pbih0aGlzLm51bVJvd3MoKSwgZW5kKTtcblxuICAgIGNvbnN0IG91dDogVFtdID0gW107XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBzdGFydDsgcm93SW5kZXggPCBlbmRSb3c7ICsrcm93SW5kZXgpIHtcbiAgICAgIG91dC5wdXNoKGZ1bmMoe2luZGV4OiByb3dJbmRleH0sIHRoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZpbmQoXG4gICAgZnVuYzogKHJvdzogRGF0YVJvdywgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBzaGFyZWRSb3c/OiBTaGFyZWRSb3dPcHRpb25zXG4gICk6IERhdGFSb3cgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRTaGFyZWRSb3cgPSBEYXRhUm93LmNyZWF0ZVNoYXJlZFJvdyhzaGFyZWRSb3cpO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHRoaXMuX3Jvd3MubGVuZ3RoOyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBpZiAoZnVuYyhyb3csIHJvd0luZGV4KSkge1xuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVkdWNlPFQ+KFxuICAgIGZ1bmM6IChhY2M6IFQsIHJvdzogRGF0YVJvdywgaW5kZXg6IG51bWJlcikgPT4gVCxcbiAgICBpbml0aWFsVmFsdWU6IFQsXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBUIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLl9yb3dzLmxlbmd0aDsgKytyb3dJbmRleCkge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3cocm93SW5kZXgsIHRTaGFyZWRSb3cpO1xuICAgICAgaW5pdGlhbFZhbHVlID0gZnVuYyhpbml0aWFsVmFsdWUsIHJvdywgcm93SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbFZhbHVlO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQXFELElBQUFDLE9BQUEsZ0JBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQWEzQ0MsWUFBWTtFQUFBQyxRQUFBLGdCQUFBSCxZQUFBLFlBQUFDLElBQUEsQ0FXWkcsY0FBYyxHQTNCeEI7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBVUYsWUFBWUEsQ0FBQ0csYUFBcUMsRUFBRUMsU0FBMkI7RUFBQSxJQUFBQyxPQUFBLEVBQUFDLFFBQUE7RUFBQSxPQUFBUixZQUFBLFlBQUFTLElBQUEsVUFBQUMsY0FBQUMsUUFBQTtJQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO01BQUE7UUFDakZOLE9BQU8sR0FBR0YsYUFBYSxDQUFDRSxPQUFPLENBQUMsQ0FBQztRQUM5QkMsUUFBUSxHQUFHLENBQUM7TUFBQTtRQUFBLE1BQUVBLFFBQVEsR0FBR0QsT0FBTztVQUFBSSxRQUFBLENBQUFFLElBQUE7VUFBQTtRQUFBO1FBQUFGLFFBQUEsQ0FBQUUsSUFBQTtRQUN2QyxPQUFNUixhQUFhLENBQUNTLEdBQUcsQ0FBQ04sUUFBUSxFQUFFRixTQUFTLENBQUM7TUFBQTtRQURILEVBQUVFLFFBQVE7UUFBQUcsUUFBQSxDQUFBRSxJQUFBO1FBQUE7TUFBQTtNQUFBO1FBQUEsT0FBQUYsUUFBQSxDQUFBSSxJQUFBO0lBQUE7RUFBQSxHQUFBaEIsT0FBQTtBQUFBOztBQUt2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVVLLGNBQWNBLENBQUNDLGFBQXFDLEVBQUVXLFdBQW1CO0VBQUEsSUFBQVQsT0FBQSxFQUFBQyxRQUFBO0VBQUEsT0FBQVIsWUFBQSxZQUFBUyxJQUFBLFVBQUFRLGdCQUFBQyxTQUFBO0lBQUEsa0JBQUFBLFNBQUEsQ0FBQU4sSUFBQSxHQUFBTSxTQUFBLENBQUFMLElBQUE7TUFBQTtRQUMzRU4sT0FBTyxHQUFHRixhQUFhLENBQUNFLE9BQU8sQ0FBQyxDQUFDO1FBQzlCQyxRQUFRLEdBQUcsQ0FBQztNQUFBO1FBQUEsTUFBRUEsUUFBUSxHQUFHRCxPQUFPO1VBQUFXLFNBQUEsQ0FBQUwsSUFBQTtVQUFBO1FBQUE7UUFBQUssU0FBQSxDQUFBTCxJQUFBO1FBQ3ZDLE9BQU1SLGFBQWEsQ0FBQ2MsT0FBTyxDQUFDWCxRQUFRLEVBQUVRLFdBQVcsQ0FBQztNQUFBO1FBRFQsRUFBRVIsUUFBUTtRQUFBVSxTQUFBLENBQUFMLElBQUE7UUFBQTtNQUFBO01BQUE7UUFBQSxPQUFBSyxTQUFBLENBQUFILElBQUE7SUFBQTtFQUFBLEdBQUFaLFFBQUE7QUFBQTs7QUFLdkQ7QUFDQTtBQUNBO0FBRkEsSUFHYWlCLGdCQUFnQixHQUFBQyxPQUFBLENBQUFELGdCQUFBO0VBSTNCLFNBQUFBLGlCQUFZRSxJQUEyQixFQUFFO0lBQUEsSUFBQUMsV0FBQTtJQUFBLElBQUFDLGdCQUFBLG1CQUFBSixnQkFBQTtJQUFBLElBQUFLLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUE7SUFDdkMsSUFBSSxDQUFDSCxJQUFJLENBQUNJLElBQUksRUFBRTtNQUNkLE1BQU1DLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQztJQUNuRDtJQUVBLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNQLElBQUksQ0FBQ0ksSUFBSSxDQUFDLEVBQUU7TUFDN0IsTUFBTUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDO0lBQzdEO0lBRUEsSUFBSSxDQUFDRyxLQUFLLEdBQUdSLElBQUksQ0FBQ0ksSUFBSTtJQUN0QixJQUFJLENBQUNLLFdBQVcsR0FBRyxFQUFBUixXQUFBLEdBQUFELElBQUksQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFBSCxXQUFBLHVCQUFaQSxXQUFBLENBQWNTLE1BQU0sS0FBSSxDQUFDO0VBQzlDO0VBQUMsV0FBQUMsYUFBQSxhQUFBYixnQkFBQTtJQUFBYyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBNUIsT0FBT0EsQ0FBQSxFQUFXO01BQ2hCLE9BQU8sSUFBSSxDQUFDdUIsS0FBSyxDQUFDRSxNQUFNO0lBQzFCO0VBQUM7SUFBQUUsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUMsVUFBVUEsQ0FBQSxFQUFXO01BQ25CLE9BQU8sSUFBSSxDQUFDTCxXQUFXO0lBQ3pCO0VBQUM7SUFBQUcsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWhCLE9BQU9BLENBQUNYLFFBQWdCLEVBQUVRLFdBQW1CLEVBQU87TUFDbEQsSUFBSSxJQUFJLENBQUNjLEtBQUssQ0FBQ3RCLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQyxPQUFPLElBQUk7TUFDYjtNQUNBLE9BQU8sSUFBSSxDQUFDc0IsS0FBSyxDQUFDdEIsUUFBUSxDQUFDLENBQUNRLFdBQVcsQ0FBQztJQUMxQztFQUFDO0lBQUFrQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBckIsR0FBR0EsQ0FBQ04sUUFBZ0IsRUFBRUYsU0FBNEIsRUFBVztNQUMzRCxJQUFNK0IsVUFBVSxHQUFHQyxnQkFBTyxDQUFDQyxlQUFlLENBQUNqQyxTQUFTLENBQUM7TUFDckQsSUFBSStCLFVBQVUsRUFBRTtRQUNkQSxVQUFVLENBQUNHLFNBQVMsQ0FBQyxJQUFJLEVBQUVoQyxRQUFRLENBQUM7UUFDcEMsT0FBTzZCLFVBQVU7TUFDbkI7TUFFQSxPQUFPLElBQUlDLGdCQUFPLENBQUMsSUFBSSxFQUFFOUIsUUFBUSxDQUFDO0lBQ3BDO0VBQUM7SUFBQTBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFNLFVBQVVBLENBQUNqQyxRQUFnQixFQUFTO01BQ2xDLE9BQU8sSUFBSSxDQUFDc0IsS0FBSyxDQUFDdEIsUUFBUSxDQUFDO0lBQzdCO0VBQUM7SUFBQTBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFULElBQUlBLENBQUNwQixTQUEyQixFQUFFO01BQ2hDLElBQU0rQixVQUFVLEdBQUdDLGdCQUFPLENBQUNDLGVBQWUsQ0FBQ2pDLFNBQVMsQ0FBQztNQUNyRCxPQUFPSixZQUFZLENBQUMsSUFBSSxFQUFFbUMsVUFBVSxDQUFDO0lBQ3ZDO0VBQUM7SUFBQUgsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQU8sTUFBTUEsQ0FBQzFCLFdBQW1CLEVBQUU7TUFDMUIsT0FBT1osY0FBYyxDQUFDLElBQUksRUFBRVksV0FBVyxDQUFDO0lBQzFDO0VBQUM7SUFBQWtCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFRLFdBQVdBLENBQUEsRUFBWTtNQUNyQixPQUFPLElBQUksQ0FBQ2IsS0FBSztJQUNuQjtFQUFDO0lBQUFJLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFTLGFBQWFBLENBQUEsRUFBYTtNQUN4QixPQUFPLElBQUksQ0FBQ2QsS0FBSyxDQUFDZSxHQUFHLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxDQUFDO1FBQUEsT0FBS0EsQ0FBQztNQUFBLEVBQUM7SUFDcEM7RUFBQztJQUFBYixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBVSxHQUFHQSxDQUNERyxJQUF3QyxFQUN4QzFDLFNBQTRCLEVBRXZCO01BQUEsSUFETDJDLE9BQXFCLEdBQUFDLFNBQUEsQ0FBQWxCLE1BQUEsUUFBQWtCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO01BRTFCLElBQU1iLFVBQVUsR0FBR0MsZ0JBQU8sQ0FBQ0MsZUFBZSxDQUFDakMsU0FBUyxDQUFDO01BRXJELElBQUE4QyxjQUFBLEdBQTBDSCxPQUFPLENBQTFDSSxLQUFLO1FBQUxBLEtBQUssR0FBQUQsY0FBQSxjQUFHLENBQUMsR0FBQUEsY0FBQTtRQUFBRSxZQUFBLEdBQTBCTCxPQUFPLENBQS9CTSxHQUFHO1FBQUhBLEdBQUcsR0FBQUQsWUFBQSxjQUFHLElBQUksQ0FBQy9DLE9BQU8sQ0FBQyxDQUFDLEdBQUErQyxZQUFBO01BQ3RDLElBQU1FLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDbkQsT0FBTyxDQUFDLENBQUMsRUFBRWdELEdBQUcsQ0FBQztNQUU1QyxJQUFNSSxHQUFRLEdBQUcsRUFBRTtNQUNuQixLQUFLLElBQUluRCxRQUFRLEdBQUc2QyxLQUFLLEVBQUU3QyxRQUFRLEdBQUdnRCxNQUFNLEVBQUUsRUFBRWhELFFBQVEsRUFBRTtRQUN4RCxJQUFNTSxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNOLFFBQVEsRUFBRTZCLFVBQVUsQ0FBQztRQUMxQ3NCLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDWixJQUFJLENBQUNsQyxHQUFHLEVBQUVOLFFBQVEsQ0FBQyxDQUFDO01BQy9CO01BQ0EsT0FBT21ELEdBQUc7SUFDWjtFQUFDO0lBQUF6QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBMEIsUUFBUUEsQ0FDTmIsSUFBd0QsRUFFbkQ7TUFBQSxJQURMQyxPQUFxQixHQUFBQyxTQUFBLENBQUFsQixNQUFBLFFBQUFrQixTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUUxQixJQUFBWSxlQUFBLEdBQTBDYixPQUFPLENBQTFDSSxLQUFLO1FBQUxBLEtBQUssR0FBQVMsZUFBQSxjQUFHLENBQUMsR0FBQUEsZUFBQTtRQUFBQyxhQUFBLEdBQTBCZCxPQUFPLENBQS9CTSxHQUFHO1FBQUhBLEdBQUcsR0FBQVEsYUFBQSxjQUFHLElBQUksQ0FBQ3hELE9BQU8sQ0FBQyxDQUFDLEdBQUF3RCxhQUFBO01BQ3RDLElBQU1QLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDbkQsT0FBTyxDQUFDLENBQUMsRUFBRWdELEdBQUcsQ0FBQztNQUU1QyxJQUFNSSxHQUFRLEdBQUcsRUFBRTtNQUNuQixLQUFLLElBQUluRCxRQUFRLEdBQUc2QyxLQUFLLEVBQUU3QyxRQUFRLEdBQUdnRCxNQUFNLEVBQUUsRUFBRWhELFFBQVEsRUFBRTtRQUN4RG1ELEdBQUcsQ0FBQ0MsSUFBSSxDQUFDWixJQUFJLENBQUM7VUFBQ2dCLEtBQUssRUFBRXhEO1FBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3pDO01BQ0EsT0FBT21ELEdBQUc7SUFDWjtFQUFDO0lBQUF6QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBOEIsSUFBSUEsQ0FDRmpCLElBQThDLEVBQzlDMUMsU0FBNEIsRUFDUDtNQUNyQixJQUFNK0IsVUFBVSxHQUFHQyxnQkFBTyxDQUFDQyxlQUFlLENBQUNqQyxTQUFTLENBQUM7TUFFckQsS0FBSyxJQUFJRSxRQUFRLEdBQUcsQ0FBQyxFQUFFQSxRQUFRLEdBQUcsSUFBSSxDQUFDc0IsS0FBSyxDQUFDRSxNQUFNLEVBQUUsRUFBRXhCLFFBQVEsRUFBRTtRQUMvRCxJQUFNTSxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNOLFFBQVEsRUFBRTZCLFVBQVUsQ0FBQztRQUMxQyxJQUFJVyxJQUFJLENBQUNsQyxHQUFHLEVBQUVOLFFBQVEsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU9NLEdBQUc7UUFDWjtNQUNGO01BQ0EsT0FBT3FDLFNBQVM7SUFDbEI7RUFBQztJQUFBakIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQStCLE1BQU1BLENBQ0psQixJQUFnRCxFQUNoRG1CLFlBQWUsRUFDZjdELFNBQTRCLEVBQ3pCO01BQ0gsSUFBTStCLFVBQVUsR0FBR0MsZ0JBQU8sQ0FBQ0MsZUFBZSxDQUFDakMsU0FBUyxDQUFDO01BRXJELEtBQUssSUFBSUUsUUFBUSxHQUFHLENBQUMsRUFBRUEsUUFBUSxHQUFHLElBQUksQ0FBQ3NCLEtBQUssQ0FBQ0UsTUFBTSxFQUFFLEVBQUV4QixRQUFRLEVBQUU7UUFDL0QsSUFBTU0sR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRyxDQUFDTixRQUFRLEVBQUU2QixVQUFVLENBQUM7UUFDMUM4QixZQUFZLEdBQUduQixJQUFJLENBQUNtQixZQUFZLEVBQUVyRCxHQUFHLEVBQUVOLFFBQVEsQ0FBQztNQUNsRDtNQUNBLE9BQU8yRCxZQUFZO0lBQ3JCO0VBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==