@kepler.gl/reducers 3.3.0-alpha.16 → 3.3.0-alpha.17
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.
- package/dist/cjs/column-edit-reconcile.js +100 -0
- package/dist/cjs/column-edit-updaters.spec.js +840 -0
- package/dist/cjs/dataset-ops-updaters.js +101 -15
- package/dist/cjs/dataset-ops-updaters.spec.js +129 -4
- package/dist/cjs/export-utils.js +118 -46
- package/dist/cjs/interaction-utils.js +11 -3
- package/dist/cjs/layer-utils.js +3 -2
- package/dist/cjs/ui-state-updaters.js +70 -26
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
- package/dist/cjs/vis-state-merger.js +65 -22
- package/dist/cjs/vis-state-updaters.js +581 -177
- package/dist/cjs/vis-state.js +2 -2
- package/dist/column-edit-reconcile.d.ts +4 -0
- package/dist/column-edit-updaters.spec.d.ts +1 -0
- package/dist/dataset-ops-updaters.d.ts +3 -0
- package/dist/esm/column-edit-reconcile.js +95 -0
- package/dist/esm/column-edit-updaters.spec.js +839 -0
- package/dist/esm/dataset-ops-updaters.js +99 -16
- package/dist/esm/dataset-ops-updaters.spec.js +129 -4
- package/dist/esm/export-utils.js +117 -45
- package/dist/esm/interaction-utils.js +10 -3
- package/dist/esm/layer-utils.js +3 -2
- package/dist/esm/ui-state-updaters.js +69 -25
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
- package/dist/esm/vis-state-merger.js +66 -24
- package/dist/esm/vis-state-updaters.js +571 -185
- package/dist/esm/vis-state.js +2 -2
- package/dist/export-utils.d.ts +2 -2
- package/dist/interaction-utils.d.ts +4 -1
- package/dist/layer-utils.d.ts +1 -0
- package/dist/ui-state-updaters.d.ts +10 -0
- package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
- package/dist/vis-state-merger.d.ts +10 -2
- package/dist/vis-state-updaters.d.ts +31 -4
- package/dist/vis-state.d.ts +4 -0
- package/package.json +17 -17
|
@@ -77,9 +77,10 @@ describe('dataset ops vis-state', function () {
|
|
|
77
77
|
pop: 'sum'
|
|
78
78
|
}
|
|
79
79
|
}));
|
|
80
|
+
var resultId = state.groupBys[0].resultId;
|
|
80
81
|
state = reduceVisState(state, _actions.VisStateActions.runGroupBy(opId));
|
|
81
82
|
state = flushCreateTableTasks(state);
|
|
82
|
-
|
|
83
|
+
expect(state.groupBys).toHaveLength(0);
|
|
83
84
|
expect(state.datasets[resultId]).toBeTruthy();
|
|
84
85
|
expect(state.datasets[resultId].metadata.derivedDataset).toEqual({
|
|
85
86
|
type: 'groupBy',
|
|
@@ -111,6 +112,7 @@ describe('dataset ops vis-state', function () {
|
|
|
111
112
|
}));
|
|
112
113
|
state = reduceVisState(state, _actions.VisStateActions.runGroupBy(op.id));
|
|
113
114
|
state = flushCreateTableTasks(state);
|
|
115
|
+
expect(state.groupBys).toHaveLength(0);
|
|
114
116
|
expect(Object.keys(state.datasets)).toHaveLength(2);
|
|
115
117
|
state = reduceVisState(state, _actions.VisStateActions.removeDataset('cities'));
|
|
116
118
|
expect(state.datasets.cities).toBeUndefined();
|
|
@@ -209,6 +211,7 @@ describe('dataset ops vis-state', function () {
|
|
|
209
211
|
}));
|
|
210
212
|
state = reduceVisState(state, _actions.VisStateActions.runSpatialJoin(op.id));
|
|
211
213
|
state = flushCreateTableTasks(state);
|
|
214
|
+
expect(state.joins).toHaveLength(0);
|
|
212
215
|
expect(state.datasets[op.resultId]).toBeTruthy();
|
|
213
216
|
state = reduceVisState(state, _actions.VisStateActions.removeDataset('pts'));
|
|
214
217
|
expect(state.datasets.pts).toBeUndefined();
|
|
@@ -216,7 +219,7 @@ describe('dataset ops vis-state', function () {
|
|
|
216
219
|
expect(state.datasets[op.resultId]).toBeTruthy();
|
|
217
220
|
expect(state.joins).toHaveLength(0);
|
|
218
221
|
});
|
|
219
|
-
test('save/load roundtrip keeps
|
|
222
|
+
test('save/load roundtrip keeps the derived dataset and drops the finished group by', function () {
|
|
220
223
|
var _derivedMeta$derivedD, _saved$config$config$;
|
|
221
224
|
var cities = makeTable('cities', [{
|
|
222
225
|
name: 'region',
|
|
@@ -251,7 +254,129 @@ describe('dataset ops vis-state', function () {
|
|
|
251
254
|
});
|
|
252
255
|
var derivedMeta = derived === null || derived === void 0 ? void 0 : derived.data.metadata;
|
|
253
256
|
expect(derivedMeta === null || derivedMeta === void 0 || (_derivedMeta$derivedD = derivedMeta.derivedDataset) === null || _derivedMeta$derivedD === void 0 ? void 0 : _derivedMeta$derivedD.type).toBe('groupBy');
|
|
254
|
-
expect((_saved$config$config$ = saved.config.config.visState.groupBys)
|
|
257
|
+
expect((_saved$config$config$ = saved.config.config.visState.groupBys) !== null && _saved$config$config$ !== void 0 ? _saved$config$config$ : []).toHaveLength(0);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
describe('suitability vis-state', function () {
|
|
261
|
+
beforeEach(function () {
|
|
262
|
+
(0, _tasks.drainTasksForTesting)();
|
|
263
|
+
});
|
|
264
|
+
function siteState() {
|
|
265
|
+
var sites = makeTable('sites', [{
|
|
266
|
+
name: 'name',
|
|
267
|
+
type: _constants.ALL_FIELD_TYPES.string
|
|
268
|
+
}, {
|
|
269
|
+
name: 'lat',
|
|
270
|
+
type: _constants.ALL_FIELD_TYPES.real
|
|
271
|
+
}, {
|
|
272
|
+
name: 'lng',
|
|
273
|
+
type: _constants.ALL_FIELD_TYPES.real
|
|
274
|
+
}, {
|
|
275
|
+
name: 'access',
|
|
276
|
+
type: _constants.ALL_FIELD_TYPES.integer
|
|
277
|
+
}, {
|
|
278
|
+
name: 'cost',
|
|
279
|
+
type: _constants.ALL_FIELD_TYPES.integer
|
|
280
|
+
}], [['a', 0, 0, 0, 100], ['b', 1, 1, 5, 200], ['c', 2, 2, 10, 300]]);
|
|
281
|
+
return _objectSpread(_objectSpread({}, _visStateUpdaters.INITIAL_VIS_STATE), {}, {
|
|
282
|
+
datasets: {
|
|
283
|
+
sites: sites
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
test('addSuitability seeds numeric weights and a short random result name', function () {
|
|
288
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addSuitability('sites'));
|
|
289
|
+
expect(state.suitabilities).toHaveLength(1);
|
|
290
|
+
var op = state.suitabilities[0];
|
|
291
|
+
expect(op.weights).toEqual({
|
|
292
|
+
lat: 1,
|
|
293
|
+
lng: 1,
|
|
294
|
+
access: 1,
|
|
295
|
+
cost: 1
|
|
296
|
+
});
|
|
297
|
+
expect(op.weightStandardization).toBe('normalize');
|
|
298
|
+
expect(op.dataStandardization).toBe('range');
|
|
299
|
+
expect(op.outputFieldName).toBe('score');
|
|
300
|
+
expect(op.resultLabel).toMatch(/^suitability-\d{2}$/);
|
|
301
|
+
});
|
|
302
|
+
test('opening a suitability op closes an open group by', function () {
|
|
303
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addGroupBy('sites'));
|
|
304
|
+
expect(state.groupBys[0].isConfigActive).toBe(true);
|
|
305
|
+
state = reduceVisState(state, _actions.VisStateActions.addSuitability('sites'));
|
|
306
|
+
expect(state.groupBys[0].isConfigActive).toBe(false);
|
|
307
|
+
expect(state.suitabilities[0].isConfigActive).toBe(true);
|
|
308
|
+
state = reduceVisState(state, _actions.VisStateActions.addGroupBy('sites'));
|
|
309
|
+
expect(state.suitabilities[0].isConfigActive).toBe(false);
|
|
310
|
+
});
|
|
311
|
+
test('runSuitability adds a scored dataset and a default layer', function () {
|
|
312
|
+
var _layer$config$colorFi;
|
|
313
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addSuitability('sites'));
|
|
314
|
+
var op = state.suitabilities[0];
|
|
315
|
+
state = reduceVisState(state, _actions.VisStateActions.setSuitabilityConfig(op.id, {
|
|
316
|
+
weights: {
|
|
317
|
+
access: 1,
|
|
318
|
+
cost: 1
|
|
319
|
+
}
|
|
320
|
+
}));
|
|
321
|
+
state = reduceVisState(state, _actions.VisStateActions.runSuitability(op.id));
|
|
322
|
+
state = flushCreateTableTasks(state);
|
|
323
|
+
var result = state.datasets[op.resultId];
|
|
324
|
+
expect(result).toBeTruthy();
|
|
325
|
+
expect(result.metadata.derivedDataset).toEqual({
|
|
326
|
+
type: 'suitability',
|
|
327
|
+
sourceDataIds: ['sites'],
|
|
328
|
+
operationId: op.id
|
|
329
|
+
});
|
|
330
|
+
expect(result.fields.map(function (field) {
|
|
331
|
+
return field.name;
|
|
332
|
+
})).toContain('score');
|
|
333
|
+
expect(state.suitabilities[0].isConfigActive).toBe(false);
|
|
334
|
+
var layer = state.layers.find(function (item) {
|
|
335
|
+
return item.config.dataId === op.resultId;
|
|
336
|
+
});
|
|
337
|
+
expect(layer).toBeTruthy();
|
|
338
|
+
expect(layer === null || layer === void 0 || (_layer$config$colorFi = layer.config.colorField) === null || _layer$config$colorFi === void 0 ? void 0 : _layer$config$colorFi.name).toBe('score');
|
|
339
|
+
});
|
|
340
|
+
test('running without a weighted field surfaces an error instead of a dataset', function () {
|
|
341
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addSuitability('sites'));
|
|
342
|
+
var op = state.suitabilities[0];
|
|
343
|
+
state = reduceVisState(state, _actions.VisStateActions.setSuitabilityConfig(op.id, {
|
|
344
|
+
weights: {}
|
|
345
|
+
}));
|
|
346
|
+
state = reduceVisState(state, _actions.VisStateActions.runSuitability(op.id));
|
|
347
|
+
expect(state.suitabilities[0].error).toBe('Select at least one field to score');
|
|
348
|
+
expect(state.suitabilities[0].isConfigActive).toBe(true);
|
|
349
|
+
expect(state.datasets[op.resultId]).toBeUndefined();
|
|
350
|
+
});
|
|
351
|
+
test('deleting the source dataset drops the op but keeps the scored snapshot', function () {
|
|
352
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addSuitability('sites'));
|
|
353
|
+
var op = state.suitabilities[0];
|
|
354
|
+
state = reduceVisState(state, _actions.VisStateActions.runSuitability(op.id));
|
|
355
|
+
state = flushCreateTableTasks(state);
|
|
356
|
+
expect(state.datasets[op.resultId]).toBeTruthy();
|
|
357
|
+
state = reduceVisState(state, _actions.VisStateActions.removeDataset('sites'));
|
|
358
|
+
expect(state.datasets.sites).toBeUndefined();
|
|
359
|
+
expect(state.datasets[op.resultId]).toBeTruthy();
|
|
360
|
+
expect(state.suitabilities).toHaveLength(0);
|
|
361
|
+
});
|
|
362
|
+
test('the op config stays out of saved maps while the derived dataset persists', function () {
|
|
363
|
+
var _derivedMeta$derivedD2;
|
|
364
|
+
var state = reduceVisState(siteState(), _actions.VisStateActions.addSuitability('sites'));
|
|
365
|
+
var op = state.suitabilities[0];
|
|
366
|
+
state = reduceVisState(state, _actions.VisStateActions.runSuitability(op.id));
|
|
367
|
+
state = flushCreateTableTasks(state);
|
|
368
|
+
var saved = _schemas["default"].save({
|
|
369
|
+
visState: state,
|
|
370
|
+
mapState: {},
|
|
371
|
+
mapStyle: {},
|
|
372
|
+
uiState: {}
|
|
373
|
+
});
|
|
374
|
+
expect(saved.config.config.visState).not.toHaveProperty('suitabilities');
|
|
375
|
+
var derived = saved.datasets.find(function (dataset) {
|
|
376
|
+
return dataset.data.id === op.resultId;
|
|
377
|
+
});
|
|
378
|
+
var derivedMeta = derived === null || derived === void 0 ? void 0 : derived.data.metadata;
|
|
379
|
+
expect(derivedMeta === null || derivedMeta === void 0 || (_derivedMeta$derivedD2 = derivedMeta.derivedDataset) === null || _derivedMeta$derivedD2 === void 0 ? void 0 : _derivedMeta$derivedD2.type).toBe('suitability');
|
|
255
380
|
});
|
|
256
381
|
});
|
|
257
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9hY3Rpb25zIiwiX3RhYmxlIiwiX3NjaGVtYXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3Rhc2tzIiwiX3Zpc1N0YXRlIiwiX3Zpc1N0YXRlVXBkYXRlcnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInJlZHVjZVZpc1N0YXRlIiwidmlzU3RhdGVSZWR1Y2VyIiwibWFrZVRhYmxlIiwiaWQiLCJmaWVsZHMiLCJyb3dzIiwidGFibGUiLCJLZXBsZXJUYWJsZSIsImluZm8iLCJsYWJlbCIsInR5cGUiLCJjb2xvciIsInVwZGF0ZVNjaGVtYSIsIm1hcCIsImZpZWxkIiwibmFtZSIsImFuYWx5emVyVHlwZSIsImZsdXNoQ3JlYXRlVGFibGVUYXNrcyIsInN0YXRlIiwidGFza3MiLCJkcmFpblRhc2tzRm9yVGVzdGluZyIsInJlZHVjZSIsIm5leHRTdGF0ZSIsInRhc2siLCJTdHJpbmciLCJpbmNsdWRlcyIsInRhYmxlcyIsIkFycmF5IiwiaXNBcnJheSIsInBheWxvYWQiLCJvcHRzIiwiZGF0YSIsInN1Y2NlZWRUYXNrV2l0aFZhbHVlcyIsImRlc2NyaWJlIiwiYmVmb3JlRWFjaCIsInRlc3QiLCJjaXRpZXMiLCJBTExfRklFTERfVFlQRVMiLCJzdHJpbmciLCJpbnRlZ2VyIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJkYXRhc2V0cyIsIlZpc1N0YXRlQWN0aW9ucyIsImFkZEdyb3VwQnkiLCJleHBlY3QiLCJncm91cEJ5cyIsInRvSGF2ZUxlbmd0aCIsIm9wSWQiLCJzZXRHcm91cEJ5Q29uZmlnIiwiZmllbGROYW1lIiwiYWdncmVnYXRpb25zIiwicG9wIiwicnVuR3JvdXBCeSIsInJlc3VsdElkIiwidG9CZVRydXRoeSIsIm1ldGFkYXRhIiwiZGVyaXZlZERhdGFzZXQiLCJ0b0VxdWFsIiwic291cmNlRGF0YUlkcyIsIm9wZXJhdGlvbklkIiwiZGF0YUNvbnRhaW5lciIsIm51bVJvd3MiLCJ0b0JlIiwib3AiLCJyZW1vdmVEYXRhc2V0IiwidG9CZVVuZGVmaW5lZCIsInJlc3VsdExhYmVsIiwidG9NYXRjaCIsImFkZEpvaW4iLCJqb2lucyIsInBvbHlzIiwiZ2VvanNvbiIsImFkZFNwYXRpYWxKb2luIiwicHJlZGljYXRlIiwiY29uY2F0Iiwic2V0U3BhdGlhbEpvaW5Db25maWciLCJwb2x5Z29uIiwiY29vcmRpbmF0ZXMiLCJwdHMiLCJyZWFsIiwicmlnaHREYXRhSWQiLCJsZWZ0R2VvIiwia2luZCIsInJpZ2h0R2VvIiwibGF0RmllbGQiLCJsbmdGaWVsZCIsInZhbHVlIiwicnVuU3BhdGlhbEpvaW4iLCJfZGVyaXZlZE1ldGEkZGVyaXZlZEQiLCJfc2F2ZWQkY29uZmlnJGNvbmZpZyQiLCJzYXZlZCIsIlNjaGVtYU1hbmFnZXIiLCJzYXZlIiwidmlzU3RhdGUiLCJtYXBTdGF0ZSIsIm1hcFN0eWxlIiwidWlTdGF0ZSIsImRlcml2ZWQiLCJmaW5kIiwiZGF0YXNldCIsImRlcml2ZWRNZXRhIiwiY29uZmlnIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFzZXQtb3BzLXVwZGF0ZXJzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQgU2NoZW1hTWFuYWdlciwge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtkcmFpblRhc2tzRm9yVGVzdGluZywgc3VjY2VlZFRhc2tXaXRoVmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcblxuaW1wb3J0IHZpc1N0YXRlUmVkdWNlciBmcm9tICcuL3Zpcy1zdGF0ZSc7XG5pbXBvcnQge0lOSVRJQUxfVklTX1NUQVRFfSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5cbmNvbnN0IHJlZHVjZVZpc1N0YXRlID0gdmlzU3RhdGVSZWR1Y2VyIGFzIChzdGF0ZTogVmlzU3RhdGUsIGFjdGlvbjogdW5rbm93bikgPT4gVmlzU3RhdGU7XG5cbmZ1bmN0aW9uIG1ha2VUYWJsZShpZDogc3RyaW5nLCBmaWVsZHM6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZ31bXSwgcm93czogYW55W11bXSkge1xuICBjb25zdCB0YWJsZSA9IG5ldyBLZXBsZXJUYWJsZSh7XG4gICAgaW5mbzoge2lkLCBsYWJlbDogaWQsIHR5cGU6ICdsb2NhbCd9LFxuICAgIGNvbG9yOiBbMCwgMCwgMF1cbiAgfSk7XG4gIHRhYmxlLnVwZGF0ZVNjaGVtYSh7XG4gICAgZmllbGRzOiBmaWVsZHMubWFwKGZpZWxkID0+ICh7XG4gICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGFuYWx5emVyVHlwZTogZmllbGQudHlwZVxuICAgIH0pKSxcbiAgICByb3dzXG4gIH0pO1xuICByZXR1cm4gdGFibGU7XG59XG5cbmZ1bmN0aW9uIGZsdXNoQ3JlYXRlVGFibGVUYXNrcyhzdGF0ZTogVmlzU3RhdGUpIHtcbiAgY29uc3QgdGFza3MgPSBkcmFpblRhc2tzRm9yVGVzdGluZygpO1xuICByZXR1cm4gdGFza3MucmVkdWNlKChuZXh0U3RhdGUsIHRhc2spID0+IHtcbiAgICBpZiAoIVN0cmluZyh0YXNrLmxhYmVsIHx8ICcnKS5pbmNsdWRlcygnQ1JFQVRFX1RBQkxFX1RBU0snKSkge1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgdGFibGVzID0gKEFycmF5LmlzQXJyYXkodGFzay5wYXlsb2FkKSA/IHRhc2sucGF5bG9hZCA6IFt0YXNrLnBheWxvYWRdKS5tYXAocGF5bG9hZCA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IG5ldyBLZXBsZXJUYWJsZSh7aW5mbzogcGF5bG9hZC5pbmZvLCBjb2xvcjogcGF5bG9hZC5jb2xvciwgLi4ucGF5bG9hZC5vcHRzfSk7XG4gICAgICB0YWJsZS51cGRhdGVTY2hlbWEocGF5bG9hZC5kYXRhKTtcbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVkdWNlVmlzU3RhdGUobmV4dFN0YXRlLCBzdWNjZWVkVGFza1dpdGhWYWx1ZXModGFzaywgdGFibGVzKSk7XG4gIH0sIHN0YXRlKTtcbn1cblxuZGVzY3JpYmUoJ2RhdGFzZXQgb3BzIHZpcy1zdGF0ZScsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZHJhaW5UYXNrc0ZvclRlc3RpbmcoKTtcbiAgfSk7XG5cbiAgdGVzdCgncnVuR3JvdXBCeSBhZGRzIGEgZGVyaXZlZCBkYXRhc2V0JywgKCkgPT4ge1xuICAgIGNvbnN0IGNpdGllcyA9IG1ha2VUYWJsZShcbiAgICAgICdjaXRpZXMnLFxuICAgICAgW1xuICAgICAgICB7bmFtZTogJ3JlZ2lvbicsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9LFxuICAgICAgICB7bmFtZTogJ3BvcCcsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgWyd3ZXN0JywgMTBdLFxuICAgICAgICBbJ3dlc3QnLCAyMF0sXG4gICAgICAgIFsnZWFzdCcsIDQwXVxuICAgICAgXVxuICAgICk7XG4gICAgbGV0IHN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgZGF0YXNldHM6IHtjaXRpZXN9XG4gICAgfTtcblxuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRHcm91cEJ5KCdjaXRpZXMnKSk7XG4gICAgZXhwZWN0KHN0YXRlLmdyb3VwQnlzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgY29uc3Qgb3BJZCA9IHN0YXRlLmdyb3VwQnlzWzBdLmlkO1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShcbiAgICAgIHN0YXRlLFxuICAgICAgVmlzU3RhdGVBY3Rpb25zLnNldEdyb3VwQnlDb25maWcob3BJZCwge1xuICAgICAgICBmaWVsZE5hbWU6ICdyZWdpb24nLFxuICAgICAgICBhZ2dyZWdhdGlvbnM6IHtwb3A6ICdzdW0nfVxuICAgICAgfSlcbiAgICApO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5ydW5Hcm91cEJ5KG9wSWQpKTtcbiAgICBzdGF0ZSA9IGZsdXNoQ3JlYXRlVGFibGVUYXNrcyhzdGF0ZSk7XG5cbiAgICBjb25zdCByZXN1bHRJZCA9IHN0YXRlLmdyb3VwQnlzWzBdLnJlc3VsdElkO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0pLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdLm1ldGFkYXRhLmRlcml2ZWREYXRhc2V0KS50b0VxdWFsKHtcbiAgICAgIHR5cGU6ICdncm91cEJ5JyxcbiAgICAgIHNvdXJjZURhdGFJZHM6IFsnY2l0aWVzJ10sXG4gICAgICBvcGVyYXRpb25JZDogb3BJZFxuICAgIH0pO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0uZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpLnRvQmUoMik7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlbGV0ZSBwYXJlbnQga2VlcHMgZGVyaXZlZCBjaGlsZCBzbmFwc2hvdCcsICgpID0+IHtcbiAgICBjb25zdCBjaXRpZXMgPSBtYWtlVGFibGUoXG4gICAgICAnY2l0aWVzJyxcbiAgICAgIFtcbiAgICAgICAge25hbWU6ICdyZWdpb24nLCB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nfSxcbiAgICAgICAge25hbWU6ICdwb3AnLCB0eXBlOiBBTExfRklFTERfVFlQRVMuaW50ZWdlcn1cbiAgICAgIF0sXG4gICAgICBbWyd3ZXN0JywgMTBdXVxuICAgICk7XG4gICAgbGV0IHN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgZGF0YXNldHM6IHtjaXRpZXN9XG4gICAgfTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMuYWRkR3JvdXBCeSgnY2l0aWVzJykpO1xuICAgIGNvbnN0IG9wID0gc3RhdGUuZ3JvdXBCeXNbMF07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShcbiAgICAgIHN0YXRlLFxuICAgICAgVmlzU3RhdGVBY3Rpb25zLnNldEdyb3VwQnlDb25maWcob3AuaWQsIHtcbiAgICAgICAgZmllbGROYW1lOiAncmVnaW9uJyxcbiAgICAgICAgYWdncmVnYXRpb25zOiB7cG9wOiAnc3VtJ31cbiAgICAgIH0pXG4gICAgKTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucnVuR3JvdXBCeShvcC5pZCkpO1xuICAgIHN0YXRlID0gZmx1c2hDcmVhdGVUYWJsZVRhc2tzKHN0YXRlKTtcblxuICAgIGV4cGVjdChPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucmVtb3ZlRGF0YXNldCgnY2l0aWVzJykpO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0cy5jaXRpZXMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHNbb3AucmVzdWx0SWRdKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHN0YXRlLmdyb3VwQnlzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FkZEdyb3VwQnkgdXNlcyBhIHNob3J0IHJhbmRvbSByZXN1bHQgbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBjaXRpZXMgPSBtYWtlVGFibGUoXG4gICAgICAnY2l0aWVzJyxcbiAgICAgIFt7bmFtZTogJ3JlZ2lvbicsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9XSxcbiAgICAgIFtbJ3dlc3QnXV1cbiAgICApO1xuICAgIGxldCBzdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIGRhdGFzZXRzOiB7Y2l0aWVzfVxuICAgIH07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZEdyb3VwQnkoJ2NpdGllcycpKTtcbiAgICBleHBlY3Qoc3RhdGUuZ3JvdXBCeXNbMF0ucmVzdWx0TGFiZWwpLnRvTWF0Y2goL15ncm91cC1ieS1cXGR7Mn0kLyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FkZEpvaW4gdXNlcyBhIHNob3J0IHJhbmRvbSByZXN1bHQgbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBjaXRpZXMgPSBtYWtlVGFibGUoJ2NpdGllcycsIFt7bmFtZTogJ2lkJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ31dLCBbWycxJ11dKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge2NpdGllc31cbiAgICB9O1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRKb2luKCdjaXRpZXMnKSk7XG4gICAgZXhwZWN0KHN0YXRlLmpvaW5zWzBdLnJlc3VsdExhYmVsKS50b01hdGNoKC9eam9pbi1kYXRhc2V0LVxcZHsyfSQvKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2V0U3BhdGlhbEpvaW5Db25maWcgdXBkYXRlcyB0aGUgcHJlZGljYXRlJywgKCkgPT4ge1xuICAgIGNvbnN0IHBvbHlzID0gbWFrZVRhYmxlKCdwb2x5cycsIFt7bmFtZTogJ2dlb20nLCB0eXBlOiBBTExfRklFTERfVFlQRVMuZ2VvanNvbn1dLCBbXSk7XG4gICAgbGV0IHN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgZGF0YXNldHM6IHtwb2x5c31cbiAgICB9O1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRTcGF0aWFsSm9pbigncG9seXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5qb2luc1swXTtcbiAgICBleHBlY3Qoc3RhdGUuam9pbnNbMF0ucHJlZGljYXRlKS50b0JlKCdpbnRlcnNlY3RzJyk7XG4gICAgZXhwZWN0KHN0YXRlLmpvaW5zWzBdLnJlc3VsdExhYmVsKS50b0JlKGBzcGF0aWFsLWpvaW4tJHtzdGF0ZS5qb2luc1swXS5yZXN1bHRJZH1gKTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKFxuICAgICAgc3RhdGUsXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMuc2V0U3BhdGlhbEpvaW5Db25maWcob3AuaWQsIHtwcmVkaWNhdGU6ICd3aXRoaW4nfSlcbiAgICApO1xuICAgIGV4cGVjdChzdGF0ZS5qb2luc1swXS5wcmVkaWNhdGUpLnRvQmUoJ3dpdGhpbicpO1xuICB9KTtcblxuICB0ZXN0KCdkZWxldGUgc3BhdGlhbCBqb2luIHNvdXJjZSBrZWVwcyByZXN1bHQgc25hcHNob3QnLCAoKSA9PiB7XG4gICAgY29uc3QgcG9seWdvbiA9IHtcbiAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgICAgIFtcbiAgICAgICAgICBbLTEwLCAtMTBdLFxuICAgICAgICAgIFsxMCwgLTEwXSxcbiAgICAgICAgICBbMTAsIDEwXSxcbiAgICAgICAgICBbLTEwLCAxMF0sXG4gICAgICAgICAgWy0xMCwgLTEwXVxuICAgICAgICBdXG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBwb2x5cyA9IG1ha2VUYWJsZShcbiAgICAgICdwb2x5cycsXG4gICAgICBbXG4gICAgICAgIHtuYW1lOiAnbmFtZScsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9LFxuICAgICAgICB7bmFtZTogJ2dlb20nLCB0eXBlOiBBTExfRklFTERfVFlQRVMuZ2VvanNvbn1cbiAgICAgIF0sXG4gICAgICBbWyd3ZXN0JywgcG9seWdvbl1dXG4gICAgKTtcbiAgICBjb25zdCBwdHMgPSBtYWtlVGFibGUoXG4gICAgICAncHRzJyxcbiAgICAgIFtcbiAgICAgICAge25hbWU6ICdsYXQnLCB0eXBlOiBBTExfRklFTERfVFlQRVMucmVhbH0sXG4gICAgICAgIHtuYW1lOiAnbG5nJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnJlYWx9LFxuICAgICAgICB7bmFtZTogJ3ZhbHVlJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJ9XG4gICAgICBdLFxuICAgICAgW1swLCAwLCAxMF1dXG4gICAgKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge3BvbHlzLCBwdHN9XG4gICAgfTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMuYWRkU3BhdGlhbEpvaW4oJ3BvbHlzJykpO1xuICAgIGNvbnN0IG9wID0gc3RhdGUuam9pbnNbMF07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShcbiAgICAgIHN0YXRlLFxuICAgICAgVmlzU3RhdGVBY3Rpb25zLnNldFNwYXRpYWxKb2luQ29uZmlnKG9wLmlkLCB7XG4gICAgICAgIHJpZ2h0RGF0YUlkOiAncHRzJyxcbiAgICAgICAgbGVmdEdlbzoge2tpbmQ6ICdnZW9qc29uJywgZmllbGROYW1lOiAnZ2VvbSd9LFxuICAgICAgICByaWdodEdlbzoge2tpbmQ6ICdsYXRsbmcnLCBsYXRGaWVsZDogJ2xhdCcsIGxuZ0ZpZWxkOiAnbG5nJ30sXG4gICAgICAgIGFnZ3JlZ2F0aW9uczoge3ZhbHVlOiAnc3VtJ31cbiAgICAgIH0pXG4gICAgKTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucnVuU3BhdGlhbEpvaW4ob3AuaWQpKTtcbiAgICBzdGF0ZSA9IGZsdXNoQ3JlYXRlVGFibGVUYXNrcyhzdGF0ZSk7XG5cbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHNbb3AucmVzdWx0SWRdKS50b0JlVHJ1dGh5KCk7XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnJlbW92ZURhdGFzZXQoJ3B0cycpKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHMucHRzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzLnBvbHlzKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzW29wLnJlc3VsdElkXSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChzdGF0ZS5qb2lucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICB0ZXN0KCdzYXZlL2xvYWQgcm91bmR0cmlwIGtlZXBzIGRlcml2ZWREYXRhc2V0IG1ldGFkYXRhIGFuZCBkcmFmdHMnLCAoKSA9PiB7XG4gICAgY29uc3QgY2l0aWVzID0gbWFrZVRhYmxlKFxuICAgICAgJ2NpdGllcycsXG4gICAgICBbXG4gICAgICAgIHtuYW1lOiAncmVnaW9uJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ30sXG4gICAgICAgIHtuYW1lOiAncG9wJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJ9XG4gICAgICBdLFxuICAgICAgW1snd2VzdCcsIDEwXV1cbiAgICApO1xuICAgIGxldCBzdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIGRhdGFzZXRzOiB7Y2l0aWVzfVxuICAgIH07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZEdyb3VwQnkoJ2NpdGllcycpKTtcbiAgICBjb25zdCBvcCA9IHN0YXRlLmdyb3VwQnlzWzBdO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoXG4gICAgICBzdGF0ZSxcbiAgICAgIFZpc1N0YXRlQWN0aW9ucy5zZXRHcm91cEJ5Q29uZmlnKG9wLmlkLCB7XG4gICAgICAgIGZpZWxkTmFtZTogJ3JlZ2lvbicsXG4gICAgICAgIGFnZ3JlZ2F0aW9uczoge3BvcDogJ3N1bSd9XG4gICAgICB9KVxuICAgICk7XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnJ1bkdyb3VwQnkob3AuaWQpKTtcbiAgICBzdGF0ZSA9IGZsdXNoQ3JlYXRlVGFibGVUYXNrcyhzdGF0ZSk7XG5cbiAgICBjb25zdCBzYXZlZCA9IFNjaGVtYU1hbmFnZXIuc2F2ZSh7XG4gICAgICB2aXNTdGF0ZTogc3RhdGUsXG4gICAgICBtYXBTdGF0ZToge30sXG4gICAgICBtYXBTdHlsZToge30sXG4gICAgICB1aVN0YXRlOiB7fVxuICAgIH0pO1xuICAgIGNvbnN0IGRlcml2ZWQgPSBzYXZlZC5kYXRhc2V0cy5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhLmlkID09PSBvcC5yZXN1bHRJZCk7XG4gICAgY29uc3QgZGVyaXZlZE1ldGEgPSBkZXJpdmVkPy5kYXRhLm1ldGFkYXRhIGFzXG4gICAgICB8IHtkZXJpdmVkRGF0YXNldD86IHt0eXBlPzogc3RyaW5nfSB8IG51bGx9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBleHBlY3QoZGVyaXZlZE1ldGE/LmRlcml2ZWREYXRhc2V0Py50eXBlKS50b0JlKCdncm91cEJ5Jyk7XG4gICAgZXhwZWN0KHNhdmVkLmNvbmZpZy5jb25maWcudmlzU3RhdGUuZ3JvdXBCeXM/LlswXS5maWVsZE5hbWUpLnRvQmUoJ3JlZ2lvbicpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBR0EsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sU0FBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUF1RCxTQUFBUSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVks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
|
|
382
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9hY3Rpb25zIiwiX3RhYmxlIiwiX3NjaGVtYXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3Rhc2tzIiwiX3Zpc1N0YXRlIiwiX3Zpc1N0YXRlVXBkYXRlcnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInJlZHVjZVZpc1N0YXRlIiwidmlzU3RhdGVSZWR1Y2VyIiwibWFrZVRhYmxlIiwiaWQiLCJmaWVsZHMiLCJyb3dzIiwidGFibGUiLCJLZXBsZXJUYWJsZSIsImluZm8iLCJsYWJlbCIsInR5cGUiLCJjb2xvciIsInVwZGF0ZVNjaGVtYSIsIm1hcCIsImZpZWxkIiwibmFtZSIsImFuYWx5emVyVHlwZSIsImZsdXNoQ3JlYXRlVGFibGVUYXNrcyIsInN0YXRlIiwidGFza3MiLCJkcmFpblRhc2tzRm9yVGVzdGluZyIsInJlZHVjZSIsIm5leHRTdGF0ZSIsInRhc2siLCJTdHJpbmciLCJpbmNsdWRlcyIsInRhYmxlcyIsIkFycmF5IiwiaXNBcnJheSIsInBheWxvYWQiLCJvcHRzIiwiZGF0YSIsInN1Y2NlZWRUYXNrV2l0aFZhbHVlcyIsImRlc2NyaWJlIiwiYmVmb3JlRWFjaCIsInRlc3QiLCJjaXRpZXMiLCJBTExfRklFTERfVFlQRVMiLCJzdHJpbmciLCJpbnRlZ2VyIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJkYXRhc2V0cyIsIlZpc1N0YXRlQWN0aW9ucyIsImFkZEdyb3VwQnkiLCJleHBlY3QiLCJncm91cEJ5cyIsInRvSGF2ZUxlbmd0aCIsIm9wSWQiLCJzZXRHcm91cEJ5Q29uZmlnIiwiZmllbGROYW1lIiwiYWdncmVnYXRpb25zIiwicG9wIiwicmVzdWx0SWQiLCJydW5Hcm91cEJ5IiwidG9CZVRydXRoeSIsIm1ldGFkYXRhIiwiZGVyaXZlZERhdGFzZXQiLCJ0b0VxdWFsIiwic291cmNlRGF0YUlkcyIsIm9wZXJhdGlvbklkIiwiZGF0YUNvbnRhaW5lciIsIm51bVJvd3MiLCJ0b0JlIiwib3AiLCJyZW1vdmVEYXRhc2V0IiwidG9CZVVuZGVmaW5lZCIsInJlc3VsdExhYmVsIiwidG9NYXRjaCIsImFkZEpvaW4iLCJqb2lucyIsInBvbHlzIiwiZ2VvanNvbiIsImFkZFNwYXRpYWxKb2luIiwicHJlZGljYXRlIiwiY29uY2F0Iiwic2V0U3BhdGlhbEpvaW5Db25maWciLCJwb2x5Z29uIiwiY29vcmRpbmF0ZXMiLCJwdHMiLCJyZWFsIiwicmlnaHREYXRhSWQiLCJsZWZ0R2VvIiwia2luZCIsInJpZ2h0R2VvIiwibGF0RmllbGQiLCJsbmdGaWVsZCIsInZhbHVlIiwicnVuU3BhdGlhbEpvaW4iLCJfZGVyaXZlZE1ldGEkZGVyaXZlZEQiLCJfc2F2ZWQkY29uZmlnJGNvbmZpZyQiLCJzYXZlZCIsIlNjaGVtYU1hbmFnZXIiLCJzYXZlIiwidmlzU3RhdGUiLCJtYXBTdGF0ZSIsIm1hcFN0eWxlIiwidWlTdGF0ZSIsImRlcml2ZWQiLCJmaW5kIiwiZGF0YXNldCIsImRlcml2ZWRNZXRhIiwiY29uZmlnIiwic2l0ZVN0YXRlIiwic2l0ZXMiLCJhZGRTdWl0YWJpbGl0eSIsInN1aXRhYmlsaXRpZXMiLCJ3ZWlnaHRzIiwibGF0IiwibG5nIiwiYWNjZXNzIiwiY29zdCIsIndlaWdodFN0YW5kYXJkaXphdGlvbiIsImRhdGFTdGFuZGFyZGl6YXRpb24iLCJvdXRwdXRGaWVsZE5hbWUiLCJpc0NvbmZpZ0FjdGl2ZSIsIl9sYXllciRjb25maWckY29sb3JGaSIsInNldFN1aXRhYmlsaXR5Q29uZmlnIiwicnVuU3VpdGFiaWxpdHkiLCJyZXN1bHQiLCJ0b0NvbnRhaW4iLCJsYXllciIsImxheWVycyIsIml0ZW0iLCJkYXRhSWQiLCJjb2xvckZpZWxkIiwiZXJyb3IiLCJfZGVyaXZlZE1ldGEkZGVyaXZlZEQyIiwibm90IiwidG9IYXZlUHJvcGVydHkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YXNldC1vcHMtdXBkYXRlcnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtWaXNTdGF0ZUFjdGlvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCBTY2hlbWFNYW5hZ2VyLCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2RyYWluVGFza3NGb3JUZXN0aW5nLCBzdWNjZWVkVGFza1dpdGhWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuXG5pbXBvcnQgdmlzU3RhdGVSZWR1Y2VyIGZyb20gJy4vdmlzLXN0YXRlJztcbmltcG9ydCB7SU5JVElBTF9WSVNfU1RBVEV9IGZyb20gJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJztcblxuY29uc3QgcmVkdWNlVmlzU3RhdGUgPSB2aXNTdGF0ZVJlZHVjZXIgYXMgKHN0YXRlOiBWaXNTdGF0ZSwgYWN0aW9uOiB1bmtub3duKSA9PiBWaXNTdGF0ZTtcblxuZnVuY3Rpb24gbWFrZVRhYmxlKGlkOiBzdHJpbmcsIGZpZWxkczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nfVtdLCByb3dzOiBhbnlbXVtdKSB7XG4gIGNvbnN0IHRhYmxlID0gbmV3IEtlcGxlclRhYmxlKHtcbiAgICBpbmZvOiB7aWQsIGxhYmVsOiBpZCwgdHlwZTogJ2xvY2FsJ30sXG4gICAgY29sb3I6IFswLCAwLCAwXVxuICB9KTtcbiAgdGFibGUudXBkYXRlU2NoZW1hKHtcbiAgICBmaWVsZHM6IGZpZWxkcy5tYXAoZmllbGQgPT4gKHtcbiAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgYW5hbHl6ZXJUeXBlOiBmaWVsZC50eXBlXG4gICAgfSkpLFxuICAgIHJvd3NcbiAgfSk7XG4gIHJldHVybiB0YWJsZTtcbn1cblxuZnVuY3Rpb24gZmx1c2hDcmVhdGVUYWJsZVRhc2tzKHN0YXRlOiBWaXNTdGF0ZSkge1xuICBjb25zdCB0YXNrcyA9IGRyYWluVGFza3NGb3JUZXN0aW5nKCk7XG4gIHJldHVybiB0YXNrcy5yZWR1Y2UoKG5leHRTdGF0ZSwgdGFzaykgPT4ge1xuICAgIGlmICghU3RyaW5nKHRhc2subGFiZWwgfHwgJycpLmluY2x1ZGVzKCdDUkVBVEVfVEFCTEVfVEFTSycpKSB7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZXMgPSAoQXJyYXkuaXNBcnJheSh0YXNrLnBheWxvYWQpID8gdGFzay5wYXlsb2FkIDogW3Rhc2sucGF5bG9hZF0pLm1hcChwYXlsb2FkID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gbmV3IEtlcGxlclRhYmxlKHtpbmZvOiBwYXlsb2FkLmluZm8sIGNvbG9yOiBwYXlsb2FkLmNvbG9yLCAuLi5wYXlsb2FkLm9wdHN9KTtcbiAgICAgIHRhYmxlLnVwZGF0ZVNjaGVtYShwYXlsb2FkLmRhdGEpO1xuICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH0pO1xuICAgIHJldHVybiByZWR1Y2VWaXNTdGF0ZShuZXh0U3RhdGUsIHN1Y2NlZWRUYXNrV2l0aFZhbHVlcyh0YXNrLCB0YWJsZXMpKTtcbiAgfSwgc3RhdGUpO1xufVxuXG5kZXNjcmliZSgnZGF0YXNldCBvcHMgdmlzLXN0YXRlJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkcmFpblRhc2tzRm9yVGVzdGluZygpO1xuICB9KTtcblxuICB0ZXN0KCdydW5Hcm91cEJ5IGFkZHMgYSBkZXJpdmVkIGRhdGFzZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgY2l0aWVzID0gbWFrZVRhYmxlKFxuICAgICAgJ2NpdGllcycsXG4gICAgICBbXG4gICAgICAgIHtuYW1lOiAncmVnaW9uJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ30sXG4gICAgICAgIHtuYW1lOiAncG9wJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJ9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbJ3dlc3QnLCAxMF0sXG4gICAgICAgIFsnd2VzdCcsIDIwXSxcbiAgICAgICAgWydlYXN0JywgNDBdXG4gICAgICBdXG4gICAgKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge2NpdGllc31cbiAgICB9O1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZEdyb3VwQnkoJ2NpdGllcycpKTtcbiAgICBleHBlY3Qoc3RhdGUuZ3JvdXBCeXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBjb25zdCBvcElkID0gc3RhdGUuZ3JvdXBCeXNbMF0uaWQ7XG5cbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKFxuICAgICAgc3RhdGUsXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMuc2V0R3JvdXBCeUNvbmZpZyhvcElkLCB7XG4gICAgICAgIGZpZWxkTmFtZTogJ3JlZ2lvbicsXG4gICAgICAgIGFnZ3JlZ2F0aW9uczoge3BvcDogJ3N1bSd9XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0SWQgPSBzdGF0ZS5ncm91cEJ5c1swXS5yZXN1bHRJZDtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucnVuR3JvdXBCeShvcElkKSk7XG4gICAgc3RhdGUgPSBmbHVzaENyZWF0ZVRhYmxlVGFza3Moc3RhdGUpO1xuXG4gICAgZXhwZWN0KHN0YXRlLmdyb3VwQnlzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0ubWV0YWRhdGEuZGVyaXZlZERhdGFzZXQpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogJ2dyb3VwQnknLFxuICAgICAgc291cmNlRGF0YUlkczogWydjaXRpZXMnXSxcbiAgICAgIG9wZXJhdGlvbklkOiBvcElkXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXS5kYXRhQ29udGFpbmVyLm51bVJvd3MoKSkudG9CZSgyKTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVsZXRlIHBhcmVudCBrZWVwcyBkZXJpdmVkIGNoaWxkIHNuYXBzaG90JywgKCkgPT4ge1xuICAgIGNvbnN0IGNpdGllcyA9IG1ha2VUYWJsZShcbiAgICAgICdjaXRpZXMnLFxuICAgICAgW1xuICAgICAgICB7bmFtZTogJ3JlZ2lvbicsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9LFxuICAgICAgICB7bmFtZTogJ3BvcCcsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyfVxuICAgICAgXSxcbiAgICAgIFtbJ3dlc3QnLCAxMF1dXG4gICAgKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge2NpdGllc31cbiAgICB9O1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRHcm91cEJ5KCdjaXRpZXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5ncm91cEJ5c1swXTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKFxuICAgICAgc3RhdGUsXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMuc2V0R3JvdXBCeUNvbmZpZyhvcC5pZCwge1xuICAgICAgICBmaWVsZE5hbWU6ICdyZWdpb24nLFxuICAgICAgICBhZ2dyZWdhdGlvbnM6IHtwb3A6ICdzdW0nfVxuICAgICAgfSlcbiAgICApO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5ydW5Hcm91cEJ5KG9wLmlkKSk7XG4gICAgc3RhdGUgPSBmbHVzaENyZWF0ZVRhYmxlVGFza3Moc3RhdGUpO1xuXG4gICAgZXhwZWN0KHN0YXRlLmdyb3VwQnlzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKSkudG9IYXZlTGVuZ3RoKDIpO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5yZW1vdmVEYXRhc2V0KCdjaXRpZXMnKSk7XG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzLmNpdGllcykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tvcC5yZXN1bHRJZF0pLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3Qoc3RhdGUuZ3JvdXBCeXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgdGVzdCgnYWRkR3JvdXBCeSB1c2VzIGEgc2hvcnQgcmFuZG9tIHJlc3VsdCBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGNpdGllcyA9IG1ha2VUYWJsZShcbiAgICAgICdjaXRpZXMnLFxuICAgICAgW3tuYW1lOiAncmVnaW9uJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ31dLFxuICAgICAgW1snd2VzdCddXVxuICAgICk7XG4gICAgbGV0IHN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgZGF0YXNldHM6IHtjaXRpZXN9XG4gICAgfTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMuYWRkR3JvdXBCeSgnY2l0aWVzJykpO1xuICAgIGV4cGVjdChzdGF0ZS5ncm91cEJ5c1swXS5yZXN1bHRMYWJlbCkudG9NYXRjaCgvXmdyb3VwLWJ5LVxcZHsyfSQvKTtcbiAgfSk7XG5cbiAgdGVzdCgnYWRkSm9pbiB1c2VzIGEgc2hvcnQgcmFuZG9tIHJlc3VsdCBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGNpdGllcyA9IG1ha2VUYWJsZSgnY2l0aWVzJywgW3tuYW1lOiAnaWQnLCB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nfV0sIFtbJzEnXV0pO1xuICAgIGxldCBzdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIGRhdGFzZXRzOiB7Y2l0aWVzfVxuICAgIH07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZEpvaW4oJ2NpdGllcycpKTtcbiAgICBleHBlY3Qoc3RhdGUuam9pbnNbMF0ucmVzdWx0TGFiZWwpLnRvTWF0Y2goL15qb2luLWRhdGFzZXQtXFxkezJ9JC8pO1xuICB9KTtcblxuICB0ZXN0KCdzZXRTcGF0aWFsSm9pbkNvbmZpZyB1cGRhdGVzIHRoZSBwcmVkaWNhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgcG9seXMgPSBtYWtlVGFibGUoJ3BvbHlzJywgW3tuYW1lOiAnZ2VvbScsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5nZW9qc29ufV0sIFtdKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge3BvbHlzfVxuICAgIH07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZFNwYXRpYWxKb2luKCdwb2x5cycpKTtcbiAgICBjb25zdCBvcCA9IHN0YXRlLmpvaW5zWzBdO1xuICAgIGV4cGVjdChzdGF0ZS5qb2luc1swXS5wcmVkaWNhdGUpLnRvQmUoJ2ludGVyc2VjdHMnKTtcbiAgICBleHBlY3Qoc3RhdGUuam9pbnNbMF0ucmVzdWx0TGFiZWwpLnRvQmUoYHNwYXRpYWwtam9pbi0ke3N0YXRlLmpvaW5zWzBdLnJlc3VsdElkfWApO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoXG4gICAgICBzdGF0ZSxcbiAgICAgIFZpc1N0YXRlQWN0aW9ucy5zZXRTcGF0aWFsSm9pbkNvbmZpZyhvcC5pZCwge3ByZWRpY2F0ZTogJ3dpdGhpbid9KVxuICAgICk7XG4gICAgZXhwZWN0KHN0YXRlLmpvaW5zWzBdLnByZWRpY2F0ZSkudG9CZSgnd2l0aGluJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlbGV0ZSBzcGF0aWFsIGpvaW4gc291cmNlIGtlZXBzIHJlc3VsdCBzbmFwc2hvdCcsICgpID0+IHtcbiAgICBjb25zdCBwb2x5Z29uID0ge1xuICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgW1xuICAgICAgICAgIFstMTAsIC0xMF0sXG4gICAgICAgICAgWzEwLCAtMTBdLFxuICAgICAgICAgIFsxMCwgMTBdLFxuICAgICAgICAgIFstMTAsIDEwXSxcbiAgICAgICAgICBbLTEwLCAtMTBdXG4gICAgICAgIF1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IHBvbHlzID0gbWFrZVRhYmxlKFxuICAgICAgJ3BvbHlzJyxcbiAgICAgIFtcbiAgICAgICAge25hbWU6ICduYW1lJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ30sXG4gICAgICAgIHtuYW1lOiAnZ2VvbScsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5nZW9qc29ufVxuICAgICAgXSxcbiAgICAgIFtbJ3dlc3QnLCBwb2x5Z29uXV1cbiAgICApO1xuICAgIGNvbnN0IHB0cyA9IG1ha2VUYWJsZShcbiAgICAgICdwdHMnLFxuICAgICAgW1xuICAgICAgICB7bmFtZTogJ2xhdCcsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5yZWFsfSxcbiAgICAgICAge25hbWU6ICdsbmcnLCB0eXBlOiBBTExfRklFTERfVFlQRVMucmVhbH0sXG4gICAgICAgIHtuYW1lOiAndmFsdWUnLCB0eXBlOiBBTExfRklFTERfVFlQRVMuaW50ZWdlcn1cbiAgICAgIF0sXG4gICAgICBbWzAsIDAsIDEwXV1cbiAgICApO1xuICAgIGxldCBzdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIGRhdGFzZXRzOiB7cG9seXMsIHB0c31cbiAgICB9O1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRTcGF0aWFsSm9pbigncG9seXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5qb2luc1swXTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKFxuICAgICAgc3RhdGUsXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMuc2V0U3BhdGlhbEpvaW5Db25maWcob3AuaWQsIHtcbiAgICAgICAgcmlnaHREYXRhSWQ6ICdwdHMnLFxuICAgICAgICBsZWZ0R2VvOiB7a2luZDogJ2dlb2pzb24nLCBmaWVsZE5hbWU6ICdnZW9tJ30sXG4gICAgICAgIHJpZ2h0R2VvOiB7a2luZDogJ2xhdGxuZycsIGxhdEZpZWxkOiAnbGF0JywgbG5nRmllbGQ6ICdsbmcnfSxcbiAgICAgICAgYWdncmVnYXRpb25zOiB7dmFsdWU6ICdzdW0nfVxuICAgICAgfSlcbiAgICApO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5ydW5TcGF0aWFsSm9pbihvcC5pZCkpO1xuICAgIHN0YXRlID0gZmx1c2hDcmVhdGVUYWJsZVRhc2tzKHN0YXRlKTtcblxuICAgIGV4cGVjdChzdGF0ZS5qb2lucykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tvcC5yZXN1bHRJZF0pLnRvQmVUcnV0aHkoKTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucmVtb3ZlRGF0YXNldCgncHRzJykpO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0cy5wdHMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHMucG9seXMpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHNbb3AucmVzdWx0SWRdKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHN0YXRlLmpvaW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3NhdmUvbG9hZCByb3VuZHRyaXAga2VlcHMgdGhlIGRlcml2ZWQgZGF0YXNldCBhbmQgZHJvcHMgdGhlIGZpbmlzaGVkIGdyb3VwIGJ5JywgKCkgPT4ge1xuICAgIGNvbnN0IGNpdGllcyA9IG1ha2VUYWJsZShcbiAgICAgICdjaXRpZXMnLFxuICAgICAgW1xuICAgICAgICB7bmFtZTogJ3JlZ2lvbicsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9LFxuICAgICAgICB7bmFtZTogJ3BvcCcsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyfVxuICAgICAgXSxcbiAgICAgIFtbJ3dlc3QnLCAxMF1dXG4gICAgKTtcbiAgICBsZXQgc3RhdGU6IFZpc1N0YXRlID0ge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICBkYXRhc2V0czoge2NpdGllc31cbiAgICB9O1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5hZGRHcm91cEJ5KCdjaXRpZXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5ncm91cEJ5c1swXTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKFxuICAgICAgc3RhdGUsXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMuc2V0R3JvdXBCeUNvbmZpZyhvcC5pZCwge1xuICAgICAgICBmaWVsZE5hbWU6ICdyZWdpb24nLFxuICAgICAgICBhZ2dyZWdhdGlvbnM6IHtwb3A6ICdzdW0nfVxuICAgICAgfSlcbiAgICApO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5ydW5Hcm91cEJ5KG9wLmlkKSk7XG4gICAgc3RhdGUgPSBmbHVzaENyZWF0ZVRhYmxlVGFza3Moc3RhdGUpO1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBTY2hlbWFNYW5hZ2VyLnNhdmUoe1xuICAgICAgdmlzU3RhdGU6IHN0YXRlLFxuICAgICAgbWFwU3RhdGU6IHt9LFxuICAgICAgbWFwU3R5bGU6IHt9LFxuICAgICAgdWlTdGF0ZToge31cbiAgICB9KTtcbiAgICBjb25zdCBkZXJpdmVkID0gc2F2ZWQuZGF0YXNldHMuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YS5pZCA9PT0gb3AucmVzdWx0SWQpO1xuICAgIGNvbnN0IGRlcml2ZWRNZXRhID0gZGVyaXZlZD8uZGF0YS5tZXRhZGF0YSBhc1xuICAgICAgfCB7ZGVyaXZlZERhdGFzZXQ/OiB7dHlwZT86IHN0cmluZ30gfCBudWxsfVxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgZXhwZWN0KGRlcml2ZWRNZXRhPy5kZXJpdmVkRGF0YXNldD8udHlwZSkudG9CZSgnZ3JvdXBCeScpO1xuICAgIGV4cGVjdChzYXZlZC5jb25maWcuY29uZmlnLnZpc1N0YXRlLmdyb3VwQnlzID8/IFtdKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzdWl0YWJpbGl0eSB2aXMtc3RhdGUnLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGRyYWluVGFza3NGb3JUZXN0aW5nKCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNpdGVTdGF0ZSgpOiBWaXNTdGF0ZSB7XG4gICAgY29uc3Qgc2l0ZXMgPSBtYWtlVGFibGUoXG4gICAgICAnc2l0ZXMnLFxuICAgICAgW1xuICAgICAgICB7bmFtZTogJ25hbWUnLCB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nfSxcbiAgICAgICAge25hbWU6ICdsYXQnLCB0eXBlOiBBTExfRklFTERfVFlQRVMucmVhbH0sXG4gICAgICAgIHtuYW1lOiAnbG5nJywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnJlYWx9LFxuICAgICAgICB7bmFtZTogJ2FjY2VzcycsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyfSxcbiAgICAgICAge25hbWU6ICdjb3N0JywgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJ9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBbJ2EnLCAwLCAwLCAwLCAxMDBdLFxuICAgICAgICBbJ2InLCAxLCAxLCA1LCAyMDBdLFxuICAgICAgICBbJ2MnLCAyLCAyLCAxMCwgMzAwXVxuICAgICAgXVxuICAgICk7XG4gICAgcmV0dXJuIHsuLi5JTklUSUFMX1ZJU19TVEFURSwgZGF0YXNldHM6IHtzaXRlc319O1xuICB9XG5cbiAgdGVzdCgnYWRkU3VpdGFiaWxpdHkgc2VlZHMgbnVtZXJpYyB3ZWlnaHRzIGFuZCBhIHNob3J0IHJhbmRvbSByZXN1bHQgbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHNpdGVTdGF0ZSgpLCBWaXNTdGF0ZUFjdGlvbnMuYWRkU3VpdGFiaWxpdHkoJ3NpdGVzJykpO1xuXG4gICAgZXhwZWN0KHN0YXRlLnN1aXRhYmlsaXRpZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBjb25zdCBvcCA9IHN0YXRlLnN1aXRhYmlsaXRpZXNbMF07XG4gICAgZXhwZWN0KG9wLndlaWdodHMpLnRvRXF1YWwoe2xhdDogMSwgbG5nOiAxLCBhY2Nlc3M6IDEsIGNvc3Q6IDF9KTtcbiAgICBleHBlY3Qob3Aud2VpZ2h0U3RhbmRhcmRpemF0aW9uKS50b0JlKCdub3JtYWxpemUnKTtcbiAgICBleHBlY3Qob3AuZGF0YVN0YW5kYXJkaXphdGlvbikudG9CZSgncmFuZ2UnKTtcbiAgICBleHBlY3Qob3Aub3V0cHV0RmllbGROYW1lKS50b0JlKCdzY29yZScpO1xuICAgIGV4cGVjdChvcC5yZXN1bHRMYWJlbCkudG9NYXRjaCgvXnN1aXRhYmlsaXR5LVxcZHsyfSQvKTtcbiAgfSk7XG5cbiAgdGVzdCgnb3BlbmluZyBhIHN1aXRhYmlsaXR5IG9wIGNsb3NlcyBhbiBvcGVuIGdyb3VwIGJ5JywgKCkgPT4ge1xuICAgIGxldCBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHNpdGVTdGF0ZSgpLCBWaXNTdGF0ZUFjdGlvbnMuYWRkR3JvdXBCeSgnc2l0ZXMnKSk7XG4gICAgZXhwZWN0KHN0YXRlLmdyb3VwQnlzWzBdLmlzQ29uZmlnQWN0aXZlKS50b0JlKHRydWUpO1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZFN1aXRhYmlsaXR5KCdzaXRlcycpKTtcbiAgICBleHBlY3Qoc3RhdGUuZ3JvdXBCeXNbMF0uaXNDb25maWdBY3RpdmUpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzdGF0ZS5zdWl0YWJpbGl0aWVzWzBdLmlzQ29uZmlnQWN0aXZlKS50b0JlKHRydWUpO1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLmFkZEdyb3VwQnkoJ3NpdGVzJykpO1xuICAgIGV4cGVjdChzdGF0ZS5zdWl0YWJpbGl0aWVzWzBdLmlzQ29uZmlnQWN0aXZlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgdGVzdCgncnVuU3VpdGFiaWxpdHkgYWRkcyBhIHNjb3JlZCBkYXRhc2V0IGFuZCBhIGRlZmF1bHQgbGF5ZXInLCAoKSA9PiB7XG4gICAgbGV0IHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc2l0ZVN0YXRlKCksIFZpc1N0YXRlQWN0aW9ucy5hZGRTdWl0YWJpbGl0eSgnc2l0ZXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5zdWl0YWJpbGl0aWVzWzBdO1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShcbiAgICAgIHN0YXRlLFxuICAgICAgVmlzU3RhdGVBY3Rpb25zLnNldFN1aXRhYmlsaXR5Q29uZmlnKG9wLmlkLCB7d2VpZ2h0czoge2FjY2VzczogMSwgY29zdDogMX19KVxuICAgICk7XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnJ1blN1aXRhYmlsaXR5KG9wLmlkKSk7XG4gICAgc3RhdGUgPSBmbHVzaENyZWF0ZVRhYmxlVGFza3Moc3RhdGUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc3RhdGUuZGF0YXNldHNbb3AucmVzdWx0SWRdO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QocmVzdWx0Lm1ldGFkYXRhLmRlcml2ZWREYXRhc2V0KS50b0VxdWFsKHtcbiAgICAgIHR5cGU6ICdzdWl0YWJpbGl0eScsXG4gICAgICBzb3VyY2VEYXRhSWRzOiBbJ3NpdGVzJ10sXG4gICAgICBvcGVyYXRpb25JZDogb3AuaWRcbiAgICB9KTtcbiAgICBleHBlY3QocmVzdWx0LmZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkpLnRvQ29udGFpbignc2NvcmUnKTtcbiAgICBleHBlY3Qoc3RhdGUuc3VpdGFiaWxpdGllc1swXS5pc0NvbmZpZ0FjdGl2ZSkudG9CZShmYWxzZSk7XG5cbiAgICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGl0ZW0gPT4gaXRlbS5jb25maWcuZGF0YUlkID09PSBvcC5yZXN1bHRJZCk7XG4gICAgZXhwZWN0KGxheWVyKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGxheWVyPy5jb25maWcuY29sb3JGaWVsZD8ubmFtZSkudG9CZSgnc2NvcmUnKTtcbiAgfSk7XG5cbiAgdGVzdCgncnVubmluZyB3aXRob3V0IGEgd2VpZ2h0ZWQgZmllbGQgc3VyZmFjZXMgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIGRhdGFzZXQnLCAoKSA9PiB7XG4gICAgbGV0IHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc2l0ZVN0YXRlKCksIFZpc1N0YXRlQWN0aW9ucy5hZGRTdWl0YWJpbGl0eSgnc2l0ZXMnKSk7XG4gICAgY29uc3Qgb3AgPSBzdGF0ZS5zdWl0YWJpbGl0aWVzWzBdO1xuXG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnNldFN1aXRhYmlsaXR5Q29uZmlnKG9wLmlkLCB7d2VpZ2h0czoge319KSk7XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnJ1blN1aXRhYmlsaXR5KG9wLmlkKSk7XG5cbiAgICBleHBlY3Qoc3RhdGUuc3VpdGFiaWxpdGllc1swXS5lcnJvcikudG9CZSgnU2VsZWN0IGF0IGxlYXN0IG9uZSBmaWVsZCB0byBzY29yZScpO1xuICAgIGV4cGVjdChzdGF0ZS5zdWl0YWJpbGl0aWVzWzBdLmlzQ29uZmlnQWN0aXZlKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzdGF0ZS5kYXRhc2V0c1tvcC5yZXN1bHRJZF0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVsZXRpbmcgdGhlIHNvdXJjZSBkYXRhc2V0IGRyb3BzIHRoZSBvcCBidXQga2VlcHMgdGhlIHNjb3JlZCBzbmFwc2hvdCcsICgpID0+IHtcbiAgICBsZXQgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzaXRlU3RhdGUoKSwgVmlzU3RhdGVBY3Rpb25zLmFkZFN1aXRhYmlsaXR5KCdzaXRlcycpKTtcbiAgICBjb25zdCBvcCA9IHN0YXRlLnN1aXRhYmlsaXRpZXNbMF07XG4gICAgc3RhdGUgPSByZWR1Y2VWaXNTdGF0ZShzdGF0ZSwgVmlzU3RhdGVBY3Rpb25zLnJ1blN1aXRhYmlsaXR5KG9wLmlkKSk7XG4gICAgc3RhdGUgPSBmbHVzaENyZWF0ZVRhYmxlVGFza3Moc3RhdGUpO1xuXG4gICAgZXhwZWN0KHN0YXRlLmRhdGFzZXRzW29wLnJlc3VsdElkXSkudG9CZVRydXRoeSgpO1xuICAgIHN0YXRlID0gcmVkdWNlVmlzU3RhdGUoc3RhdGUsIFZpc1N0YXRlQWN0aW9ucy5yZW1vdmVEYXRhc2V0KCdzaXRlcycpKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHMuc2l0ZXMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc3RhdGUuZGF0YXNldHNbb3AucmVzdWx0SWRdKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHN0YXRlLnN1aXRhYmlsaXRpZXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgdGVzdCgndGhlIG9wIGNvbmZpZyBzdGF5cyBvdXQgb2Ygc2F2ZWQgbWFwcyB3aGlsZSB0aGUgZGVyaXZlZCBkYXRhc2V0IHBlcnNpc3RzJywgKCkgPT4ge1xuICAgIGxldCBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHNpdGVTdGF0ZSgpLCBWaXNTdGF0ZUFjdGlvbnMuYWRkU3VpdGFiaWxpdHkoJ3NpdGVzJykpO1xuICAgIGNvbnN0IG9wID0gc3RhdGUuc3VpdGFiaWxpdGllc1swXTtcbiAgICBzdGF0ZSA9IHJlZHVjZVZpc1N0YXRlKHN0YXRlLCBWaXNTdGF0ZUFjdGlvbnMucnVuU3VpdGFiaWxpdHkob3AuaWQpKTtcbiAgICBzdGF0ZSA9IGZsdXNoQ3JlYXRlVGFibGVUYXNrcyhzdGF0ZSk7XG5cbiAgICBjb25zdCBzYXZlZCA9IFNjaGVtYU1hbmFnZXIuc2F2ZSh7XG4gICAgICB2aXNTdGF0ZTogc3RhdGUsXG4gICAgICBtYXBTdGF0ZToge30sXG4gICAgICBtYXBTdHlsZToge30sXG4gICAgICB1aVN0YXRlOiB7fVxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHNhdmVkLmNvbmZpZy5jb25maWcudmlzU3RhdGUpLm5vdC50b0hhdmVQcm9wZXJ0eSgnc3VpdGFiaWxpdGllcycpO1xuICAgIGNvbnN0IGRlcml2ZWQgPSBzYXZlZC5kYXRhc2V0cy5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhLmlkID09PSBvcC5yZXN1bHRJZCk7XG4gICAgY29uc3QgZGVyaXZlZE1ldGEgPSBkZXJpdmVkPy5kYXRhLm1ldGFkYXRhIGFzXG4gICAgICB8IHtkZXJpdmVkRGF0YXNldD86IHt0eXBlPzogc3RyaW5nfSB8IG51bGx9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBleHBlY3QoZGVyaXZlZE1ldGE/LmRlcml2ZWREYXRhc2V0Py50eXBlKS50b0JlKCdzdWl0YWJpbGl0eScpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBR0EsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sU0FBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8saUJBQUEsR0FBQVAsT0FBQTtBQUF1RCxTQUFBUSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENB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
|
package/dist/cjs/export-utils.js
CHANGED
|
@@ -1,69 +1,136 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports["default"] = void 0;
|
|
7
8
|
exports.exportData = exportData;
|
|
8
9
|
exports.formatCsv = formatCsv;
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
9
12
|
var _window = require("global/window");
|
|
10
13
|
var _d3Dsv = require("d3-dsv");
|
|
11
14
|
var _constants = require("@kepler.gl/constants");
|
|
15
|
+
var _processors = require("@kepler.gl/processors");
|
|
12
16
|
var _utils = require("@kepler.gl/utils");
|
|
13
17
|
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; } } }; }
|
|
14
18
|
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; } }
|
|
15
19
|
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; } // SPDX-License-Identifier: MIT
|
|
16
20
|
// Copyright contributors to the kepler.gl project
|
|
17
|
-
function exportData(
|
|
18
|
-
|
|
19
|
-
appName = state.appName;
|
|
20
|
-
var datasets = visState.datasets;
|
|
21
|
-
var selectedDataset = options.selectedDataset,
|
|
22
|
-
dataType = options.dataType,
|
|
23
|
-
filtered = options.filtered;
|
|
24
|
-
// get the selected data
|
|
25
|
-
var filename = appName ? appName : (0, _utils.getApplicationConfig)().defaultDataName;
|
|
26
|
-
var selectedDatasets = datasets[selectedDataset] ? [datasets[selectedDataset]] : Object.values(datasets);
|
|
27
|
-
if (!selectedDatasets.length) {
|
|
28
|
-
// error: selected dataset not found.
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
selectedDatasets.forEach(function (selectedData) {
|
|
32
|
-
var _ref = selectedData,
|
|
33
|
-
dataContainer = _ref.dataContainer,
|
|
34
|
-
fields = _ref.fields,
|
|
35
|
-
label = _ref.label,
|
|
36
|
-
_ref$filteredIdxCPU = _ref.filteredIdxCPU,
|
|
37
|
-
filteredIdxCPU = _ref$filteredIdxCPU === void 0 ? [] : _ref$filteredIdxCPU;
|
|
38
|
-
var toExport = filtered ? (0, _utils.createIndexedDataContainer)(dataContainer, filteredIdxCPU) : dataContainer;
|
|
39
|
-
|
|
40
|
-
// start to export data according to selected data type
|
|
41
|
-
switch (dataType) {
|
|
42
|
-
case _constants.EXPORT_DATA_TYPE.CSV:
|
|
43
|
-
{
|
|
44
|
-
var csv = formatCsv(toExport, fields);
|
|
45
|
-
var fileBlob = new _window.Blob([csv], {
|
|
46
|
-
type: 'text/csv'
|
|
47
|
-
});
|
|
48
|
-
(0, _utils.downloadFile)(fileBlob, "".concat(filename, "_").concat(label, ".csv"));
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
// TODO: support more file types.
|
|
52
|
-
default:
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
21
|
+
function exportData(_x, _x2) {
|
|
22
|
+
return _exportData.apply(this, arguments);
|
|
56
23
|
}
|
|
57
|
-
|
|
58
24
|
/**
|
|
59
25
|
* On export data to csv
|
|
60
26
|
* @param dataContainer
|
|
61
27
|
* @param fields `dataset.fields`
|
|
62
28
|
* @returns csv string
|
|
63
29
|
*/
|
|
30
|
+
function _exportData() {
|
|
31
|
+
_exportData = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(state, options) {
|
|
32
|
+
var visState, appName, datasets, selectedDataset, dataType, filtered, filename, selectedDatasets, errors, _iterator2, _step2, selectedData, _ref4, dataContainer, fields, label, _ref4$filteredIdxCPU, filteredIdxCPU, hiddenColumns, fieldPairs, toExport, layerName, csv, file;
|
|
33
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
34
|
+
while (1) switch (_context.prev = _context.next) {
|
|
35
|
+
case 0:
|
|
36
|
+
visState = state.visState, appName = state.appName;
|
|
37
|
+
datasets = visState.datasets;
|
|
38
|
+
selectedDataset = options.selectedDataset, dataType = options.dataType, filtered = options.filtered; // get the selected data
|
|
39
|
+
filename = appName ? appName : (0, _utils.getApplicationConfig)().defaultDataName;
|
|
40
|
+
selectedDatasets = datasets[selectedDataset] ? [datasets[selectedDataset]] : Object.values(datasets);
|
|
41
|
+
if (selectedDatasets.length) {
|
|
42
|
+
_context.next = 7;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
return _context.abrupt("return");
|
|
46
|
+
case 7:
|
|
47
|
+
errors = [];
|
|
48
|
+
_iterator2 = _createForOfIteratorHelper(selectedDatasets);
|
|
49
|
+
_context.prev = 9;
|
|
50
|
+
_iterator2.s();
|
|
51
|
+
case 11:
|
|
52
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
53
|
+
_context.next = 32;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
selectedData = _step2.value;
|
|
57
|
+
_context.prev = 13;
|
|
58
|
+
_ref4 = selectedData, dataContainer = _ref4.dataContainer, fields = _ref4.fields, label = _ref4.label, _ref4$filteredIdxCPU = _ref4.filteredIdxCPU, filteredIdxCPU = _ref4$filteredIdxCPU === void 0 ? [] : _ref4$filteredIdxCPU, hiddenColumns = _ref4.hiddenColumns, fieldPairs = _ref4.fieldPairs;
|
|
59
|
+
toExport = filtered ? (0, _utils.createIndexedDataContainer)(dataContainer, filteredIdxCPU) : dataContainer;
|
|
60
|
+
layerName = (0, _processors.sanitizeExportName)(label);
|
|
61
|
+
if (!(dataType === _constants.EXPORT_DATA_TYPE.CSV)) {
|
|
62
|
+
_context.next = 21;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
csv = formatCsv(toExport, fields, hiddenColumns);
|
|
66
|
+
(0, _utils.downloadFile)(new _window.Blob([csv], {
|
|
67
|
+
type: 'text/csv'
|
|
68
|
+
}), "".concat(filename, "_").concat(layerName, ".csv"));
|
|
69
|
+
return _context.abrupt("continue", 30);
|
|
70
|
+
case 21:
|
|
71
|
+
_context.next = 23;
|
|
72
|
+
return (0, _processors.encodeDatasetExport)({
|
|
73
|
+
data: toExport,
|
|
74
|
+
fields: fields,
|
|
75
|
+
fieldPairs: fieldPairs,
|
|
76
|
+
hiddenColumns: hiddenColumns,
|
|
77
|
+
dataType: dataType,
|
|
78
|
+
layerName: layerName
|
|
79
|
+
});
|
|
80
|
+
case 23:
|
|
81
|
+
file = _context.sent;
|
|
82
|
+
(0, _utils.downloadFile)(new _window.Blob([file.data], {
|
|
83
|
+
type: file.mimeType
|
|
84
|
+
}), "".concat(filename, "_").concat(layerName, ".").concat(file.extension));
|
|
85
|
+
_context.next = 30;
|
|
86
|
+
break;
|
|
87
|
+
case 27:
|
|
88
|
+
_context.prev = 27;
|
|
89
|
+
_context.t0 = _context["catch"](13);
|
|
90
|
+
errors.push(_context.t0);
|
|
91
|
+
case 30:
|
|
92
|
+
_context.next = 11;
|
|
93
|
+
break;
|
|
94
|
+
case 32:
|
|
95
|
+
_context.next = 37;
|
|
96
|
+
break;
|
|
97
|
+
case 34:
|
|
98
|
+
_context.prev = 34;
|
|
99
|
+
_context.t1 = _context["catch"](9);
|
|
100
|
+
_iterator2.e(_context.t1);
|
|
101
|
+
case 37:
|
|
102
|
+
_context.prev = 37;
|
|
103
|
+
_iterator2.f();
|
|
104
|
+
return _context.finish(37);
|
|
105
|
+
case 40:
|
|
106
|
+
if (!errors.length) {
|
|
107
|
+
_context.next = 42;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
throw errors[0];
|
|
111
|
+
case 42:
|
|
112
|
+
case "end":
|
|
113
|
+
return _context.stop();
|
|
114
|
+
}
|
|
115
|
+
}, _callee, null, [[9, 34, 37, 40], [13, 27]]);
|
|
116
|
+
}));
|
|
117
|
+
return _exportData.apply(this, arguments);
|
|
118
|
+
}
|
|
64
119
|
function formatCsv(data, fields) {
|
|
65
|
-
var
|
|
66
|
-
|
|
120
|
+
var hiddenColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
121
|
+
var hidden = new Set(hiddenColumns);
|
|
122
|
+
var included = fields.map(function (field, index) {
|
|
123
|
+
return {
|
|
124
|
+
field: field,
|
|
125
|
+
index: index
|
|
126
|
+
};
|
|
127
|
+
}).filter(function (_ref) {
|
|
128
|
+
var field = _ref.field;
|
|
129
|
+
return !hidden.has(field.name);
|
|
130
|
+
});
|
|
131
|
+
var columns = included.map(function (_ref2) {
|
|
132
|
+
var field = _ref2.field;
|
|
133
|
+
return field.displayName || field.name;
|
|
67
134
|
});
|
|
68
135
|
var formattedData = [columns];
|
|
69
136
|
|
|
@@ -71,11 +138,16 @@ function formatCsv(data, fields) {
|
|
|
71
138
|
var _iterator = _createForOfIteratorHelper(data.rows(true)),
|
|
72
139
|
_step;
|
|
73
140
|
try {
|
|
74
|
-
|
|
141
|
+
var _loop = function _loop() {
|
|
75
142
|
var row = _step.value;
|
|
76
|
-
formattedData.push(
|
|
77
|
-
|
|
143
|
+
formattedData.push(included.map(function (_ref3) {
|
|
144
|
+
var field = _ref3.field,
|
|
145
|
+
index = _ref3.index;
|
|
146
|
+
return (0, _utils.parseFieldValue)(typeof row.valueAt === 'function' ? row.valueAt(index) : row[index], field.type, field);
|
|
78
147
|
}));
|
|
148
|
+
};
|
|
149
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
150
|
+
_loop();
|
|
79
151
|
}
|
|
80
152
|
} catch (err) {
|
|
81
153
|
_iterator.e(err);
|
|
@@ -88,4 +160,4 @@ var exporters = {
|
|
|
88
160
|
exportData: exportData
|
|
89
161
|
};
|
|
90
162
|
var _default = exports["default"] = exporters;
|
|
91
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9kM0RzdiIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImV4cG9ydERhdGEiLCJzdGF0ZSIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImFwcE5hbWUiLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImRhdGFUeXBlIiwiZmlsdGVyZWQiLCJmaWxlbmFtZSIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZGVmYXVsdERhdGFOYW1lIiwic2VsZWN0ZWREYXRhc2V0cyIsIk9iamVjdCIsInZhbHVlcyIsImZvckVhY2giLCJzZWxlY3RlZERhdGEiLCJfcmVmIiwiZGF0YUNvbnRhaW5lciIsImZpZWxkcyIsImxhYmVsIiwiX3JlZiRmaWx0ZXJlZElkeENQVSIsImZpbHRlcmVkSWR4Q1BVIiwidG9FeHBvcnQiLCJjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lciIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJjc3YiLCJmb3JtYXRDc3YiLCJmaWxlQmxvYiIsIkJsb2IiLCJ0eXBlIiwiZG93bmxvYWRGaWxlIiwiY29uY2F0IiwiZGF0YSIsImNvbHVtbnMiLCJtYXAiLCJkaXNwbGF5TmFtZSIsImZvcm1hdHRlZERhdGEiLCJfaXRlcmF0b3IiLCJyb3dzIiwiX3N0ZXAiLCJyb3ciLCJwdXNoIiwiZCIsImkiLCJwYXJzZUZpZWxkVmFsdWUiLCJlcnIiLCJjc3ZGb3JtYXRSb3dzIiwiZXhwb3J0ZXJzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cG9ydC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0Jsb2J9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtjc3ZGb3JtYXRSb3dzfSBmcm9tICdkMy1kc3YnO1xuXG5pbXBvcnQge0VYUE9SVF9EQVRBX1RZUEV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IEtlcGxlclRhYmxlLCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lcixcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICBkb3dubG9hZEZpbGVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW50ZXJmYWNlIFN0YXRlVHlwZSB7XG4gIHZpc1N0YXRlOiB7ZGF0YXNldHM6IERhdGFzZXRzfTtcbiAgYXBwTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydERhdGEoc3RhdGU6IFN0YXRlVHlwZSwgb3B0aW9ucykge1xuICBjb25zdCB7dmlzU3RhdGUsIGFwcE5hbWV9ID0gc3RhdGU7XG4gIGNvbnN0IHtkYXRhc2V0c30gPSB2aXNTdGF0ZTtcbiAgY29uc3Qge3NlbGVjdGVkRGF0YXNldCwgZGF0YVR5cGUsIGZpbHRlcmVkfSA9IG9wdGlvbnM7XG4gIC8vIGdldCB0aGUgc2VsZWN0ZWQgZGF0YVxuICBjb25zdCBmaWxlbmFtZSA9IGFwcE5hbWUgPyBhcHBOYW1lIDogZ2V0QXBwbGljYXRpb25Db25maWcoKS5kZWZhdWx0RGF0YU5hbWU7XG4gIGNvbnN0IHNlbGVjdGVkRGF0YXNldHMgPSBkYXRhc2V0c1tzZWxlY3RlZERhdGFzZXRdXG4gICAgPyBbZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XV1cbiAgICA6IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpO1xuICBpZiAoIXNlbGVjdGVkRGF0YXNldHMubGVuZ3RoKSB7XG4gICAgLy8gZXJyb3I6IHNlbGVjdGVkIGRhdGFzZXQgbm90IGZvdW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHNlbGVjdGVkRGF0YXNldHMuZm9yRWFjaChzZWxlY3RlZERhdGEgPT4ge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHMsIGxhYmVsLCBmaWx0ZXJlZElkeENQVSA9IFtdfSA9IHNlbGVjdGVkRGF0YSBhcyBLZXBsZXJUYWJsZTtcbiAgICBjb25zdCB0b0V4cG9ydCA9IGZpbHRlcmVkXG4gICAgICA/IGNyZWF0ZUluZGV4ZWREYXRhQ29udGFpbmVyKGRhdGFDb250YWluZXIsIGZpbHRlcmVkSWR4Q1BVKVxuICAgICAgOiBkYXRhQ29udGFpbmVyO1xuXG4gICAgLy8gc3RhcnQgdG8gZXhwb3J0IGRhdGEgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGRhdGEgdHlwZVxuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgRVhQT1JUX0RBVEFfVFlQRS5DU1Y6IHtcbiAgICAgICAgY29uc3QgY3N2ID0gZm9ybWF0Q3N2KHRvRXhwb3J0LCBmaWVsZHMpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVCbG9iID0gbmV3IEJsb2IoW2Nzdl0sIHt0eXBlOiAndGV4dC9jc3YnfSk7XG4gICAgICAgIGRvd25sb2FkRmlsZShmaWxlQmxvYiwgYCR7ZmlsZW5hbWV9XyR7bGFiZWx9LmNzdmApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IHN1cHBvcnQgbW9yZSBmaWxlIHR5cGVzLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBPbiBleHBvcnQgZGF0YSB0byBjc3ZcbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyXG4gKiBAcGFyYW0gZmllbGRzIGBkYXRhc2V0LmZpZWxkc2BcbiAqIEByZXR1cm5zIGNzdiBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENzdihkYXRhOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBmaWVsZHM6IEZpZWxkW10pOiBzdHJpbmcge1xuICBjb25zdCBjb2x1bW5zID0gZmllbGRzLm1hcChmID0+IGYuZGlzcGxheU5hbWUgfHwgZi5uYW1lKTtcbiAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IFtjb2x1bW5zXTtcblxuICAvLyBwYXJzZSBnZW9qc29uIG9iamVjdCBhcyBzdHJpbmdcbiAgZm9yIChjb25zdCByb3cgb2YgZGF0YS5yb3dzKHRydWUpKSB7XG4gICAgZm9ybWF0dGVkRGF0YS5wdXNoKHJvdy5tYXAoKGQsIGkpID0+IHBhcnNlRmllbGRWYWx1ZShkLCBmaWVsZHNbaV0udHlwZSwgZmllbGRzW2ldKSkpO1xuICB9XG5cbiAgcmV0dXJuIGNzdkZvcm1hdFJvd3MoZm9ybWF0dGVkRGF0YSk7XG59XG5cbmNvbnN0IGV4cG9ydGVycyA9IHtcbiAgZXhwb3J0RGF0YVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUlBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUswQixTQUFBSSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEs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
|
|
163
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9kM0RzdiIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl91dGlscyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiZXhwb3J0RGF0YSIsIl94IiwiX3gyIiwiX2V4cG9ydERhdGEiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwic3RhdGUiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJhcHBOYW1lIiwiZGF0YXNldHMiLCJzZWxlY3RlZERhdGFzZXQiLCJkYXRhVHlwZSIsImZpbHRlcmVkIiwiZmlsZW5hbWUiLCJzZWxlY3RlZERhdGFzZXRzIiwiZXJyb3JzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNlbGVjdGVkRGF0YSIsIl9yZWY0IiwiZGF0YUNvbnRhaW5lciIsImZpZWxkcyIsImxhYmVsIiwiX3JlZjQkZmlsdGVyZWRJZHhDUFUiLCJmaWx0ZXJlZElkeENQVSIsImhpZGRlbkNvbHVtbnMiLCJmaWVsZFBhaXJzIiwidG9FeHBvcnQiLCJsYXllck5hbWUiLCJjc3YiLCJmaWxlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkZWZhdWx0RGF0YU5hbWUiLCJPYmplY3QiLCJ2YWx1ZXMiLCJhYnJ1cHQiLCJjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lciIsInNhbml0aXplRXhwb3J0TmFtZSIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJmb3JtYXRDc3YiLCJkb3dubG9hZEZpbGUiLCJCbG9iIiwidHlwZSIsImNvbmNhdCIsImVuY29kZURhdGFzZXRFeHBvcnQiLCJkYXRhIiwic2VudCIsIm1pbWVUeXBlIiwiZXh0ZW5zaW9uIiwidDAiLCJwdXNoIiwidDEiLCJmaW5pc2giLCJzdG9wIiwidW5kZWZpbmVkIiwiaGlkZGVuIiwiU2V0IiwiaW5jbHVkZWQiLCJtYXAiLCJmaWVsZCIsImluZGV4IiwiZmlsdGVyIiwiX3JlZiIsImhhcyIsImNvbHVtbnMiLCJfcmVmMiIsImRpc3BsYXlOYW1lIiwiZm9ybWF0dGVkRGF0YSIsIl9pdGVyYXRvciIsInJvd3MiLCJfc3RlcCIsIl9sb29wIiwicm93IiwiX3JlZjMiLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0IiwiZXJyIiwiY3N2Rm9ybWF0Um93cyIsImV4cG9ydGVycyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnQtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtCbG9ifSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCB7Y3N2Rm9ybWF0Um93c30gZnJvbSAnZDMtZHN2JztcblxuaW1wb3J0IHtFWFBPUlRfREFUQV9UWVBFfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2VuY29kZURhdGFzZXRFeHBvcnQsIHNhbml0aXplRXhwb3J0TmFtZX0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IEtlcGxlclRhYmxlLCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lcixcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICBkb3dubG9hZEZpbGVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW50ZXJmYWNlIFN0YXRlVHlwZSB7XG4gIHZpc1N0YXRlOiB7ZGF0YXNldHM6IERhdGFzZXRzfTtcbiAgYXBwTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cG9ydERhdGEoc3RhdGU6IFN0YXRlVHlwZSwgb3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7dmlzU3RhdGUsIGFwcE5hbWV9ID0gc3RhdGU7XG4gIGNvbnN0IHtkYXRhc2V0c30gPSB2aXNTdGF0ZTtcbiAgY29uc3Qge3NlbGVjdGVkRGF0YXNldCwgZGF0YVR5cGUsIGZpbHRlcmVkfSA9IG9wdGlvbnM7XG4gIC8vIGdldCB0aGUgc2VsZWN0ZWQgZGF0YVxuICBjb25zdCBmaWxlbmFtZSA9IGFwcE5hbWUgPyBhcHBOYW1lIDogZ2V0QXBwbGljYXRpb25Db25maWcoKS5kZWZhdWx0RGF0YU5hbWU7XG4gIGNvbnN0IHNlbGVjdGVkRGF0YXNldHMgPSBkYXRhc2V0c1tzZWxlY3RlZERhdGFzZXRdXG4gICAgPyBbZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XV1cbiAgICA6IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpO1xuICBpZiAoIXNlbGVjdGVkRGF0YXNldHMubGVuZ3RoKSB7XG4gICAgLy8gZXJyb3I6IHNlbGVjdGVkIGRhdGFzZXQgbm90IGZvdW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3Qgc2VsZWN0ZWREYXRhIG9mIHNlbGVjdGVkRGF0YXNldHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBmaWx0ZXJlZElkeENQVSA9IFtdLFxuICAgICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgICBmaWVsZFBhaXJzXG4gICAgICB9ID0gc2VsZWN0ZWREYXRhIGFzIEtlcGxlclRhYmxlO1xuICAgICAgY29uc3QgdG9FeHBvcnQgPSBmaWx0ZXJlZFxuICAgICAgICA/IGNyZWF0ZUluZGV4ZWREYXRhQ29udGFpbmVyKGRhdGFDb250YWluZXIsIGZpbHRlcmVkSWR4Q1BVKVxuICAgICAgICA6IGRhdGFDb250YWluZXI7XG4gICAgICBjb25zdCBsYXllck5hbWUgPSBzYW5pdGl6ZUV4cG9ydE5hbWUobGFiZWwpO1xuXG4gICAgICBpZiAoZGF0YVR5cGUgPT09IEVYUE9SVF9EQVRBX1RZUEUuQ1NWKSB7XG4gICAgICAgIGNvbnN0IGNzdiA9IGZvcm1hdENzdih0b0V4cG9ydCwgZmllbGRzLCBoaWRkZW5Db2x1bW5zKTtcbiAgICAgICAgZG93bmxvYWRGaWxlKG5ldyBCbG9iKFtjc3ZdLCB7dHlwZTogJ3RleHQvY3N2J30pLCBgJHtmaWxlbmFtZX1fJHtsYXllck5hbWV9LmNzdmApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGVuY29kZURhdGFzZXRFeHBvcnQoe1xuICAgICAgICBkYXRhOiB0b0V4cG9ydCxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBmaWVsZFBhaXJzLFxuICAgICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgbGF5ZXJOYW1lXG4gICAgICB9KTtcbiAgICAgIGRvd25sb2FkRmlsZShcbiAgICAgICAgbmV3IEJsb2IoW2ZpbGUuZGF0YV0sIHt0eXBlOiBmaWxlLm1pbWVUeXBlfSksXG4gICAgICAgIGAke2ZpbGVuYW1lfV8ke2xheWVyTmFtZX0uJHtmaWxlLmV4dGVuc2lvbn1gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBlcnJvcnNbMF07XG4gIH1cbn1cblxuLyoqXG4gKiBPbiBleHBvcnQgZGF0YSB0byBjc3ZcbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyXG4gKiBAcGFyYW0gZmllbGRzIGBkYXRhc2V0LmZpZWxkc2BcbiAqIEByZXR1cm5zIGNzdiBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENzdihcbiAgZGF0YTogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgZmllbGRzOiBGaWVsZFtdLFxuICBoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBjb25zdCBoaWRkZW4gPSBuZXcgU2V0KGhpZGRlbkNvbHVtbnMpO1xuICBjb25zdCBpbmNsdWRlZCA9IGZpZWxkc1xuICAgIC5tYXAoKGZpZWxkLCBpbmRleCkgPT4gKHtmaWVsZCwgaW5kZXh9KSlcbiAgICAuZmlsdGVyKCh7ZmllbGR9KSA9PiAhaGlkZGVuLmhhcyhmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IGNvbHVtbnMgPSBpbmNsdWRlZC5tYXAoKHtmaWVsZH0pID0+IGZpZWxkLmRpc3BsYXlOYW1lIHx8IGZpZWxkLm5hbWUpO1xuICBjb25zdCBmb3JtYXR0ZWREYXRhID0gW2NvbHVtbnNdO1xuXG4gIC8vIHBhcnNlIGdlb2pzb24gb2JqZWN0IGFzIHN0cmluZ1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3ModHJ1ZSkpIHtcbiAgICBmb3JtYXR0ZWREYXRhLnB1c2goXG4gICAgICBpbmNsdWRlZC5tYXAoKHtmaWVsZCwgaW5kZXh9KSA9PlxuICAgICAgICBwYXJzZUZpZWxkVmFsdWUoXG4gICAgICAgICAgdHlwZW9mIHJvdy52YWx1ZUF0ID09PSAnZnVuY3Rpb24nID8gcm93LnZhbHVlQXQoaW5kZXgpIDogcm93W2luZGV4XSxcbiAgICAgICAgICBmaWVsZC50eXBlLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNzdkZvcm1hdFJvd3MoZm9ybWF0dGVkRGF0YSk7XG59XG5cbmNvbnN0IGV4cG9ydGVycyA9IHtcbiAgZXhwb3J0RGF0YVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUlBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUswQixTQUFBSywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxD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S0FBSztJQUFBLE9BQU0sQ0FBQ0osTUFBTSxDQUFDUSxHQUFHLENBQUNKLEtBQUssQ0FBQ3hFLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDL0MsSUFBTTZFLE9BQU8sR0FBR1AsUUFBUSxDQUFDQyxHQUFHLENBQUMsVUFBQU8sS0FBQTtJQUFBLElBQUVOLEtBQUssR0FBQU0sS0FBQSxDQUFMTixLQUFLO0lBQUEsT0FBTUEsS0FBSyxDQUFDTyxXQUFXLElBQUlQLEtBQUssQ0FBQ3hFLElBQUk7RUFBQSxFQUFDO0VBQzFFLElBQU1nRixhQUFhLEdBQUcsQ0FBQ0gsT0FBTyxDQUFDOztFQUUvQjtFQUFBLElBQUFJLFNBQUEsR0FBQTVHLDBCQUFBLENBQ2tCcUYsSUFBSSxDQUFDd0IsSUFBSSxDQUFDLElBQUksQ0FBQztJQUFBQyxLQUFBO0VBQUE7SUFBQSxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFBRTtNQUFBLElBQXhCQyxHQUFHLEdBQUFGLEtBQUEsQ0FBQS9GLEtBQUE7TUFDWjRGLGFBQWEsQ0FBQ2pCLElBQUksQ0FDaEJPLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDLFVBQUFlLEtBQUE7UUFBQSxJQUFFZCxLQUFLLEdBQUFjLEtBQUEsQ0FBTGQsS0FBSztVQUFFQyxLQUFLLEdBQUFhLEtBQUEsQ0FBTGIsS0FBSztRQUFBLE9BQ3pCLElBQUFjLHNCQUFlLEVBQ2IsT0FBT0YsR0FBRyxDQUFDRyxPQUFPLEtBQUssVUFBVSxHQUFHSCxHQUFHLENBQUNHLE9BQU8sQ0FBQ2YsS0FBSyxDQUFDLEdBQUdZLEdBQUcsQ0FBQ1osS0FBSyxDQUFDLEVBQ25FRCxLQUFLLENBQUNqQixJQUFJLEVBQ1ZpQixLQUNGLENBQUM7TUFBQSxDQUNILENBQ0YsQ0FBQztJQUNILENBQUM7SUFWRCxLQUFBUyxTQUFBLENBQUFoRyxDQUFBLE1BQUFrRyxLQUFBLEdBQUFGLFNBQUEsQ0FBQS9GLENBQUEsSUFBQUMsSUFBQTtNQUFBaUcsS0FBQTtJQUFBO0VBVUMsU0FBQUssR0FBQTtJQUFBUixTQUFBLENBQUExRyxDQUFBLENBQUFrSCxHQUFBO0VBQUE7SUFBQVIsU0FBQSxDQUFBNUYsQ0FBQTtFQUFBO0VBRUQsT0FBTyxJQUFBcUcsb0JBQWEsRUFBQ1YsYUFBYSxDQUFDO0FBQ3JDO0FBRUEsSUFBTVcsU0FBUyxHQUFHO0VBQ2hCeEYsVUFBVSxFQUFWQTtBQUNGLENBQUM7QUFBQyxJQUFBeUYsUUFBQSxHQUFBQyxPQUFBLGNBRWFGLFNBQVMiLCJpZ25vcmVMaXN0IjpbXX0=
|