UNPKG

kepler.gl

Version:

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

156 lines (153 loc) 19.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.TableToolComponent = TableToolComponent; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib"); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _duckdb = require("@openassistant/duckdb"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/processors/src"); 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; } // This component will create a new table using the SQL query which will // 1. add a new column // 2. delete a column // 3. rename a column // 4. change the variable type of a column function TableToolComponent(_ref) { var sql = _ref.sql, dbTableName = _ref.dbTableName, newDatasetName = _ref.queryDatasetName; var datasets = (0, _lib.useSelector)(function (state) { return state.demo.keplerGl.map.visState.datasets; }); var queryInProgress = (0, _react.useRef)(null); var dispatch = (0, _lib.useDispatch)(); var _useState = (0, _react.useState)(null), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), error = _useState2[0], setError = _useState2[1]; (0, _react.useEffect)(function () { // check if the newDatasetName is already in the datasets var newDatasetId = Object.keys(datasets).find(function (dataId) { return datasets[dataId].label === newDatasetName; }); // if the newDatasetName is already in the datasets, return if (newDatasetId) return; var addTable = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: if (!queryInProgress.current) { _context2.next = 3; break; } _context2.next = 3; return queryInProgress.current; case 3: // Create a new promise for this query queryInProgress.current = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var duckDB, conn, arrowResult, jsonResult, processedData; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.prev = 0; _context.next = 3; return (0, _duckdb.getDuckDB)(); case 3: duckDB = _context.sent; if (duckDB) { _context.next = 6; break; } throw new Error('DuckDB instance is not initialized'); case 6: if (!(dbTableName && sql)) { _context.next = 22; break; } _context.next = 9; return duckDB.connect(); case 9: conn = _context.sent; _context.next = 12; return conn.query(sql); case 12: arrowResult = _context.sent; // convert arrowResult to a JSON object jsonResult = arrowResult.toArray().map(function (row) { return (0, _duckdb.convertArrowRowToObject)(row); }); // use processFileData to process the rowObject _context.next = 16; return (0, _src2.processFileData)({ content: { fileName: newDatasetName, data: jsonResult }, fileCache: [] }); case 16: processedData = _context.sent; // add the new dataset to the map dispatch((0, _src.addDataToMap)({ datasets: processedData, options: { autoCreateLayers: true, centerMap: true } })); // delete the table from the database _context.next = 20; return conn.query("DROP TABLE ".concat(dbTableName)); case 20: _context.next = 22; return conn.close(); case 22: _context.next = 28; break; case 24: _context.prev = 24; _context.t0 = _context["catch"](0); console.error(_context.t0); setError(_context.t0 instanceof Error ? _context.t0.message : 'Unknown error occurred'); case 28: _context.prev = 28; queryInProgress.current = null; return _context.finish(28); case 31: case "end": return _context.stop(); } }, _callee, null, [[0, 24, 28, 31]]); }))(); // Wait for the query to complete _context2.next = 6; return queryInProgress.current; case 6: case "end": return _context2.stop(); } }, _callee2); })); return function addTable() { return _ref2.apply(this, arguments); }; }(); addTable(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return error ? /*#__PURE__*/_react["default"].createElement("div", { style: { color: 'red', fontSize: '8px' } }, error) : null; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGliIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2R1Y2tkYiIsIl9zcmMiLCJfc3JjMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlRhYmxlVG9vbENvbXBvbmVudCIsIl9yZWYiLCJzcWwiLCJkYlRhYmxlTmFtZSIsIm5ld0RhdGFzZXROYW1lIiwicXVlcnlEYXRhc2V0TmFtZSIsImRhdGFzZXRzIiwidXNlU2VsZWN0b3IiLCJzdGF0ZSIsImRlbW8iLCJrZXBsZXJHbCIsIm1hcCIsInZpc1N0YXRlIiwicXVlcnlJblByb2dyZXNzIiwidXNlUmVmIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImVycm9yIiwic2V0RXJyb3IiLCJ1c2VFZmZlY3QiLCJuZXdEYXRhc2V0SWQiLCJrZXlzIiwiZmluZCIsImRhdGFJZCIsImxhYmVsIiwiYWRkVGFibGUiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlMiIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJwcmV2IiwibmV4dCIsImN1cnJlbnQiLCJfY2FsbGVlIiwiZHVja0RCIiwiY29ubiIsImFycm93UmVzdWx0IiwianNvblJlc3VsdCIsInByb2Nlc3NlZERhdGEiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiZ2V0RHVja0RCIiwic2VudCIsIkVycm9yIiwiY29ubmVjdCIsInF1ZXJ5IiwidG9BcnJheSIsInJvdyIsImNvbnZlcnRBcnJvd1Jvd1RvT2JqZWN0IiwicHJvY2Vzc0ZpbGVEYXRhIiwiY29udGVudCIsImZpbGVOYW1lIiwiZGF0YSIsImZpbGVDYWNoZSIsImFkZERhdGFUb01hcCIsIm9wdGlvbnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiY2VudGVyTWFwIiwiY29uY2F0IiwiY2xvc2UiLCJ0MCIsImNvbnNvbGUiLCJtZXNzYWdlIiwiZmluaXNoIiwic3RvcCIsImFwcGx5IiwiYXJndW1lbnRzIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY29sb3IiLCJmb250U2l6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9haS1hc3Npc3RhbnQvc3JjL3Rvb2xzL2tlcGxlci10b29scy90YWJsZS10b29sLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZVNlbGVjdG9yfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7Z2V0RHVja0RCLCBMb2NhbFF1ZXJ5QWRkaXRpb25hbERhdGEsIGNvbnZlcnRBcnJvd1Jvd1RvT2JqZWN0fSBmcm9tICdAb3BlbmFzc2lzdGFudC9kdWNrZGInO1xuXG5pbXBvcnQge1N0YXRlfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FpLWFzc2lzdGFudC1tYW5hZ2VyJztcbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtwcm9jZXNzRmlsZURhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbi8vIFRoaXMgY29tcG9uZW50IHdpbGwgY3JlYXRlIGEgbmV3IHRhYmxlIHVzaW5nIHRoZSBTUUwgcXVlcnkgd2hpY2ggd2lsbFxuLy8gMS4gYWRkIGEgbmV3IGNvbHVtblxuLy8gMi4gZGVsZXRlIGEgY29sdW1uXG4vLyAzLiByZW5hbWUgYSBjb2x1bW5cbi8vIDQuIGNoYW5nZSB0aGUgdmFyaWFibGUgdHlwZSBvZiBhIGNvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIFRhYmxlVG9vbENvbXBvbmVudCh7XG4gIHNxbCxcbiAgZGJUYWJsZU5hbWUsXG4gIHF1ZXJ5RGF0YXNldE5hbWU6IG5ld0RhdGFzZXROYW1lXG59OiBMb2NhbFF1ZXJ5QWRkaXRpb25hbERhdGEpIHtcbiAgY29uc3QgZGF0YXNldHMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5kZW1vLmtlcGxlckdsLm1hcC52aXNTdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHF1ZXJ5SW5Qcm9ncmVzcyA9IHVzZVJlZjxQcm9taXNlPHZvaWQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIG5ld0RhdGFzZXROYW1lIGlzIGFscmVhZHkgaW4gdGhlIGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmZpbmQoXG4gICAgICBkYXRhSWQgPT4gZGF0YXNldHNbZGF0YUlkXS5sYWJlbCA9PT0gbmV3RGF0YXNldE5hbWVcbiAgICApO1xuICAgIC8vIGlmIHRoZSBuZXdEYXRhc2V0TmFtZSBpcyBhbHJlYWR5IGluIHRoZSBkYXRhc2V0cywgcmV0dXJuXG4gICAgaWYgKG5ld0RhdGFzZXRJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWRkVGFibGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBJZiBhIHF1ZXJ5IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXG4gICAgICBpZiAocXVlcnlJblByb2dyZXNzLmN1cnJlbnQpIHtcbiAgICAgICAgYXdhaXQgcXVlcnlJblByb2dyZXNzLmN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciB0aGlzIHF1ZXJ5XG4gICAgICBxdWVyeUluUHJvZ3Jlc3MuY3VycmVudCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZHVja0RCID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgICAgICAgaWYgKCFkdWNrREIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRHVja0RCIGluc3RhbmNlIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGJUYWJsZU5hbWUgJiYgc3FsKSB7XG4gICAgICAgICAgICAvLyBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZVxuICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IGR1Y2tEQi5jb25uZWN0KCk7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIHByb3ZpZGVkIFNRTCBxdWVyeVxuICAgICAgICAgICAgY29uc3QgYXJyb3dSZXN1bHQgPSBhd2FpdCBjb25uLnF1ZXJ5KHNxbCk7XG5cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgYXJyb3dSZXN1bHQgdG8gYSBKU09OIG9iamVjdFxuICAgICAgICAgICAgY29uc3QganNvblJlc3VsdCA9IGFycm93UmVzdWx0LnRvQXJyYXkoKS5tYXAocm93ID0+IGNvbnZlcnRBcnJvd1Jvd1RvT2JqZWN0KHJvdykpO1xuXG4gICAgICAgICAgICAvLyB1c2UgcHJvY2Vzc0ZpbGVEYXRhIHRvIHByb2Nlc3MgdGhlIHJvd09iamVjdFxuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGF3YWl0IHByb2Nlc3NGaWxlRGF0YSh7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHtmaWxlTmFtZTogbmV3RGF0YXNldE5hbWUsIGRhdGE6IGpzb25SZXN1bHR9LFxuICAgICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gYWRkIHRoZSBuZXcgZGF0YXNldCB0byB0aGUgbWFwXG4gICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgYWRkRGF0YVRvTWFwKHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0czogcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7YXV0b0NyZWF0ZUxheWVyczogdHJ1ZSwgY2VudGVyTWFwOiB0cnVlfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gZGVsZXRlIHRoZSB0YWJsZSBmcm9tIHRoZSBkYXRhYmFzZVxuICAgICAgICAgICAgYXdhaXQgY29ubi5xdWVyeShgRFJPUCBUQUJMRSAke2RiVGFibGVOYW1lfWApO1xuXG4gICAgICAgICAgICAvLyBjbG9zZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgICAgYXdhaXQgY29ubi5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBzZXRFcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yIG9jY3VycmVkJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcXVlcnlJblByb2dyZXNzLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgcXVlcnkgdG8gY29tcGxldGVcbiAgICAgIGF3YWl0IHF1ZXJ5SW5Qcm9ncmVzcy5jdXJyZW50O1xuICAgIH07XG5cbiAgICBhZGRUYWJsZSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlcnJvciA/IDxkaXYgc3R5bGU9e3tjb2xvcjogJ3JlZCcsIGZvbnRTaXplOiAnOHB4J319PntlcnJvcn08L2Rpdj4gOiBudWxsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLElBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUdBLElBQUFJLElBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUFzRCxTQUFBTSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUwsd0JBQUFLLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNXLGtCQUFrQkEsQ0FBQUMsSUFBQSxFQUlMO0VBQUEsSUFIM0JDLEdBQUcsR0FBQUQsSUFBQSxDQUFIQyxHQUFHO0lBQ0hDLFdBQVcsR0FBQUYsSUFBQSxDQUFYRSxXQUFXO0lBQ09DLGNBQWMsR0FBQUgsSUFBQSxDQUFoQ0ksZ0JBQWdCO0VBRWhCLElBQU1DLFFBQVEsR0FBRyxJQUFBQyxnQkFBVyxFQUFDLFVBQUNDLEtBQVk7SUFBQSxPQUFLQSxLQUFLLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyxHQUFHLENBQUNDLFFBQVEsQ0FBQ04sUUFBUTtFQUFBLEVBQUM7RUFDekYsSUFBTU8sZUFBZSxHQUFHLElBQUFDLGFBQU0sRUFBdUIsSUFBSSxDQUFDO0VBQzFELElBQU1DLFFBQVEsR0FBRyxJQUFBQyxnQkFBVyxFQUFDLENBQUM7RUFFOUIsSUFBQUMsU0FBQSxHQUEwQixJQUFBQyxlQUFRLEVBQWdCLElBQUksQ0FBQztJQUFBQyxVQUFBLE9BQUFDLGVBQUEsYUFBQUgsU0FBQTtJQUFoREksS0FBSyxHQUFBRixVQUFBO0lBQUVHLFFBQVEsR0FBQUgsVUFBQTtFQUV0QixJQUFBSSxnQkFBUyxFQUFDLFlBQU07SUFDZDtJQUNBLElBQU1DLFlBQVksR0FBR2hDLE1BQU0sQ0FBQ2lDLElBQUksQ0FBQ25CLFFBQVEsQ0FBQyxDQUFDb0IsSUFBSSxDQUM3QyxVQUFBQyxNQUFNO01BQUEsT0FBSXJCLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEtBQUt4QixjQUFjO0lBQUEsQ0FDckQsQ0FBQztJQUNEO0lBQ0EsSUFBSW9CLFlBQVksRUFBRTtJQUVsQixJQUFNSyxRQUFRO01BQUEsSUFBQUMsS0FBQSxPQUFBQyxrQkFBQSwyQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUcsU0FBQUMsU0FBQTtRQUFBLE9BQUFGLFlBQUEsWUFBQUcsSUFBQSxVQUFBQyxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQUMsSUFBQSxHQUFBRCxTQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLEtBRVgxQixlQUFlLENBQUMyQixPQUFPO2dCQUFBSCxTQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBRixTQUFBLENBQUFFLElBQUE7Y0FBQSxPQUNuQjFCLGVBQWUsQ0FBQzJCLE9BQU87WUFBQTtjQUcvQjtjQUNBM0IsZUFBZSxDQUFDMkIsT0FBTyxHQUFHLElBQUFULGtCQUFBLDJCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBUSxRQUFBO2dCQUFBLElBQUFDLE1BQUEsRUFBQUMsSUFBQSxFQUFBQyxXQUFBLEVBQUFDLFVBQUEsRUFBQUMsYUFBQTtnQkFBQSxPQUFBZCxZQUFBLFlBQUFHLElBQUEsVUFBQVksU0FBQUMsUUFBQTtrQkFBQSxrQkFBQUEsUUFBQSxDQUFBVixJQUFBLEdBQUFVLFFBQUEsQ0FBQVQsSUFBQTtvQkFBQTtzQkFBQVMsUUFBQSxDQUFBVixJQUFBO3NCQUFBVSxRQUFBLENBQUFULElBQUE7c0JBQUEsT0FFRixJQUFBVSxpQkFBUyxFQUFDLENBQUM7b0JBQUE7c0JBQTFCUCxNQUFNLEdBQUFNLFFBQUEsQ0FBQUUsSUFBQTtzQkFBQSxJQUNQUixNQUFNO3dCQUFBTSxRQUFBLENBQUFULElBQUE7d0JBQUE7c0JBQUE7c0JBQUEsTUFDSCxJQUFJWSxLQUFLLENBQUMsb0NBQW9DLENBQUM7b0JBQUE7c0JBQUEsTUFFbkRoRCxXQUFXLElBQUlELEdBQUc7d0JBQUE4QyxRQUFBLENBQUFULElBQUE7d0JBQUE7c0JBQUE7c0JBQUFTLFFBQUEsQ0FBQVQsSUFBQTtzQkFBQSxPQUVERyxNQUFNLENBQUNVLE9BQU8sQ0FBQyxDQUFDO29CQUFBO3NCQUE3QlQsSUFBSSxHQUFBSyxRQUFBLENBQUFFLElBQUE7c0JBQUFGLFFBQUEsQ0FBQVQsSUFBQTtzQkFBQSxPQUdnQkksSUFBSSxDQUFDVSxLQUFLLENBQUNuRCxHQUFHLENBQUM7b0JBQUE7c0JBQW5DMEMsV0FBVyxHQUFBSSxRQUFBLENBQUFFLElBQUE7c0JBRWpCO3NCQUNNTCxVQUFVLEdBQUdELFdBQVcsQ0FBQ1UsT0FBTyxDQUFDLENBQUMsQ0FBQzNDLEdBQUcsQ0FBQyxVQUFBNEMsR0FBRzt3QkFBQSxPQUFJLElBQUFDLCtCQUF1QixFQUFDRCxHQUFHLENBQUM7c0JBQUEsRUFBQyxFQUVqRjtzQkFBQVAsUUFBQSxDQUFBVCxJQUFBO3NCQUFBLE9BQzRCLElBQUFrQixxQkFBZSxFQUFDO3dCQUMxQ0MsT0FBTyxFQUFFOzBCQUFDQyxRQUFRLEVBQUV2RCxjQUFjOzBCQUFFd0QsSUFBSSxFQUFFZjt3QkFBVSxDQUFDO3dCQUNyRGdCLFNBQVMsRUFBRTtzQkFDYixDQUFDLENBQUM7b0JBQUE7c0JBSElmLGFBQWEsR0FBQUUsUUFBQSxDQUFBRSxJQUFBO3NCQUtuQjtzQkFDQW5DLFFBQVEsQ0FDTixJQUFBK0MsaUJBQVksRUFBQzt3QkFDWHhELFFBQVEsRUFBRXdDLGFBQWE7d0JBQ3ZCaUIsT0FBTyxFQUFFOzBCQUFDQyxnQkFBZ0IsRUFBRSxJQUFJOzBCQUFFQyxTQUFTLEVBQUU7d0JBQUk7c0JBQ25ELENBQUMsQ0FDSCxDQUFDOztzQkFFRDtzQkFBQWpCLFFBQUEsQ0FBQVQsSUFBQTtzQkFBQSxPQUNNSSxJQUFJLENBQUNVLEtBQUssZUFBQWEsTUFBQSxDQUFlL0QsV0FBVyxDQUFFLENBQUM7b0JBQUE7c0JBQUE2QyxRQUFBLENBQUFULElBQUE7c0JBQUEsT0FHdkNJLElBQUksQ0FBQ3dCLEtBQUssQ0FBQyxDQUFDO29CQUFBO3NCQUFBbkIsUUFBQSxDQUFBVCxJQUFBO3NCQUFBO29CQUFBO3NCQUFBUyxRQUFBLENBQUFWLElBQUE7c0JBQUFVLFFBQUEsQ0FBQW9CLEVBQUEsR0FBQXBCLFFBQUE7c0JBR3BCcUIsT0FBTyxDQUFDaEQsS0FBSyxDQUFBMkIsUUFBQSxDQUFBb0IsRUFBTSxDQUFDO3NCQUNwQjlDLFFBQVEsQ0FBQzBCLFFBQUEsQ0FBQW9CLEVBQUEsWUFBaUJqQixLQUFLLEdBQUdILFFBQUEsQ0FBQW9CLEVBQUEsQ0FBTUUsT0FBTyxHQUFHLHdCQUF3QixDQUFDO29CQUFDO3NCQUFBdEIsUUFBQSxDQUFBVixJQUFBO3NCQUU1RXpCLGVBQWUsQ0FBQzJCLE9BQU8sR0FBRyxJQUFJO3NCQUFDLE9BQUFRLFFBQUEsQ0FBQXVCLE1BQUE7b0JBQUE7b0JBQUE7c0JBQUEsT0FBQXZCLFFBQUEsQ0FBQXdCLElBQUE7a0JBQUE7Z0JBQUEsR0FBQS9CLE9BQUE7Y0FBQSxDQUVsQyxHQUFFLENBQUM7O2NBRUo7Y0FBQUosU0FBQSxDQUFBRSxJQUFBO2NBQUEsT0FDTTFCLGVBQWUsQ0FBQzJCLE9BQU87WUFBQTtZQUFBO2NBQUEsT0FBQUgsU0FBQSxDQUFBbUMsSUFBQTtVQUFBO1FBQUEsR0FBQXRDLFFBQUE7TUFBQSxDQUM5QjtNQUFBLGdCQXJES0wsUUFBUUEsQ0FBQTtRQUFBLE9BQUFDLEtBQUEsQ0FBQTJDLEtBQUEsT0FBQUMsU0FBQTtNQUFBO0lBQUEsR0FxRGI7SUFFRDdDLFFBQVEsQ0FBQyxDQUFDO0lBQ1Y7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sT0FBT1IsS0FBSyxnQkFBRzlDLE1BQUEsWUFBQW9HLGFBQUE7SUFBS0MsS0FBSyxFQUFFO01BQUNDLEtBQUssRUFBRSxLQUFLO01BQUVDLFFBQVEsRUFBRTtJQUFLO0VBQUUsR0FBRXpELEtBQVcsQ0FBQyxHQUFHLElBQUk7QUFDbEYiLCJpZ25vcmVMaXN0IjpbXX0=