@kepler.gl/duckdb 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.SqlPanel = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
13
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
@@ -14,20 +15,23 @@ var _react = _interopRequireWildcard(require("react"));
14
15
  var _reactRedux = require("react-redux");
15
16
  var _styledComponents = _interopRequireDefault(require("styled-components"));
16
17
  var _reactResizablePanels = require("react-resizable-panels");
17
- var _monacoEditor = _interopRequireDefault(require("./monaco-editor"));
18
- var _schemaPanel = require("./schema-panel");
19
- var _previewDataPanel = require("./preview-data-panel");
20
- var _init = require("../init");
21
- var _components = require("@kepler.gl/components");
22
- var _commonUtils = require("@kepler.gl/common-utils");
23
18
  var _actions = require("@kepler.gl/actions");
19
+ var _commonUtils = require("@kepler.gl/common-utils");
20
+ var _components = require("@kepler.gl/components");
21
+ var _processors = require("@kepler.gl/processors");
24
22
  var _styles = require("@kepler.gl/styles");
25
23
  var _utils = require("@kepler.gl/utils");
26
- var _processors = require("@kepler.gl/processors");
27
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11; // SPDX-License-Identifier: MIT
24
+ var _monacoEditor = _interopRequireDefault(require("./monaco-editor"));
25
+ var _schemaPanel = require("./schema-panel");
26
+ var _previewDataPanel = require("./preview-data-panel");
27
+ var _duckdbTableUtils = require("../table/duckdb-table-utils");
28
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12; // SPDX-License-Identifier: MIT
28
29
  // Copyright contributors to the kepler.gl project
29
30
  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); }
30
31
  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; }
32
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
33
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
34
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
31
35
  var StyledSqlPanel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 100%;\n background-color: ", ";\n border-left: 1px solid #333;\n"])), _styles.sidePanelBg);
32
36
  var StyledSqlActions = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 0 0 50px;\n display: flex;\n padding-top: 12px;\n align-items: center;\n flex-direction: column;\n justify-content: flex-start;\n border-bottom: 1px solid #333;\n"])));
33
37
  var StyledSqlEditor = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n flex: 1;\n min-width: 0; // Prevents flex child from overflowing\n height: 100%;\n"])));
@@ -41,6 +45,11 @@ var StyledResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels
41
45
  var StyledVerticalResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels.PanelResizeHandle)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n height: 4px;\n cursor: row-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), _styles.panelBorderColor);
42
46
  var StyledLoadingContainer = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n"])));
43
47
  var StyledErrorContainer = _styledComponents["default"].pre(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 12px;\n color: red;\n font-size: 12px;\n background-color: ", ";\n height: 100%;\n overflow: auto;\n"])), _styles.sidePanelBg);
48
+ var StyledFileDropArea = (0, _styledComponents["default"])(_components.FileDrop)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n height: 100%;\n border-width: 1px;\n border: 1px ", "\n ", ";\n .file-drop-target {\n height: 100%;\n }\n"])), function (props) {
49
+ return props.dragOver ? 'solid' : 'dashed';
50
+ }, function (props) {
51
+ return props.dragOver ? props.theme.subtextColorLT : 'transparent';
52
+ });
44
53
  var SCHEMA_PANEL_STYLE = {
45
54
  overflow: 'auto'
46
55
  };
@@ -56,30 +65,43 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
56
65
  setSql = _useState2[1];
57
66
  var _useState3 = (0, _react.useState)(null),
58
67
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
59
- result = _useState4[0],
60
- setResult = _useState4[1];
61
- var _useState5 = (0, _react.useState)(null),
68
+ droppedFile = _useState4[0],
69
+ setDroppedFile = _useState4[1];
70
+ var _useState5 = (0, _react.useState)(false),
62
71
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
63
- error = _useState6[0],
64
- setError = _useState6[1];
65
- var _useState7 = (0, _react.useState)(0),
72
+ dragState = _useState6[0],
73
+ setDragState = _useState6[1];
74
+ var _useState7 = (0, _react.useState)(null),
66
75
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
67
- counter = _useState8[0],
68
- setCounter = _useState8[1];
69
- var _useState9 = (0, _react.useState)([]),
76
+ result = _useState8[0],
77
+ setResult = _useState8[1];
78
+ var _useState9 = (0, _react.useState)(0),
70
79
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
71
- tableSchema = _useState10[0],
72
- setTableSchema = _useState10[1];
73
- var _useState11 = (0, _react.useState)(false),
80
+ schemaUpdateTrigger = _useState10[0],
81
+ setSchemaUpdateTrigger = _useState10[1];
82
+ var _useState11 = (0, _react.useState)(null),
74
83
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
75
- isRunning = _useState12[0],
76
- setIsRunning = _useState12[1];
77
- var _useState13 = (0, _react.useState)(function () {
84
+ error = _useState12[0],
85
+ setError = _useState12[1];
86
+ var _useState13 = (0, _react.useState)(0),
87
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
88
+ counter = _useState14[0],
89
+ setCounter = _useState14[1];
90
+ var _useState15 = (0, _react.useState)([]),
91
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
92
+ tableSchema = _useState16[0],
93
+ setTableSchema = _useState16[1];
94
+ var _useState17 = (0, _react.useState)(false),
95
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
96
+ isRunning = _useState18[0],
97
+ setIsRunning = _useState18[1];
98
+ var _useState19 = (0, _react.useState)(function () {
78
99
  return (0, _utils.isAppleDevice)();
79
100
  }),
80
- _useState14 = (0, _slicedToArray2["default"])(_useState13, 1),
81
- isMac = _useState14[0];
101
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 1),
102
+ isMac = _useState20[0];
82
103
  var dispatch = (0, _reactRedux.useDispatch)();
104
+ var droppedFileAreaRef = (0, _react.useRef)(null);
83
105
  (0, _react.useEffect)(function () {
84
106
  var currentUrl = new URL(window.location.href);
85
107
  if (sql) {
@@ -90,61 +112,143 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
90
112
  window.history.replaceState({}, '', currentUrl.toString());
91
113
  }, [sql]);
92
114
  var runQuery = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
93
- var db, connection, arrowResult;
115
+ var adjustedQuery, db, connection, tempTableName, sqlStatements, arrowResult, tableDuckDBTypes, _iterator, _step, statement, isLastQuery, duckDbColumns, columnsToConvertToWKB, _adjustedQuery;
94
116
  return _regenerator["default"].wrap(function _callee$(_context) {
95
117
  while (1) switch (_context.prev = _context.next) {
96
118
  case 0:
97
119
  setIsRunning(true);
98
120
  _context.prev = 1;
99
- if (sql !== null && sql !== void 0 && sql.trim()) {
100
- _context.next = 5;
121
+ adjustedQuery = sql ? (0, _duckdbTableUtils.removeSQLComments)(sql) : null;
122
+ if (adjustedQuery) {
123
+ _context.next = 6;
101
124
  break;
102
125
  }
103
126
  setError(new Error('Query is empty'));
104
127
  return _context.abrupt("return");
105
- case 5:
106
- _context.next = 7;
107
- return (0, _init.getDuckDB)();
108
- case 7:
109
- db = _context.sent;
110
- _context.next = 10;
111
- return db.connect();
128
+ case 6:
129
+ db = (0, _utils.getApplicationConfig)().database;
130
+ if (db) {
131
+ _context.next = 10;
132
+ break;
133
+ }
134
+ setError(new Error('The database is not configured properly.'));
135
+ return _context.abrupt("return");
112
136
  case 10:
137
+ _context.next = 12;
138
+ return db.connect();
139
+ case 12:
113
140
  connection = _context.sent;
114
- _context.next = 13;
115
- return connection.query(sql);
116
- case 13:
141
+ // TODO find a cheap way to get DuckDb types with a single query to a remote resource - temp table? cte?
142
+ tempTableName = 'temp_keplergl_table'; // remove comments
143
+ sqlStatements = (0, _duckdbTableUtils.splitSqlStatements)(adjustedQuery);
144
+ arrowResult = null;
145
+ tableDuckDBTypes = {};
146
+ _iterator = _createForOfIteratorHelper(sqlStatements);
147
+ _context.prev = 18;
148
+ _iterator.s();
149
+ case 20:
150
+ if ((_step = _iterator.n()).done) {
151
+ _context.next = 49;
152
+ break;
153
+ }
154
+ statement = _step.value;
155
+ isLastQuery = statement === sqlStatements[sqlStatements.length - 1];
156
+ _context.t0 = isLastQuery;
157
+ if (!_context.t0) {
158
+ _context.next = 28;
159
+ break;
160
+ }
161
+ _context.next = 27;
162
+ return (0, _duckdbTableUtils.checkIsSelectQuery)(connection, statement);
163
+ case 27:
164
+ _context.t0 = _context.sent;
165
+ case 28:
166
+ if (!_context.t0) {
167
+ _context.next = 45;
168
+ break;
169
+ }
170
+ _context.next = 31;
171
+ return connection.query("CREATE OR REPLACE TABLE '".concat(tempTableName, "' AS ").concat(statement));
172
+ case 31:
173
+ _context.next = 33;
174
+ return (0, _duckdbTableUtils.getDuckDBColumnTypes)(connection, tempTableName);
175
+ case 33:
176
+ duckDbColumns = _context.sent;
177
+ tableDuckDBTypes = (0, _duckdbTableUtils.getDuckDBColumnTypesMap)(duckDbColumns);
178
+ columnsToConvertToWKB = (0, _duckdbTableUtils.getGeometryColumns)(duckDbColumns); // 3) query GEOMETRY columns as WKB.
179
+ _adjustedQuery = (0, _duckdbTableUtils.constructST_asWKBQuery)(tempTableName, columnsToConvertToWKB);
180
+ _context.next = 39;
181
+ return connection.query(_adjustedQuery);
182
+ case 39:
117
183
  arrowResult = _context.sent;
118
- setResult(arrowResult);
119
- setError(null);
120
- connection.close();
121
- _context.next = 22;
184
+ // 4) set geoarrow extension for the arrow table as DuckDB doesn't support the geoarrow extension.
185
+ (0, _duckdbTableUtils.setGeoArrowWKBExtension)(arrowResult, duckDbColumns);
186
+
187
+ // 5) remove temp table
188
+ _context.next = 43;
189
+ return connection.query("DROP TABLE ".concat(tempTableName, ";"));
190
+ case 43:
191
+ _context.next = 47;
192
+ break;
193
+ case 45:
194
+ _context.next = 47;
195
+ return connection.query(statement);
196
+ case 47:
197
+ _context.next = 20;
198
+ break;
199
+ case 49:
200
+ _context.next = 54;
122
201
  break;
123
- case 19:
124
- _context.prev = 19;
125
- _context.t0 = _context["catch"](1);
126
- setError(_context.t0);
127
- case 22:
128
- _context.prev = 22;
202
+ case 51:
203
+ _context.prev = 51;
204
+ _context.t1 = _context["catch"](18);
205
+ _iterator.e(_context.t1);
206
+ case 54:
207
+ _context.prev = 54;
208
+ _iterator.f();
209
+ return _context.finish(54);
210
+ case 57:
211
+ // Show preview only for the result of the last query
212
+ if (arrowResult) {
213
+ setResult({
214
+ table: arrowResult,
215
+ tableDuckDBTypes: tableDuckDBTypes
216
+ });
217
+ setError(null);
218
+ }
219
+ _context.next = 60;
220
+ return connection.close();
221
+ case 60:
222
+ _context.next = 65;
223
+ break;
224
+ case 62:
225
+ _context.prev = 62;
226
+ _context.t2 = _context["catch"](1);
227
+ setError(_context.t2);
228
+ case 65:
229
+ _context.prev = 65;
129
230
  setIsRunning(false);
130
- return _context.finish(22);
131
- case 25:
231
+ return _context.finish(65);
232
+ case 68:
233
+ // Indicate that there may be a possible change in DuckDB.
234
+ setSchemaUpdateTrigger(Date.now());
235
+ case 69:
132
236
  case "end":
133
237
  return _context.stop();
134
238
  }
135
- }, _callee, null, [[1, 19, 22, 25]]);
239
+ }, _callee, null, [[1, 62, 65, 68], [18, 51, 54, 57]]);
136
240
  })), [sql]);
137
241
  var onChange = (0, _react.useCallback)(function (value) {
138
242
  setSql(value);
139
243
  }, [setSql]);
140
244
  var onAddResultToMap = (0, _react.useCallback)(function () {
141
245
  if (!result) return;
142
- var keplerFields = (0, _processors.arrowSchemaToFields)(result.schema);
246
+ var keplerFields = (0, _processors.arrowSchemaToFields)(result.table, result.tableDuckDBTypes);
143
247
  var datasetToAdd = {
144
248
  data: {
145
249
  fields: keplerFields,
146
250
  // TODO type AddDataToMapPayload -> rows -> + arrow.Table
147
- rows: result
251
+ rows: result.table
148
252
  },
149
253
  info: {
150
254
  id: (0, _commonUtils.generateHashId)(),
@@ -157,15 +261,101 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
157
261
  }));
158
262
  setCounter(counter + 1);
159
263
  }, [result, counter, dispatch]);
264
+ var isValidFileType = (0, _react.useCallback)(function (filename) {
265
+ var fileExt = _duckdbTableUtils.SUPPORTED_DUCKDB_DROP_EXTENSIONS.find(function (ext) {
266
+ return filename.endsWith(ext);
267
+ });
268
+ return Boolean(fileExt);
269
+ }, []);
270
+ var createTableFromDroppedFile = (0, _react.useCallback)( /*#__PURE__*/function () {
271
+ var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(droppedFile) {
272
+ var _error;
273
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
274
+ while (1) switch (_context2.prev = _context2.next) {
275
+ case 0:
276
+ if (!droppedFile) {
277
+ _context2.next = 5;
278
+ break;
279
+ }
280
+ _context2.next = 3;
281
+ return (0, _duckdbTableUtils.tableFromFile)(droppedFile);
282
+ case 3:
283
+ _error = _context2.sent;
284
+ if (_error) {
285
+ setError(_error);
286
+ } else {
287
+ setError(null);
288
+ }
289
+ case 5:
290
+ setDroppedFile(null);
291
+ setDragState(false);
292
+ case 7:
293
+ case "end":
294
+ return _context2.stop();
295
+ }
296
+ }, _callee2);
297
+ }));
298
+ return function (_x) {
299
+ return _ref3.apply(this, arguments);
300
+ };
301
+ }(), []);
302
+ (0, _react.useEffect)(function () {
303
+ createTableFromDroppedFile(droppedFile);
304
+ }, [droppedFile, createTableFromDroppedFile]);
305
+ var handleFileInput = (0, _react.useCallback)(function (fileList, event) {
306
+ if (event) {
307
+ event.preventDefault();
308
+ event.stopPropagation();
309
+ }
310
+ var files = (0, _toConsumableArray2["default"])(fileList).filter(Boolean);
311
+ var disableExtensionFilter = false;
312
+ var filesToLoad = [];
313
+ var errorFiles = [];
314
+ var _iterator2 = _createForOfIteratorHelper(files),
315
+ _step2;
316
+ try {
317
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
318
+ var file = _step2.value;
319
+ if (disableExtensionFilter || isValidFileType(file.name)) {
320
+ filesToLoad.push(file);
321
+ } else {
322
+ errorFiles.push(file.name);
323
+ }
324
+ }
325
+ } catch (err) {
326
+ _iterator2.e(err);
327
+ } finally {
328
+ _iterator2.f();
329
+ }
330
+ if (filesToLoad.length > 0) {
331
+ setDroppedFile(filesToLoad[0]);
332
+ } else if (errorFiles.length > 0) {
333
+ setError(new Error("Unsupported file formats: ".concat(errorFiles.join(', '))));
334
+ }
335
+ }, [isValidFileType]);
160
336
  return /*#__PURE__*/_react["default"].createElement(StyledSqlPanel, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
161
337
  direction: "horizontal"
162
338
  }, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
163
339
  defaultSize: 20,
164
340
  minSize: 15,
165
- style: SCHEMA_PANEL_STYLE
341
+ style: SCHEMA_PANEL_STYLE,
342
+ className: "schema-panel"
343
+ }, /*#__PURE__*/_react["default"].createElement(StyledFileDropArea, {
344
+ dragOver: dragState,
345
+ onDragOver: function onDragOver() {
346
+ return setDragState(true);
347
+ },
348
+ onDragLeave: function onDragLeave() {
349
+ return setDragState(false);
350
+ },
351
+ frame: droppedFileAreaRef.current || document,
352
+ onDrop: handleFileInput,
353
+ className: "file-uploader__file-drop"
166
354
  }, /*#__PURE__*/_react["default"].createElement(_schemaPanel.SchemaPanel, {
167
- setTableSchema: setTableSchema
168
- })), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
355
+ setTableSchema: setTableSchema,
356
+ droppedFile: droppedFile,
357
+ schemaUpdateTrigger: schemaUpdateTrigger
358
+ }))), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
169
359
  minSize: 40
170
360
  }, /*#__PURE__*/_react["default"].createElement(StyledSqlEditor, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
171
361
  direction: "vertical"
@@ -191,13 +381,15 @@ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
191
381
  onChange: onChange,
192
382
  tableSchema: tableSchema,
193
383
  code: sql
194
- })))), /*#__PURE__*/_react["default"].createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, null, isRunning ? /*#__PURE__*/_react["default"].createElement(StyledLoadingContainer, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : error ? /*#__PURE__*/_react["default"].createElement(StyledErrorContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, error.message)) : result ? /*#__PURE__*/_react["default"].createElement(StyledDataPanel, null, /*#__PURE__*/_react["default"].createElement(StyledResultActions, null, /*#__PURE__*/_react["default"].createElement(_components.Button, {
384
+ })))), /*#__PURE__*/_react["default"].createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
385
+ className: "preview-panel"
386
+ }, isRunning ? /*#__PURE__*/_react["default"].createElement(StyledLoadingContainer, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : error ? /*#__PURE__*/_react["default"].createElement(StyledErrorContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, error.message)) : result ? /*#__PURE__*/_react["default"].createElement(StyledDataPanel, null, /*#__PURE__*/_react["default"].createElement(StyledResultActions, null, /*#__PURE__*/_react["default"].createElement(_components.Button, {
195
387
  secondary: true,
196
388
  onClick: onAddResultToMap
197
- }, "Add to Map"), /*#__PURE__*/_react["default"].createElement("div", null, result.numRows, " rows")), /*#__PURE__*/_react["default"].createElement(_previewDataPanel.PreviewDataPanel, {
389
+ }, "Add to Map"), /*#__PURE__*/_react["default"].createElement("div", null, result.table.numRows, " rows")), /*#__PURE__*/_react["default"].createElement(_previewDataPanel.PreviewDataPanel, {
198
390
  result: result,
199
391
  dataTableStyle: {},
200
392
  onAddResultToMap: onAddResultToMap
201
393
  })) : null))))));
202
394
  };
203
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFJlc2l6YWJsZVBhbmVscyIsIl9tb25hY29FZGl0b3IiLCJfc2NoZW1hUGFuZWwiLCJfcHJldmlld0RhdGFQYW5lbCIsIl9pbml0IiwiX2NvbXBvbmVudHMiLCJfY29tbW9uVXRpbHMiLCJfYWN0aW9ucyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfcHJvY2Vzc29ycyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlN0eWxlZFNxbFBhbmVsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJzaWRlUGFuZWxCZyIsIlN0eWxlZFNxbEFjdGlvbnMiLCJTdHlsZWRTcWxFZGl0b3IiLCJTdHlsZWRFZGl0b3JQYW5lbCIsIlN0eWxlZERhdGFQYW5lbCIsIlN0eWxlZEVkaXRvciIsInByb3BzIiwiaXNSdW5uaW5nIiwiU3R5bGVkUmVzdWx0QWN0aW9ucyIsIlN0eWxlZFJlc2l6ZUhhbmRsZSIsIlBhbmVsUmVzaXplSGFuZGxlIiwicGFuZWxCb3JkZXJDb2xvciIsIlN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlIiwiU3R5bGVkTG9hZGluZ0NvbnRhaW5lciIsIlN0eWxlZEVycm9yQ29udGFpbmVyIiwicHJlIiwiU0NIRU1BX1BBTkVMX1NUWUxFIiwib3ZlcmZsb3ciLCJTcWxQYW5lbCIsImV4cG9ydHMiLCJfcmVmIiwiX3JlZiRpbml0aWFsU3FsIiwiaW5pdGlhbFNxbCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic3FsIiwic2V0U3FsIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJyZXN1bHQiLCJzZXRSZXN1bHQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImNvdW50ZXIiLCJzZXRDb3VudGVyIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwidGFibGVTY2hlbWEiLCJzZXRUYWJsZVNjaGVtYSIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzZXRJc1J1bm5pbmciLCJfdXNlU3RhdGUxMyIsImlzQXBwbGVEZXZpY2UiLCJfdXNlU3RhdGUxNCIsImlzTWFjIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInVzZUVmZmVjdCIsImN1cnJlbnRVcmwiLCJVUkwiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsInRvU3RyaW5nIiwicnVuUXVlcnkiLCJ1c2VDYWxsYmFjayIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiZGIiLCJjb25uZWN0aW9uIiwiYXJyb3dSZXN1bHQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidHJpbSIsIkVycm9yIiwiYWJydXB0IiwiZ2V0RHVja0RCIiwic2VudCIsImNvbm5lY3QiLCJxdWVyeSIsImNsb3NlIiwidDAiLCJmaW5pc2giLCJzdG9wIiwib25DaGFuZ2UiLCJ2YWx1ZSIsIm9uQWRkUmVzdWx0VG9NYXAiLCJrZXBsZXJGaWVsZHMiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwic2NoZW1hIiwiZGF0YXNldFRvQWRkIiwiZGF0YSIsImZpZWxkcyIsInJvd3MiLCJpbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiY29uY2F0IiwiZm9ybWF0IiwiYWRkRGF0YVRvTWFwIiwiZGF0YXNldHMiLCJjcmVhdGVFbGVtZW50IiwiUGFuZWxHcm91cCIsImRpcmVjdGlvbiIsIlBhbmVsIiwiZGVmYXVsdFNpemUiLCJtaW5TaXplIiwic3R5bGUiLCJTY2hlbWFQYW5lbCIsImNsYXNzTmFtZSIsIkljb25CdXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJJY29ucyIsIlBsYXkiLCJoZWlnaHQiLCJUb29sdGlwIiwicGxhY2UiLCJlZmZlY3QiLCJpc1JlYWRPbmx5Iiwib25SdW5RdWVyeSIsImNvZGUiLCJMb2FkaW5nU3Bpbm5lciIsIm1lc3NhZ2UiLCJCdXR0b24iLCJzZWNvbmRhcnkiLCJudW1Sb3dzIiwiUHJldmlld0RhdGFQYW5lbCIsImRhdGFUYWJsZVN0eWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvc3FsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtQYW5lbCwgUGFuZWxHcm91cCwgUGFuZWxSZXNpemVIYW5kbGV9IGZyb20gJ3JlYWN0LXJlc2l6YWJsZS1wYW5lbHMnO1xuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbH0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsfSBmcm9tICcuL3ByZXZpZXctZGF0YS1wYW5lbCc7XG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge0J1dHRvbiwgSWNvbkJ1dHRvbiwgVG9vbHRpcH0gZnJvbSAnQGtlcGxlci5nbC9jb21wb25lbnRzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtJY29ucywgTG9hZGluZ1NwaW5uZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge3NpZGVQYW5lbEJnLCBwYW5lbEJvcmRlckNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge2lzQXBwbGVEZXZpY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJvd1NjaGVtYVRvRmllbGRzfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5jb25zdCBTdHlsZWRTcWxQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzMzMztcbmA7XG5cbmNvbnN0IFN0eWxlZFNxbEFjdGlvbnMgPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAwIDAgNTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7XG5gO1xuXG5jb25zdCBTdHlsZWRTcWxFZGl0b3IgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDA7IC8vIFByZXZlbnRzIGZsZXggY2hpbGQgZnJvbSBvdmVyZmxvd2luZ1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRFZGl0b3JQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogNXB4O1xuICBmbGV4LWdyb3c6IDE7XG5gO1xuXG5jb25zdCBTdHlsZWREYXRhUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuYDtcblxuY29uc3QgU3R5bGVkRWRpdG9yID0gc3R5bGVkLmRpdjx7aXNSdW5uaW5nOiBib29sZWFufT5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDEycHggMTJweCAxMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigzMCwgMzAsIDMwKTtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuaXNSdW5uaW5nID8gMC41IDogMSl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAwOyAvLyBQcmV2ZW50cyBmbGV4IGNoaWxkIGZyb20gb3ZlcmZsb3dpbmdcbmA7XG5cbmNvbnN0IFN0eWxlZFJlc3VsdEFjdGlvbnMgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMnB4IDEycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuYDtcblxuY29uc3QgU3R5bGVkUmVzaXplSGFuZGxlID0gc3R5bGVkKFBhbmVsUmVzaXplSGFuZGxlKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwYW5lbEJvcmRlckNvbG9yfTtcbiAgd2lkdGg6IDRweDtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlID0gc3R5bGVkKFBhbmVsUmVzaXplSGFuZGxlKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwYW5lbEJvcmRlckNvbG9yfTtcbiAgaGVpZ2h0OiA0cHg7XG4gIGN1cnNvcjogcm93LXJlc2l6ZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRMb2FkaW5nQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVycm9yQ29udGFpbmVyID0gc3R5bGVkLnByZWBcbiAgcGFkZGluZzogMTJweDtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbmA7XG5cbnR5cGUgU3FsUGFuZWxQcm9wcyA9IHtcbiAgaW5pdGlhbFNxbD86IHN0cmluZztcbn07XG5cbmNvbnN0IFNDSEVNQV9QQU5FTF9TVFlMRSA9IHtvdmVyZmxvdzogJ2F1dG8nfTtcblxuZXhwb3J0IGNvbnN0IFNxbFBhbmVsOiBSZWFjdC5GQzxTcWxQYW5lbFByb3BzPiA9ICh7aW5pdGlhbFNxbCA9ICcnfSkgPT4ge1xuICBjb25zdCBbc3FsLCBzZXRTcWxdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgcmV0dXJuIHBhcmFtcy5nZXQoJ3NxbCcpIHx8IGluaXRpYWxTcWw7XG4gIH0pO1xuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8bnVsbCB8IGFycm93LlRhYmxlPihudWxsKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RhYmxlU2NoZW1hLCBzZXRUYWJsZVNjaGVtYV0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtpc1J1bm5pbmcsIHNldElzUnVubmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc01hY10gPSB1c2VTdGF0ZSgoKSA9PiBpc0FwcGxlRGV2aWNlKCkpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHNxbCkge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzcWwnLCBzcWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NxbCcpO1xuICAgIH1cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBjdXJyZW50VXJsLnRvU3RyaW5nKCkpO1xuICB9LCBbc3FsXSk7XG5cbiAgY29uc3QgcnVuUXVlcnkgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNSdW5uaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNxbD8udHJpbSgpKSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignUXVlcnkgaXMgZW1wdHknKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGIgPSBhd2FpdCBnZXREdWNrREIoKTtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICAgIGNvbnN0IGFycm93UmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShzcWwpO1xuICAgICAgc2V0UmVzdWx0KGFycm93UmVzdWx0KTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUnVubmluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbc3FsXSk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICB2YWx1ZSA9PiB7XG4gICAgICBzZXRTcWwodmFsdWUpO1xuICAgIH0sXG4gICAgW3NldFNxbF1cbiAgKTtcblxuICBjb25zdCBvbkFkZFJlc3VsdFRvTWFwID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghcmVzdWx0KSByZXR1cm47XG5cbiAgICBjb25zdCBrZXBsZXJGaWVsZHMgPSBhcnJvd1NjaGVtYVRvRmllbGRzKHJlc3VsdC5zY2hlbWEpO1xuXG4gICAgY29uc3QgZGF0YXNldFRvQWRkID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBmaWVsZHM6IGtlcGxlckZpZWxkcyxcbiAgICAgICAgLy8gVE9ETyB0eXBlIEFkZERhdGFUb01hcFBheWxvYWQgLT4gcm93cyAtPiArIGFycm93LlRhYmxlXG4gICAgICAgIHJvd3M6IHJlc3VsdCBhcyBhbnlcbiAgICAgIH0sXG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCgpLFxuICAgICAgICBsYWJlbDogYHF1ZXJ5X3Jlc3VsdCR7Y291bnRlciA+IDAgPyBgXyR7Y291bnRlcn1gIDogJyd9YCxcbiAgICAgICAgZm9ybWF0OiAnYXJyb3cnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGRpc3BhdGNoKGFkZERhdGFUb01hcCh7ZGF0YXNldHM6IFtkYXRhc2V0VG9BZGRdfSkpO1xuICAgIHNldENvdW50ZXIoY291bnRlciArIDEpO1xuICB9LCBbcmVzdWx0LCBjb3VudGVyLCBkaXNwYXRjaF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZFNxbFBhbmVsPlxuICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiPlxuICAgICAgICA8UGFuZWwgZGVmYXVsdFNpemU9ezIwfSBtaW5TaXplPXsxNX0gc3R5bGU9e1NDSEVNQV9QQU5FTF9TVFlMRX0+XG4gICAgICAgICAgPFNjaGVtYVBhbmVsIHNldFRhYmxlU2NoZW1hPXtzZXRUYWJsZVNjaGVtYX0gLz5cbiAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICA8U3R5bGVkUmVzaXplSGFuZGxlIC8+XG5cbiAgICAgICAgPFBhbmVsIG1pblNpemU9ezQwfT5cbiAgICAgICAgICA8U3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXszMH0gY2xhc3NOYW1lPVwiZWRpdG9yLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFNxbEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj1cInJ1bi1xdWVyeS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5RdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNSdW5uaW5nIHx8ICFzcWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGxheSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD1cInJ1bi1xdWVyeS10b29sdGlwXCIgcGxhY2U9XCJ0b3BcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUnVuIFF1ZXJ5ICh7aXNNYWMgPyAn4oyYRW50ZXInIDogJ0N0cmwrRW50ZXInfSBvciBTaGlmdCtFbnRlcilcbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFZGl0b3IgaXNSdW5uaW5nPXtpc1J1bm5pbmd9PlxuICAgICAgICAgICAgICAgICAgICA8TW9uYWNvRWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seT17aXNSdW5uaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUnVuUXVlcnk9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNjaGVtYT17dGFibGVTY2hlbWF9XG4gICAgICAgICAgICAgICAgICAgICAgY29kZT17c3FsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3I+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3JQYW5lbD5cbiAgICAgICAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICAgICAgICA8U3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgLz5cbiAgICAgICAgICAgICAgPFBhbmVsPlxuICAgICAgICAgICAgICAgIHtpc1J1bm5pbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTG9hZGluZ0NvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntlcnJvci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICApIDogcmVzdWx0ID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZERhdGFQYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlc3VsdEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzZWNvbmRhcnkgb25DbGljaz17b25BZGRSZXN1bHRUb01hcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gTWFwXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57cmVzdWx0Lm51bVJvd3N9IHJvd3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICA8UHJldmlld0RhdGFQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD17cmVzdWx0fVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFUYWJsZVN0eWxlPXt7fX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkFkZFJlc3VsdFRvTWFwPXtvbkFkZFJlc3VsdFRvTWFwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICA8L1BhbmVsR3JvdXA+XG4gICAgICAgICAgPC9TdHlsZWRTcWxFZGl0b3I+XG4gICAgICAgIDwvUGFuZWw+XG4gICAgICA8L1BhbmVsR3JvdXA+XG4gICAgPC9TdHlsZWRTcWxQYW5lbD5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFdBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLE9BQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLE1BQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFj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
395
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFJlc2l6YWJsZVBhbmVscyIsIl9hY3Rpb25zIiwiX2NvbW1vblV0aWxzIiwiX2NvbXBvbmVudHMiLCJfcHJvY2Vzc29ycyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfbW9uYWNvRWRpdG9yIiwiX3NjaGVtYVBhbmVsIiwiX3ByZXZpZXdEYXRhUGFuZWwiLCJfZHVja2RiVGFibGVVdGlscyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlN0eWxlZFNxbFBhbmVsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJzaWRlUGFuZWxCZyIsIlN0eWxlZFNxbEFjdGlvbnMiLCJTdHlsZWRTcWxFZGl0b3IiLCJTdHlsZWRFZGl0b3JQYW5lbCIsIlN0eWxlZERhdGFQYW5lbCIsIlN0eWxlZEVkaXRvciIsInByb3BzIiwiaXNSdW5uaW5nIiwiU3R5bGVkUmVzdWx0QWN0aW9ucyIsIlN0eWxlZFJlc2l6ZUhhbmRsZSIsIlBhbmVsUmVzaXplSGFuZGxlIiwicGFuZWxCb3JkZXJDb2xvciIsIlN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlIiwiU3R5bGVkTG9hZGluZ0NvbnRhaW5lciIsIlN0eWxlZEVycm9yQ29udGFpbmVyIiwicHJlIiwiU3R5bGVkRmlsZURyb3BBcmVhIiwiRmlsZURyb3AiLCJkcmFnT3ZlciIsInRoZW1lIiwic3VidGV4dENvbG9yTFQiLCJTQ0hFTUFfUEFORUxfU1RZTEUiLCJvdmVyZmxvdyIsIlNxbFBhbmVsIiwiZXhwb3J0cyIsIl9yZWYiLCJfcmVmJGluaXRpYWxTcWwiLCJpbml0aWFsU3FsIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJzcWwiLCJzZXRTcWwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRyb3BwZWRGaWxlIiwic2V0RHJvcHBlZEZpbGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImRyYWdTdGF0ZSIsInNldERyYWdTdGF0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwic2NoZW1hVXBkYXRlVHJpZ2dlciIsInNldFNjaGVtYVVwZGF0ZVRyaWdnZXIiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJjb3VudGVyIiwic2V0Q291bnRlciIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJ0YWJsZVNjaGVtYSIsInNldFRhYmxlU2NoZW1hIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInNldElzUnVubmluZyIsIl91c2VTdGF0ZTE5IiwiaXNBcHBsZURldmljZSIsIl91c2VTdGF0ZTIwIiwiaXNNYWMiLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwiZHJvcHBlZEZpbGVBcmVhUmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudFVybCIsIlVSTCIsImhyZWYiLCJzZWFyY2hQYXJhbXMiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwicnVuUXVlcnkiLCJ1c2VDYWxsYmFjayIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiYWRqdXN0ZWRRdWVyeSIsImRiIiwiY29ubmVjdGlvbiIsInRlbXBUYWJsZU5hbWUiLCJzcWxTdGF0ZW1lbnRzIiwiYXJyb3dSZXN1bHQiLCJ0YWJsZUR1Y2tEQlR5cGVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJzdGF0ZW1lbnQiLCJpc0xhc3RRdWVyeSIsImR1Y2tEYkNvbHVtbnMiLCJjb2x1bW5zVG9Db252ZXJ0VG9XS0IiLCJfYWRqdXN0ZWRRdWVyeSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsInJlbW92ZVNRTENvbW1lbnRzIiwiRXJyb3IiLCJhYnJ1cHQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwiY29ubmVjdCIsInNlbnQiLCJzcGxpdFNxbFN0YXRlbWVudHMiLCJ0MCIsImNoZWNrSXNTZWxlY3RRdWVyeSIsInF1ZXJ5IiwiY29uY2F0IiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJnZXREdWNrREJDb2x1bW5UeXBlc01hcCIsImdldEdlb21ldHJ5Q29sdW1ucyIsImNvbnN0cnVjdFNUX2FzV0tCUXVlcnkiLCJzZXRHZW9BcnJvd1dLQkV4dGVuc2lvbiIsInQxIiwiZmluaXNoIiwidGFibGUiLCJjbG9zZSIsInQyIiwiRGF0ZSIsIm5vdyIsInN0b3AiLCJvbkNoYW5nZSIsIm9uQWRkUmVzdWx0VG9NYXAiLCJrZXBsZXJGaWVsZHMiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiZGF0YXNldFRvQWRkIiwiZGF0YSIsImZpZWxkcyIsInJvd3MiLCJpbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiZm9ybWF0IiwiYWRkRGF0YVRvTWFwIiwiZGF0YXNldHMiLCJpc1ZhbGlkRmlsZVR5cGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUyIsImZpbmQiLCJleHQiLCJlbmRzV2l0aCIsIkJvb2xlYW4iLCJjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJfZXJyb3IiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJ0YWJsZUZyb21GaWxlIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUZpbGVJbnB1dCIsImZpbGVMaXN0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImZpbGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImZpbHRlciIsImRpc2FibGVFeHRlbnNpb25GaWx0ZXIiLCJmaWxlc1RvTG9hZCIsImVycm9yRmlsZXMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiZmlsZSIsInB1c2giLCJlcnIiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsIlBhbmVsR3JvdXAiLCJkaXJlY3Rpb24iLCJQYW5lbCIsImRlZmF1bHRTaXplIiwibWluU2l6ZSIsInN0eWxlIiwiY2xhc3NOYW1lIiwib25EcmFnT3ZlciIsIm9uRHJhZ0xlYXZlIiwiZnJhbWUiLCJjdXJyZW50IiwiZG9jdW1lbnQiLCJvbkRyb3AiLCJTY2hlbWFQYW5lbCIsIkljb25CdXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJJY29ucyIsIlBsYXkiLCJoZWlnaHQiLCJUb29sdGlwIiwicGxhY2UiLCJlZmZlY3QiLCJpc1JlYWRPbmx5Iiwib25SdW5RdWVyeSIsImNvZGUiLCJMb2FkaW5nU3Bpbm5lciIsIm1lc3NhZ2UiLCJCdXR0b24iLCJzZWNvbmRhcnkiLCJudW1Sb3dzIiwiUHJldmlld0RhdGFQYW5lbCIsImRhdGFUYWJsZVN0eWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvc3FsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1BhbmVsLCBQYW5lbEdyb3VwLCBQYW5lbFJlc2l6ZUhhbmRsZX0gZnJvbSAncmVhY3QtcmVzaXphYmxlLXBhbmVscyc7XG5cbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtCdXR0b24sIEZpbGVEcm9wLCBJY29uQnV0dG9uLCBJY29ucywgTG9hZGluZ1NwaW5uZXIsIFRvb2x0aXB9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge2Fycm93U2NoZW1hVG9GaWVsZHN9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge3NpZGVQYW5lbEJnLCBwYW5lbEJvcmRlckNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge2lzQXBwbGVEZXZpY2UsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbCwgU2NoZW1hU3VnZ2VzdGlvbn0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsLCBRdWVyeVJlc3VsdH0gZnJvbSAnLi9wcmV2aWV3LWRhdGEtcGFuZWwnO1xuXG5pbXBvcnQge1xuICBjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5LFxuICBnZXREdWNrREJDb2x1bW5UeXBlcyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAsXG4gIGdldEdlb21ldHJ5Q29sdW1ucyxcbiAgc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24sXG4gIHNwbGl0U3FsU3RhdGVtZW50cyxcbiAgY2hlY2tJc1NlbGVjdFF1ZXJ5LFxuICByZW1vdmVTUUxDb21tZW50cyxcbiAgdGFibGVGcm9tRmlsZSxcbiAgU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuY29uc3QgU3R5bGVkU3FsUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMzMzM7XG5gO1xuXG5jb25zdCBTdHlsZWRTcWxBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgZmxleDogMCAwIDUwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzO1xuYDtcblxuY29uc3QgU3R5bGVkU3FsRWRpdG9yID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwOyAvLyBQcmV2ZW50cyBmbGV4IGNoaWxkIGZyb20gb3ZlcmZsb3dpbmdcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRWRpdG9yUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IDVweDtcbiAgZmxleC1ncm93OiAxO1xuYDtcblxuY29uc3QgU3R5bGVkRGF0YVBhbmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVkaXRvciA9IHN0eWxlZC5kaXY8e2lzUnVubmluZzogYm9vbGVhbn0+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzAsIDMwLCAzMCk7XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLmlzUnVubmluZyA/IDAuNSA6IDEpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMDsgLy8gUHJldmVudHMgZmxleCBjaGlsZCBmcm9tIG92ZXJmbG93aW5nXG5gO1xuXG5jb25zdCBTdHlsZWRSZXN1bHRBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDJweCAxMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbmA7XG5cbmNvbnN0IFN0eWxlZFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIHdpZHRoOiA0cHg7XG4gIGN1cnNvcjogY29sLXJlc2l6ZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIGhlaWdodDogNHB4O1xuICBjdXJzb3I6IHJvdy1yZXNpemU7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkTG9hZGluZ0NvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5wcmVgXG4gIHBhZGRpbmc6IDEycHg7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJhZ1BhbmVsUHJvcHMge1xuICBkcmFnT3Zlcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZEZpbGVEcm9wQXJlYSA9IHN0eWxlZChGaWxlRHJvcCk8U3R5bGVkRHJhZ1BhbmVsUHJvcHM+YFxuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXI6IDFweCAke3Byb3BzID0+IChwcm9wcy5kcmFnT3ZlciA/ICdzb2xpZCcgOiAnZGFzaGVkJyl9XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuZHJhZ092ZXIgPyBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JMVCA6ICd0cmFuc3BhcmVudCcpfTtcbiAgLmZpbGUtZHJvcC10YXJnZXQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuYDtcblxudHlwZSBTcWxQYW5lbFByb3BzID0ge1xuICBpbml0aWFsU3FsPzogc3RyaW5nO1xufTtcblxuY29uc3QgU0NIRU1BX1BBTkVMX1NUWUxFID0ge292ZXJmbG93OiAnYXV0byd9O1xuXG5leHBvcnQgY29uc3QgU3FsUGFuZWw6IFJlYWN0LkZDPFNxbFBhbmVsUHJvcHM+ID0gKHtpbml0aWFsU3FsID0gJyd9KSA9PiB7XG4gIGNvbnN0IFtzcWwsIHNldFNxbF0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gcGFyYW1zLmdldCgnc3FsJykgfHwgaW5pdGlhbFNxbDtcbiAgfSk7XG4gIGNvbnN0IFtkcm9wcGVkRmlsZSwgc2V0RHJvcHBlZEZpbGVdID0gdXNlU3RhdGU8RmlsZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZHJhZ1N0YXRlLCBzZXREcmFnU3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8bnVsbCB8IFF1ZXJ5UmVzdWx0PihudWxsKTtcbiAgY29uc3QgW3NjaGVtYVVwZGF0ZVRyaWdnZXIsIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXJdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RhYmxlU2NoZW1hLCBzZXRUYWJsZVNjaGVtYV0gPSB1c2VTdGF0ZTxTY2hlbWFTdWdnZXN0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lzUnVubmluZywgc2V0SXNSdW5uaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTWFjXSA9IHVzZVN0YXRlKCgpID0+IGlzQXBwbGVEZXZpY2UoKSk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBkcm9wcGVkRmlsZUFyZWFSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHNxbCkge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzcWwnLCBzcWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NxbCcpO1xuICAgIH1cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBjdXJyZW50VXJsLnRvU3RyaW5nKCkpO1xuICB9LCBbc3FsXSk7XG5cbiAgY29uc3QgcnVuUXVlcnkgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNSdW5uaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gc3FsID8gcmVtb3ZlU1FMQ29tbWVudHMoc3FsKSA6IG51bGw7XG4gICAgICBpZiAoIWFkanVzdGVkUXVlcnkpIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKCdRdWVyeSBpcyBlbXB0eScpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYiA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gICAgICBpZiAoIWRiKSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgICAgLy8gVE9ETyBmaW5kIGEgY2hlYXAgd2F5IHRvIGdldCBEdWNrRGIgdHlwZXMgd2l0aCBhIHNpbmdsZSBxdWVyeSB0byBhIHJlbW90ZSByZXNvdXJjZSAtIHRlbXAgdGFibGU/IGN0ZT9cbiAgICAgIGNvbnN0IHRlbXBUYWJsZU5hbWUgPSAndGVtcF9rZXBsZXJnbF90YWJsZSc7XG5cbiAgICAgIC8vIHJlbW92ZSBjb21tZW50c1xuICAgICAgY29uc3Qgc3FsU3RhdGVtZW50cyA9IHNwbGl0U3FsU3RhdGVtZW50cyhhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgbGV0IGFycm93UmVzdWx0OiBhcnJvdy5UYWJsZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IHRhYmxlRHVja0RCVHlwZXMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3FsU3RhdGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0xhc3RRdWVyeSA9IHN0YXRlbWVudCA9PT0gc3FsU3RhdGVtZW50c1tzcWxTdGF0ZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoaXNMYXN0UXVlcnkgJiYgKGF3YWl0IGNoZWNrSXNTZWxlY3RRdWVyeShjb25uZWN0aW9uLCBzdGF0ZW1lbnQpKSkge1xuICAgICAgICAgIC8vIDEpIGNyZWF0ZSB0ZW1wIHRhYmxlIGZyb20gdGhlIG9yaWdpbmFsIHF1ZXJ5LlxuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYENSRUFURSBPUiBSRVBMQUNFIFRBQkxFICcke3RlbXBUYWJsZU5hbWV9JyBBUyAke3N0YXRlbWVudH1gKTtcblxuICAgICAgICAgIC8vIDIpIHF1ZXJ5IGR1Y2tkYiB0eXBlcyBhbmQgZGV0ZWN0IGNhbmRpZGF0ZSBjb2x1bW5zIGZvciBTVF9hc1dLQiB0cmFuc2Zvcm0uXG4gICAgICAgICAgY29uc3QgZHVja0RiQ29sdW1ucyA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGNvbm5lY3Rpb24sIHRlbXBUYWJsZU5hbWUpO1xuICAgICAgICAgIHRhYmxlRHVja0RCVHlwZXMgPSBnZXREdWNrREJDb2x1bW5UeXBlc01hcChkdWNrRGJDb2x1bW5zKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zVG9Db252ZXJ0VG9XS0IgPSBnZXRHZW9tZXRyeUNvbHVtbnMoZHVja0RiQ29sdW1ucyk7XG5cbiAgICAgICAgICAvLyAzKSBxdWVyeSBHRU9NRVRSWSBjb2x1bW5zIGFzIFdLQi5cbiAgICAgICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gY29uc3RydWN0U1RfYXNXS0JRdWVyeSh0ZW1wVGFibGVOYW1lLCBjb2x1bW5zVG9Db252ZXJ0VG9XS0IpO1xuICAgICAgICAgIGFycm93UmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgICAgIC8vIDQpIHNldCBnZW9hcnJvdyBleHRlbnNpb24gZm9yIHRoZSBhcnJvdyB0YWJsZSBhcyBEdWNrREIgZG9lc24ndCBzdXBwb3J0IHRoZSBnZW9hcnJvdyBleHRlbnNpb24uXG4gICAgICAgICAgc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24oYXJyb3dSZXN1bHQsIGR1Y2tEYkNvbHVtbnMpO1xuXG4gICAgICAgICAgLy8gNSkgcmVtb3ZlIHRlbXAgdGFibGVcbiAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBEUk9QIFRBQkxFICR7dGVtcFRhYmxlTmFtZX07YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShzdGF0ZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgcHJldmlldyBvbmx5IGZvciB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IHF1ZXJ5XG4gICAgICBpZiAoYXJyb3dSZXN1bHQpIHtcbiAgICAgICAgc2V0UmVzdWx0KHt0YWJsZTogYXJyb3dSZXN1bHQsIHRhYmxlRHVja0RCVHlwZXN9KTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFcnJvcihlIGFzIEVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNSdW5uaW5nKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZXJlIG1heSBiZSBhIHBvc3NpYmxlIGNoYW5nZSBpbiBEdWNrREIuXG4gICAgc2V0U2NoZW1hVXBkYXRlVHJpZ2dlcihEYXRlLm5vdygpKTtcbiAgfSwgW3NxbF0pO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgdmFsdWUgPT4ge1xuICAgICAgc2V0U3FsKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZXRTcWxdXG4gICk7XG5cbiAgY29uc3Qgb25BZGRSZXN1bHRUb01hcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xuXG4gICAgY29uc3Qga2VwbGVyRmllbGRzID0gYXJyb3dTY2hlbWFUb0ZpZWxkcyhyZXN1bHQudGFibGUsIHJlc3VsdC50YWJsZUR1Y2tEQlR5cGVzKTtcblxuICAgIGNvbnN0IGRhdGFzZXRUb0FkZCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmllbGRzOiBrZXBsZXJGaWVsZHMsXG4gICAgICAgIC8vIFRPRE8gdHlwZSBBZGREYXRhVG9NYXBQYXlsb2FkIC0+IHJvd3MgLT4gKyBhcnJvdy5UYWJsZVxuICAgICAgICByb3dzOiByZXN1bHQudGFibGUgYXMgYW55XG4gICAgICB9LFxuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogZ2VuZXJhdGVIYXNoSWQoKSxcbiAgICAgICAgbGFiZWw6IGBxdWVyeV9yZXN1bHQke2NvdW50ZXIgPiAwID8gYF8ke2NvdW50ZXJ9YCA6ICcnfWAsXG4gICAgICAgIGZvcm1hdDogJ2Fycm93J1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkaXNwYXRjaChhZGREYXRhVG9NYXAoe2RhdGFzZXRzOiBbZGF0YXNldFRvQWRkXX0pKTtcbiAgICBzZXRDb3VudGVyKGNvdW50ZXIgKyAxKTtcbiAgfSwgW3Jlc3VsdCwgY291bnRlciwgZGlzcGF0Y2hdKTtcblxuICBjb25zdCBpc1ZhbGlkRmlsZVR5cGUgPSB1c2VDYWxsYmFjayhmaWxlbmFtZSA9PiB7XG4gICAgY29uc3QgZmlsZUV4dCA9IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TLmZpbmQoZXh0ID0+IGZpbGVuYW1lLmVuZHNXaXRoKGV4dCkpO1xuICAgIHJldHVybiBCb29sZWFuKGZpbGVFeHQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGUgPSB1c2VDYWxsYmFjayhhc3luYyAoZHJvcHBlZEZpbGU6IEZpbGUgfCBudWxsKSA9PiB7XG4gICAgaWYgKGRyb3BwZWRGaWxlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHRhYmxlRnJvbUZpbGUoZHJvcHBlZEZpbGUpO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldERyb3BwZWRGaWxlKG51bGwpO1xuICAgIHNldERyYWdTdGF0ZShmYWxzZSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNyZWF0ZVRhYmxlRnJvbURyb3BwZWRGaWxlKGRyb3BwZWRGaWxlKTtcbiAgfSwgW2Ryb3BwZWRGaWxlLCBjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUZpbGVJbnB1dCA9IHVzZUNhbGxiYWNrKFxuICAgIChmaWxlTGlzdDogRmlsZUxpc3QsIGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZXMgPSBbLi4uZmlsZUxpc3RdLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgY29uc3QgZGlzYWJsZUV4dGVuc2lvbkZpbHRlciA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBmaWxlc1RvTG9hZDogRmlsZVtdID0gW107XG4gICAgICBjb25zdCBlcnJvckZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIHx8IGlzVmFsaWRGaWxlVHlwZShmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgZmlsZXNUb0xvYWQucHVzaChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvckZpbGVzLnB1c2goZmlsZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNUb0xvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXREcm9wcGVkRmlsZShmaWxlc1RvTG9hZFswXSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXRFcnJvcihuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0czogJHtlcnJvckZpbGVzLmpvaW4oJywgJyl9YCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzVmFsaWRGaWxlVHlwZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRTcWxQYW5lbD5cbiAgICAgIDxQYW5lbEdyb3VwIGRpcmVjdGlvbj1cImhvcml6b250YWxcIj5cbiAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXsyMH0gbWluU2l6ZT17MTV9IHN0eWxlPXtTQ0hFTUFfUEFORUxfU1RZTEV9IGNsYXNzTmFtZT1cInNjaGVtYS1wYW5lbFwiPlxuICAgICAgICAgIDxTdHlsZWRGaWxlRHJvcEFyZWFcbiAgICAgICAgICAgIGRyYWdPdmVyPXtkcmFnU3RhdGV9XG4gICAgICAgICAgICBvbkRyYWdPdmVyPXsoKSA9PiBzZXREcmFnU3RhdGUodHJ1ZSl9XG4gICAgICAgICAgICBvbkRyYWdMZWF2ZT17KCkgPT4gc2V0RHJhZ1N0YXRlKGZhbHNlKX1cbiAgICAgICAgICAgIGZyYW1lPXtkcm9wcGVkRmlsZUFyZWFSZWYuY3VycmVudCB8fCBkb2N1bWVudH1cbiAgICAgICAgICAgIG9uRHJvcD17aGFuZGxlRmlsZUlucHV0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRlcl9fZmlsZS1kcm9wXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2NoZW1hUGFuZWxcbiAgICAgICAgICAgICAgc2V0VGFibGVTY2hlbWE9e3NldFRhYmxlU2NoZW1hfVxuICAgICAgICAgICAgICBkcm9wcGVkRmlsZT17ZHJvcHBlZEZpbGV9XG4gICAgICAgICAgICAgIHNjaGVtYVVwZGF0ZVRyaWdnZXI9e3NjaGVtYVVwZGF0ZVRyaWdnZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU3R5bGVkRmlsZURyb3BBcmVhPlxuICAgICAgICA8L1BhbmVsPlxuXG4gICAgICAgIDxTdHlsZWRSZXNpemVIYW5kbGUgLz5cblxuICAgICAgICA8UGFuZWwgbWluU2l6ZT17NDB9PlxuICAgICAgICAgIDxTdHlsZWRTcWxFZGl0b3I+XG4gICAgICAgICAgICA8UGFuZWxHcm91cCBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiPlxuICAgICAgICAgICAgICA8UGFuZWwgZGVmYXVsdFNpemU9ezMwfSBjbGFzc05hbWU9XCJlZGl0b3ItcGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRWRpdG9yUGFuZWw+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpcFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZm9yPVwicnVuLXF1ZXJ5LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1J1bm5pbmcgfHwgIXNxbH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29ucy5QbGF5IGhlaWdodD1cIjE4cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIGlkPVwicnVuLXF1ZXJ5LXRvb2x0aXBcIiBwbGFjZT1cInRvcFwiIGVmZmVjdD1cInNvbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSdW4gUXVlcnkgKHtpc01hYyA/ICfijJhFbnRlcicgOiAnQ3RybCtFbnRlcid9IG9yIFNoaWZ0K0VudGVyKVxuICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRTcWxBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvciBpc1J1bm5pbmc9e2lzUnVubmluZ30+XG4gICAgICAgICAgICAgICAgICAgIDxNb25hY29FZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICBpc1JlYWRPbmx5PXtpc1J1bm5pbmd9XG4gICAgICAgICAgICAgICAgICAgICAgb25SdW5RdWVyeT17cnVuUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU2NoZW1hPXt0YWJsZVNjaGVtYX1cbiAgICAgICAgICAgICAgICAgICAgICBjb2RlPXtzcWx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICA8L1BhbmVsPlxuXG4gICAgICAgICAgICAgIDxTdHlsZWRWZXJ0aWNhbFJlc2l6ZUhhbmRsZSAvPlxuICAgICAgICAgICAgICA8UGFuZWwgY2xhc3NOYW1lPVwicHJldmlldy1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIHtpc1J1bm5pbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTG9hZGluZ0NvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntlcnJvci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICApIDogcmVzdWx0ID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZERhdGFQYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlc3VsdEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzZWNvbmRhcnkgb25DbGljaz17b25BZGRSZXN1bHRUb01hcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gTWFwXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57cmVzdWx0LnRhYmxlLm51bVJvd3N9IHJvd3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICA8UHJldmlld0RhdGFQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD17cmVzdWx0fVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFUYWJsZVN0eWxlPXt7fX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkFkZFJlc3VsdFRvTWFwPXtvbkFkZFJlc3VsdFRvTWFwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICA8L1BhbmVsR3JvdXA+XG4gICAgICAgICAgPC9TdHlsZWRTcWxFZGl0b3I+XG4gICAgICAgIDwvUGFuZWw+XG4gICAgICA8L1BhbmVsR3JvdXA+XG4gICAgPC9TdHlsZWRTcWxQYW5lbD5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLE9BQUEsR0FBQVQsT0FBQTtB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
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { keplerGlDuckDBPlugin } from './plugin';
2
- export { KeplerGlDuckDbTable } from './table/duckdb-table';
1
+ export { DuckDBWasmAdapter } from './adapters/duckdb-wasm-adapter';
3
2
  export { SqlPanel } from './components';
3
+ import { keplerGlDuckDBPlugin } from './plugin';
4
+ export { restoreGeoarrowMetadata, KeplerGlDuckDbTable } from './table/duckdb-table';
5
+ export * from './table/duckdb-table-utils';
4
6
  export default keplerGlDuckDBPlugin;
package/dist/index.js CHANGED
@@ -3,6 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ DuckDBWasmAdapter: true,
8
+ SqlPanel: true,
9
+ restoreGeoarrowMetadata: true,
10
+ KeplerGlDuckDbTable: true
11
+ };
12
+ Object.defineProperty(exports, "DuckDBWasmAdapter", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _duckdbWasmAdapter.DuckDBWasmAdapter;
16
+ }
17
+ });
6
18
  Object.defineProperty(exports, "KeplerGlDuckDbTable", {
7
19
  enumerable: true,
8
20
  get: function get() {
@@ -16,10 +28,29 @@ Object.defineProperty(exports, "SqlPanel", {
16
28
  }
17
29
  });
18
30
  exports["default"] = void 0;
31
+ Object.defineProperty(exports, "restoreGeoarrowMetadata", {
32
+ enumerable: true,
33
+ get: function get() {
34
+ return _duckdbTable.restoreGeoarrowMetadata;
35
+ }
36
+ });
37
+ var _duckdbWasmAdapter = require("./adapters/duckdb-wasm-adapter");
38
+ var _components = require("./components");
19
39
  var _plugin = require("./plugin");
20
40
  var _duckdbTable = require("./table/duckdb-table");
21
- var _components = require("./components");
41
+ var _duckdbTableUtils = require("./table/duckdb-table-utils");
42
+ Object.keys(_duckdbTableUtils).forEach(function (key) {
43
+ if (key === "default" || key === "__esModule") return;
44
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
45
+ if (key in exports && exports[key] === _duckdbTableUtils[key]) return;
46
+ Object.defineProperty(exports, key, {
47
+ enumerable: true,
48
+ get: function get() {
49
+ return _duckdbTableUtils[key];
50
+ }
51
+ });
52
+ });
22
53
  // SPDX-License-Identifier: MIT
23
54
  // Copyright contributors to the kepler.gl project
24
55
  var _default = exports["default"] = _plugin.keplerGlDuckDBPlugin;
25
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGx1Z2luIiwicmVxdWlyZSIsIl9kdWNrZGJUYWJsZSIsIl9jb21wb25lbnRzIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwia2VwbGVyR2xEdWNrREJQbHVnaW4iXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtrZXBsZXJHbER1Y2tEQlBsdWdpbn0gZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0IHtLZXBsZXJHbER1Y2tEYlRhYmxlfSBmcm9tICcuL3RhYmxlL2R1Y2tkYi10YWJsZSc7XG5leHBvcnQge1NxbFBhbmVsfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuZXhwb3J0IGRlZmF1bHQga2VwbGVyR2xEdWNrREJQbHVnaW47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUxBO0FBQ0E7QUFBQSxJQUFBRyxRQUFBLEdBQUFDLE9BQUEsY0FLZUMsNEJBQW9CIiwiaWdub3JlTGlzdCI6W119
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX2NvbXBvbmVudHMiLCJfcGx1Z2luIiwiX2R1Y2tkYlRhYmxlIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsImtlcGxlckdsRHVja0RCUGx1Z2luIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCB7RHVja0RCV2FzbUFkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvZHVja2RiLXdhc20tYWRhcHRlcic7XG5leHBvcnQge1NxbFBhbmVsfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtrZXBsZXJHbER1Y2tEQlBsdWdpbn0gZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0IHtyZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSwgS2VwbGVyR2xEdWNrRGJUYWJsZX0gZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUtdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQga2VwbGVyR2xEdWNrREJQbHVnaW47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxpQkFBQSxHQUFBSixPQUFBO0FBQUFLLE1BQUEsQ0FBQUMsSUFBQSxDQUFBRixpQkFBQSxFQUFBRyxPQUFBLFdBQUFDLEdBQUE7RUFBQSxJQUFBQSxHQUFBLGtCQUFBQSxHQUFBO0VBQUEsSUFBQUgsTUFBQSxDQUFBSSxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBQyxZQUFBLEVBQUFKLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFLLE9BQUEsSUFBQUEsT0FBQSxDQUFBTCxHQUFBLE1BQUFKLGlCQUFBLENBQUFJLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFaLGlCQUFBLENBQUFJLEdBQUE7SUFBQTtFQUFBO0FBQUE7QUFQQTtBQUNBO0FBQUEsSUFBQVMsUUFBQSxHQUFBSixPQUFBLGNBT2VLLDRCQUFvQiIsImlnbm9yZUxpc3QiOltdfQ==