@flowmap.gl/data 8.0.0-alpha.9 → 8.0.1
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/.turbo/turbo-build.log +3 -0
- package/.turbo/turbo-dev.log +6 -0
- package/LICENSE +2 -2
- package/dist/FlowmapAggregateAccessors.d.ts +4 -4
- package/dist/FlowmapAggregateAccessors.d.ts.map +1 -1
- package/dist/FlowmapAggregateAccessors.js +16 -9
- package/dist/FlowmapSelectors.d.ts +41 -87
- package/dist/FlowmapSelectors.d.ts.map +1 -1
- package/dist/FlowmapSelectors.js +174 -161
- package/dist/FlowmapState.d.ts +7 -5
- package/dist/FlowmapState.d.ts.map +1 -1
- package/dist/FlowmapState.js +6 -1
- package/dist/cluster/ClusterIndex.d.ts +4 -4
- package/dist/cluster/ClusterIndex.d.ts.map +1 -1
- package/dist/cluster/ClusterIndex.js +5 -17
- package/dist/cluster/cluster.d.ts +25 -5
- package/dist/cluster/cluster.d.ts.map +1 -1
- package/dist/cluster/cluster.js +115 -57
- package/dist/colors.d.ts +3 -3
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +19 -8
- package/dist/getViewStateForLocations.d.ts +3 -3
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +33 -12
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/provider/FlowmapDataProvider.d.ts +7 -2
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/FlowmapDataProvider.js +11 -6
- package/dist/provider/LocalFlowmapDataProvider.d.ts +15 -4
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/LocalFlowmapDataProvider.js +98 -81
- package/dist/selector-functions.d.ts +10 -0
- package/dist/selector-functions.d.ts.map +1 -0
- package/dist/selector-functions.js +65 -0
- package/dist/time.d.ts.map +1 -1
- package/dist/time.js +6 -1
- package/dist/types.d.ts +20 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +6 -1
- package/package.json +22 -27
- package/src/FlowmapAggregateAccessors.ts +21 -10
- package/src/FlowmapSelectors.ts +304 -280
- package/src/FlowmapState.ts +13 -5
- package/src/cluster/ClusterIndex.ts +23 -28
- package/src/cluster/cluster.ts +165 -73
- package/src/colors.ts +13 -9
- package/src/getViewStateForLocations.ts +23 -7
- package/src/index.ts +9 -3
- package/src/provider/FlowmapDataProvider.ts +23 -7
- package/src/provider/LocalFlowmapDataProvider.ts +68 -5
- package/src/selector-functions.ts +93 -0
- package/src/time.ts +6 -0
- package/src/types.ts +23 -15
- package/src/util.ts +6 -0
- package/dist/provider/WorkerFlowmapDataProvider.d.ts +0 -42
- package/dist/provider/WorkerFlowmapDataProvider.d.ts.map +0 -1
- package/dist/provider/WorkerFlowmapDataProvider.js +0 -80
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts +0 -2
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts.map +0 -1
- package/dist/provider/WorkerFlowmapDataProviderWorker.js +0 -4
- package/dist/provider/createWorkerDataProvider.d.ts +0 -3
- package/dist/provider/createWorkerDataProvider.d.ts.map +0 -1
- package/dist/provider/createWorkerDataProvider.js +0 -21
- package/src/provider/WorkerFlowmapDataProvider.ts +0 -121
- package/src/provider/WorkerFlowmapDataProviderWorker.ts +0 -4
- package/src/provider/createWorkerDataProvider.ts +0 -18
package/dist/colors.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SettingsState } from './FlowmapState';
|
|
2
|
-
export
|
|
3
|
-
export
|
|
2
|
+
export type ColorScale = (value: number) => RGBA;
|
|
3
|
+
export type RGBA = [number, number, number, number];
|
|
4
4
|
export declare function opacityFloatToInteger(opacity: number): number;
|
|
5
5
|
export declare function opacifyHex(hexCode: string, opacity: number): string;
|
|
6
6
|
export declare function colorAsRgba(color: string | number[]): RGBA;
|
|
@@ -14,7 +14,7 @@ export declare const COLOR_SCHEMES: {
|
|
|
14
14
|
[key: string]: string[];
|
|
15
15
|
};
|
|
16
16
|
export declare const COLOR_SCHEME_KEYS: string[];
|
|
17
|
-
export declare function getFlowmapColors(
|
|
17
|
+
export declare function getFlowmapColors(settings: SettingsState): Colors | DiffColors;
|
|
18
18
|
export declare function getColors(diffMode: boolean, colorScheme: string | string[] | undefined, darkMode: boolean, fadeEnabled: boolean, fadeOpacityEnabled: boolean, fadeAmount: number, animate: boolean): Colors | DiffColors;
|
|
19
19
|
export declare function createFlowColorScale(domain: [number, number], scheme: string[], animate: boolean | undefined): ColorScale;
|
|
20
20
|
export declare function getFlowColorScale(colors: ColorsRGBA | DiffColorsRGBA, magnitudeExtent: [number, number] | undefined, animate: boolean | undefined): (magnitude: number) => [number, number, number, number];
|
package/dist/colors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}
|
package/dist/colors.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
1
6
|
import { interpolateCool, interpolateInferno, interpolateMagma, interpolatePlasma, interpolateViridis, interpolateWarm, schemeBlues, schemeBuGn, schemeBuPu, schemeGnBu, schemeGreens, schemeGreys, schemeOranges, schemeOrRd, schemePuBu, schemePuBuGn, schemePuRd, schemePurples, schemeRdPu, schemeReds, schemeYlGn, schemeYlGnBu, schemeYlOrBr, schemeYlOrRd, } from 'd3-scale-chromatic';
|
|
2
7
|
import { range } from 'd3-array';
|
|
3
8
|
import { scalePow, scaleSequential, scaleSequentialPow } from 'd3-scale';
|
|
@@ -282,9 +287,9 @@ const diffColors = {
|
|
|
282
287
|
},
|
|
283
288
|
outlineColor: 'rgb(230,233,237)',
|
|
284
289
|
};
|
|
285
|
-
export function getFlowmapColors(
|
|
290
|
+
export function getFlowmapColors(settings) {
|
|
286
291
|
return getColors(false, // TODO: diffMode
|
|
287
|
-
|
|
292
|
+
settings.colorScheme, settings.darkMode, settings.fadeEnabled, settings.fadeOpacityEnabled, settings.fadeAmount, settings.animationEnabled);
|
|
288
293
|
}
|
|
289
294
|
export function getColors(diffMode, colorScheme, darkMode, fadeEnabled, fadeOpacityEnabled, fadeAmount, animate) {
|
|
290
295
|
if (diffMode) {
|
|
@@ -414,12 +419,11 @@ function getLocationAreaColorsRGBA(colors, darkMode) {
|
|
|
414
419
|
};
|
|
415
420
|
}
|
|
416
421
|
function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
417
|
-
var _a, _b, _c;
|
|
418
422
|
const flowColorScheme = (inputColors && inputColors.flows && inputColors.flows.scheme) ||
|
|
419
423
|
defaultFlowColorScheme;
|
|
420
424
|
const maxFlowColorHcl = hcl(flowColorScheme[flowColorScheme.length - 1]);
|
|
421
425
|
const flowColorHighlighted = colorAsRgbaOr(inputColors && inputColors.flows && inputColors.flows.highlighted, colorAsRgba(maxFlowColorHcl[darkMode ? 'brighter' : 'darker'](0.7).toString()));
|
|
422
|
-
const emptyColor = colorAsRgbaOr(
|
|
426
|
+
const emptyColor = colorAsRgbaOr(inputColors?.locationCircles?.empty, darkMode ? '#000' : '#fff');
|
|
423
427
|
const innerColor = colorAsRgbaOr(inputColors &&
|
|
424
428
|
inputColors.locationCircles &&
|
|
425
429
|
inputColors.locationCircles.inner, maxFlowColorHcl.toString());
|
|
@@ -440,7 +444,7 @@ function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
|
440
444
|
inputColors.locationCircles &&
|
|
441
445
|
inputColors.locationCircles.highlighted, flowColorHighlighted),
|
|
442
446
|
empty: emptyColor,
|
|
443
|
-
outlineEmptyMix:
|
|
447
|
+
outlineEmptyMix: inputColors?.locationCircles?.outlineEmptyMix ?? 0.4,
|
|
444
448
|
},
|
|
445
449
|
};
|
|
446
450
|
}
|
|
@@ -457,11 +461,18 @@ function getBaseColorsRGBA(colors) {
|
|
|
457
461
|
}
|
|
458
462
|
export function getColorsRGBA(colors) {
|
|
459
463
|
const baseColorsRGBA = getBaseColorsRGBA(colors);
|
|
460
|
-
return
|
|
464
|
+
return {
|
|
465
|
+
...baseColorsRGBA,
|
|
466
|
+
...getFlowAndCircleColors(colors, DEFAULT_FLOW_COLOR_SCHEME, baseColorsRGBA.darkMode),
|
|
467
|
+
};
|
|
461
468
|
}
|
|
462
469
|
export function getDiffColorsRGBA(colors) {
|
|
463
470
|
const baseColorsRGBA = getBaseColorsRGBA(colors);
|
|
464
|
-
return
|
|
471
|
+
return {
|
|
472
|
+
...baseColorsRGBA,
|
|
473
|
+
positive: getFlowAndCircleColors(colors && colors.positive, DEFAULT_FLOW_COLOR_SCHEME_POSITIVE, baseColorsRGBA.darkMode),
|
|
474
|
+
negative: getFlowAndCircleColors(colors && colors.negative, DEFAULT_FLOW_COLOR_SCHEME_NEGATIVE, baseColorsRGBA.darkMode),
|
|
475
|
+
};
|
|
465
476
|
}
|
|
466
477
|
export function rgbaAsString(color) {
|
|
467
478
|
return `rgba(${color.join(',')})`;
|
|
@@ -473,4 +484,4 @@ export function mixColorsRGBA(color1, color2, zeroToOne) {
|
|
|
473
484
|
return color1.map((v, i) => midpoint(v, color2[i], zeroToOne));
|
|
474
485
|
}
|
|
475
486
|
export default getColors;
|
|
476
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR2hFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFDdkQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sa0NBQWtDLEdBQUcsQ0FB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QztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsTUFBOEI7SUFFOUIsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsdUNBQ0ssY0FBYyxLQUNqQixRQUFRLEVBQUUsc0JBQXNCLENBQzlCLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUN6QixrQ0FBa0MsRUFDbEMsY0FBYyxDQUFDLFFBQVEsQ0FDeEIsRUFDRCxRQUFRLEVBQUUsc0JBQXNCLENBQzlCLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUN6QixrQ0FBa0MsRUFDbEMsY0FBYyxDQUFDLFFBQVEsQ0FDeEIsSUFDRDtBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVc7SUFDdEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFNBQWlCO0lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBWSxFQUNaLE1BQVksRUFDWixTQUFpQjtJQUVqQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBUyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxlQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGludGVycG9sYXRlQ29vbCxcbiAgaW50ZXJwb2xhdGVJbmZlcm5vLFxuICBpbnRlcnBvbGF0ZU1hZ21hLFxuICBpbnRlcnBvbGF0ZVBsYXNtYSxcbiAgaW50ZXJwb2xhdGVWaXJpZGlzLFxuICBpbnRlcnBvbGF0ZVdhcm0sXG4gIHNjaGVtZUJsdWVzLFxuICBzY2hlbWVCdUduLFxuICBzY2hlbWVCdVB1LFxuICBzY2hlbWVHbkJ1LFxuICBzY2hlbWVHcmVlbnMsXG4gIHNjaGVtZUdyZXlzLFxuICBzY2hlbWVPcmFuZ2VzLFxuICBzY2hlbWVPclJkLFxuICBzY2hlbWVQdUJ1LFxuICBzY2hlbWVQdUJ1R24sXG4gIHNjaGVtZVB1UmQsXG4gIHNjaGVtZVB1cnBsZXMsXG4gIHNjaGVtZVJkUHUsXG4gIHNjaGVtZVJlZHMsXG4gIHNjaGVtZVlsR24sXG4gIHNjaGVtZVlsR25CdSxcbiAgc2NoZW1lWWxPckJyLFxuICBzY2hlbWVZbE9yUmQsXG59IGZyb20gJ2QzLXNjYWxlLWNocm9tYXRpYyc7XG5pbXBvcnQge3JhbmdlfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQge3NjYWxlUG93LCBzY2FsZVNlcXVlbnRpYWwsIHNjYWxlU2VxdWVudGlhbFBvd30gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUJhc2lzLCBpbnRlcnBvbGF0ZVJnYkJhc2lzfSBmcm9tICdkMy1pbnRlcnBvbGF0ZSc7XG5pbXBvcnQge2NvbG9yIGFzIGQzY29sb3IsIGhjbCwgcmdiIGFzIGNvbG9yUmdifSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge1NldHRpbmdzU3RhdGV9IGZyb20gJy4vRmxvd21hcFN0YXRlJztcblxuY29uc3QgREVGQVVMVF9PVVRMSU5FX0NPTE9SID0gJyNmZmYnO1xuY29uc3QgREVGQVVMVF9ESU1NRURfT1BBQ0lUWSA9IDAuNDtcbmNvbnN0IERFRkFVTFRfRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMxMzdDQkQnXTtcbmNvbnN0IERFRkFVTFRfTE9DQVRJT05fQVJFQV9DT0xPUiA9ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknO1xuXG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjZjY2NTRlJ107XG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjMDBhOWNjJ107XG5cbmV4cG9ydCB0eXBlIENvbG9yU2NhbGUgPSAodmFsdWU6IG51bWJlcikgPT4gUkdCQTtcbmV4cG9ydCB0eXBlIFJHQkEgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgRkFMTEJBQ0tfQ09MT1JfUkdCQTogUkdCQSA9IFsyNTUsIDI1NSwgMjU1LCAyNTVdO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKG9wYWNpdHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKG9wYWNpdHkgKiAyNTUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2lmeUhleChoZXhDb2RlOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGMgPSBkM2NvbG9yKGhleENvZGUpO1xuICBpZiAoIWMpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGhleENvZGUpO1xuICAgIHJldHVybiBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke29wYWNpdHl9KWA7XG4gIH1cbiAgY29uc3QgY29sID0gYy5yZ2IoKTtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sLnJ9LCAke2NvbC5nfSwgJHtjb2wuYn0sICR7b3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQXNSZ2JhKGNvbG9yOiBzdHJpbmcgfCBudW1iZXJbXSk6IFJHQkEge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikpIHtcbiAgICByZXR1cm4gY29sb3IgYXMgUkdCQTtcbiAgfVxuICBjb25zdCBjb2wgPSBkM2NvbG9yKGNvbG9yKTtcbiAgaWYgKCFjb2wpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGNvbG9yKTtcbiAgICByZXR1cm4gRkFMTEJBQ0tfQ09MT1JfUkdCQTtcbiAgfVxuICBjb25zdCByZ2JDb2xvciA9IGNvbC5yZ2IoKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLnIpLFxuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuZyksXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5iKSxcbiAgICBvcGFjaXR5RmxvYXRUb0ludGVnZXIoY29sLm9wYWNpdHkpLFxuICBdO1xufVxuXG5mdW5jdGlvbiBjb2xvckFzUmdiYU9yKFxuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0Q29sb3I6IFJHQkEgfCBzdHJpbmcsXG4pOiBSR0JBIHtcbiAgaWYgKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNvbG9yQXNSZ2JhKGNvbG9yKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlZmF1bHRDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29sb3JBc1JnYmEoZGVmYXVsdENvbG9yKTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdENvbG9yO1xufVxuXG5jb25zdCBhc1NjaGVtZSA9IChzY2hlbWU6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHlBcnJheTxzdHJpbmc+PikgPT5cbiAgc2NoZW1lW3NjaGVtZS5sZW5ndGggLSAxXSBhcyBzdHJpbmdbXTtcblxuZXhwb3J0IGVudW0gQ29sb3JTY2hlbWUge1xuICBwcmltYXJ5ID0gJyMxNjJkM2MnLFxufVxuXG5jb25zdCBTQ0FMRV9OVU1fU1RFUFMgPSAyMDtcbmNvbnN0IGdldENvbG9yU3RlcHMgPSAoaW50ZXJwb2xhdGU6ICh4OiBudW1iZXIpID0+IHN0cmluZykgPT5cbiAgcmFuZ2UoMCwgU0NBTEVfTlVNX1NURVBTICsgMSlcbiAgICAubWFwKChpKSA9PiBpbnRlcnBvbGF0ZShpIC8gU0NBTEVfTlVNX1NURVBTKSlcbiAgICAucmV2ZXJzZSgpO1xuXG5jb25zdCBGTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuZXhwb3J0IGNvbnN0IEdSQVlJU0ggPSBbRkxPV19NSU5fQ09MT1IsIENvbG9yU2NoZW1lLnByaW1hcnldO1xuY29uc3Qgc2NoZW1lQmx1WWwgPSBbXG4gICcjZjdmZWFlJyxcbiAgJyNiN2U2YTUnLFxuICAnIzdjY2JhMicsXG4gICcjNDZhZWEwJyxcbiAgJyMwODkwOTknLFxuICAnIzAwNzE4YicsXG4gICcjMDQ1Mjc1Jyxcbl07XG5cbmNvbnN0IHNjaGVtZUVtcmxkID0gW1xuICAnI2QzZjJhMycsXG4gICcjOTdlMTk2JyxcbiAgJyM2Y2MwOGInLFxuICAnIzRjOWI4MicsXG4gICcjMjE3YTc5JyxcbiAgJyMxMDU5NjUnLFxuICAnIzA3NDA1MCcsXG5dO1xuXG5leHBvcnQgY29uc3Qgc2NoZW1lVGVhbCA9IFtcbiAgJyNkMWVlZWEnLFxuICAnI2E4ZGJkOScsXG4gICcjODVjNGM5JyxcbiAgJyM2OGFiYjgnLFxuICAnIzRmOTBhNicsXG4gICcjM2I3MzhmJyxcbiAgJyMyYTU2NzQnLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfU0NIRU1FID0gc2NoZW1lVGVhbDtcbmV4cG9ydCBjb25zdCBDT0xPUl9TQ0hFTUVTOiB7W2tleTogc3RyaW5nXTogc3RyaW5nW119ID0ge1xuICBCbHVlczogYXNTY2hlbWUoc2NoZW1lQmx1ZXMpLFxuICBCbHVHcm46IFtcbiAgICAnI2M0ZTZjMycsXG4gICAgJyM5NmQyYTQnLFxuICAgICcjNmRiYzkwJyxcbiAgICAnIzRkYTI4NCcsXG4gICAgJyMzNjg3N2EnLFxuICAgICcjMjY2YjZlJyxcbiAgICAnIzFkNGY2MCcsXG4gIF0sXG4gIEJsdVlsOiBzY2hlbWVCbHVZbCxcbiAgQnJ3bllsOiBbXG4gICAgJyNlZGU1Y2YnLFxuICAgICcjZTBjMmEyJyxcbiAgICAnI2QzOWM4MycsXG4gICAgJyNjMTc2NmYnLFxuICAgICcjYTY1NDYxJyxcbiAgICAnIzgxMzc1MycsXG4gICAgJyM1NDFmM2YnLFxuICBdLFxuICBCdUduOiBhc1NjaGVtZShzY2hlbWVCdUduKSxcbiAgQnVQdTogYXNTY2hlbWUoc2NoZW1lQnVQdSksXG4gIEJ1cmc6IFtcbiAgICAnI2ZmYzZjNCcsXG4gICAgJyNmNGEzYTgnLFxuICAgICcjZTM4MTkxJyxcbiAgICAnI2NjNjA3ZCcsXG4gICAgJyNhZDQ2NmMnLFxuICAgICcjOGIzMDU4JyxcbiAgICAnIzY3MjA0NCcsXG4gIF0sXG4gIEJ1cmdZbDogW1xuICAgICcjZmJlNmM1JyxcbiAgICAnI2Y1YmE5OCcsXG4gICAgJyNlZThhODInLFxuICAgICcjZGM3MTc2JyxcbiAgICAnI2M4NTg2YycsXG4gICAgJyM5YzNmNWQnLFxuICAgICcjNzAyODRhJyxcbiAgXSxcbiAgQ29vbDogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZUNvb2wpLFxuICBEYXJrTWludDogW1xuICAgICcjZDJmYmQ0JyxcbiAgICAnI2E1ZGJjMicsXG4gICAgJyM3YmJjYjAnLFxuICAgICcjNTU5YzllJyxcbiAgICAnIzNhN2M4OScsXG4gICAgJyMyMzVkNzInLFxuICAgICcjMTIzZjVhJyxcbiAgXSxcbiAgRW1ybGQ6IHNjaGVtZUVtcmxkLFxuICBHbkJ1OiBhc1NjaGVtZShzY2hlbWVHbkJ1KSxcbiAgR3JheWlzaDogR1JBWUlTSCxcbiAgR3JlZW5zOiBhc1NjaGVtZShzY2hlbWVHcmVlbnMpLFxuICBHcmV5czogYXNTY2hlbWUoc2NoZW1lR3JleXMpLFxuICBJbmZlcm5vOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlSW5mZXJubyksXG4gIE1hZ2VudGE6IFtcbiAgICAnI2YzY2JkMycsXG4gICAgJyNlYWE5YmQnLFxuICAgICcjZGQ4OGFjJyxcbiAgICAnI2NhNjk5ZCcsXG4gICAgJyNiMTRkOGUnLFxuICAgICcjOTEzNTdkJyxcbiAgICAnIzZjMjE2NycsXG4gIF0sXG4gIE1hZ21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlTWFnbWEpLFxuICBNaW50OiBbXG4gICAgJyNlNGYxZTEnLFxuICAgICcjYjRkOWNjJyxcbiAgICAnIzg5YzBiNicsXG4gICAgJyM2M2E2YTAnLFxuICAgICcjNDQ4YzhhJyxcbiAgICAnIzI4NzI3NCcsXG4gICAgJyMwZDU4NWYnLFxuICBdLFxuICBPcmFuZ2VzOiBhc1NjaGVtZShzY2hlbWVPcmFuZ2VzKSxcbiAgT3JSZDogYXNTY2hlbWUoc2NoZW1lT3JSZCksXG4gIE9yWWVsOiBbXG4gICAgJyNlY2RhOWEnLFxuICAgICcjZWZjNDdlJyxcbiAgICAnI2YzYWQ2YScsXG4gICAgJyNmNzk0NWQnLFxuICAgICcjZjk3YjU3JyxcbiAgICAnI2Y2NjM1NicsXG4gICAgJyNlZTRkNWEnLFxuICBdLFxuICBQZWFjaDogW1xuICAgICcjZmRlMGM1JyxcbiAgICAnI2ZhY2JhNicsXG4gICAgJyNmOGI1OGInLFxuICAgICcjZjU5ZTcyJyxcbiAgICAnI2YyODU1ZCcsXG4gICAgJyNlZjZhNGMnLFxuICAgICcjZWI0YTQwJyxcbiAgXSxcbiAgUGxhc21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlUGxhc21hKSxcbiAgUGlua1lsOiBbXG4gICAgJyNmZWY2YjUnLFxuICAgICcjZmZkZDlhJyxcbiAgICAnI2ZmYzI4NScsXG4gICAgJyNmZmE2NzknLFxuICAgICcjZmE4YTc2JyxcbiAgICAnI2YxNmQ3YScsXG4gICAgJyNlMTUzODMnLFxuICBdLFxuICBQdUJ1OiBhc1NjaGVtZShzY2hlbWVQdUJ1KSxcbiAgUHVCdUduOiBhc1NjaGVtZShzY2hlbWVQdUJ1R24pLFxuICBQdVJkOiBhc1NjaGVtZShzY2hlbWVQdVJkKSxcbiAgUHVycDogW1xuICAgICcjZjNlMGY3JyxcbiAgICAnI2U0YzdmMScsXG4gICAgJyNkMWFmZTgnLFxuICAgICcjYjk5OGRkJyxcbiAgICAnIzlmODJjZScsXG4gICAgJyM4MjZkYmEnLFxuICAgICcjNjM1ODlmJyxcbiAgXSxcbiAgUHVycGxlczogYXNTY2hlbWUoc2NoZW1lUHVycGxlcyksXG4gIFB1cnBPcjogW1xuICAgICcjZjlkZGRhJyxcbiAgICAnI2YyYjljNCcsXG4gICAgJyNlNTk3YjknLFxuICAgICcjY2U3OGIzJyxcbiAgICAnI2FkNWZhZCcsXG4gICAgJyM4MzRiYTAnLFxuICAgICcjNTczYjg4JyxcbiAgXSxcbiAgUmRQdTogYXNTY2hlbWUoc2NoZW1lUmRQdSksXG4gIFJlZE9yOiBbXG4gICAgJyNmNmQyYTknLFxuICAgICcjZjViNzhlJyxcbiAgICAnI2YxOWM3YycsXG4gICAgJyNlYTgxNzEnLFxuICAgICcjZGQ2ODZjJyxcbiAgICAnI2NhNTI2OCcsXG4gICAgJyNiMTNmNjQnLFxuICBdLFxuICBSZWRzOiBhc1NjaGVtZShzY2hlbWVSZWRzKSxcbiAgU3Vuc2V0OiBbXG4gICAgJyNmM2U3OWInLFxuICAgICcjZmFjNDg0JyxcbiAgICAnI2Y4YTA3ZScsXG4gICAgJyNlYjdmODYnLFxuICAgICcjY2U2NjkzJyxcbiAgICAnI2EwNTlhMCcsXG4gICAgJyM1YzUzYTUnLFxuICBdLFxuICBTdW5zZXREYXJrOiBbXG4gICAgJyNmY2RlOWMnLFxuICAgICcjZmFhNDc2JyxcbiAgICAnI2YwNzQ2ZScsXG4gICAgJyNlMzRmNmYnLFxuICAgICcjZGMzOTc3JyxcbiAgICAnI2I5MjU3YScsXG4gICAgJyM3YzFkNmYnLFxuICBdLFxuICBUZWFsOiBzY2hlbWVUZWFsLFxuICBUZWFsR3JuOiBbXG4gICAgJyNiMGYyYmMnLFxuICAgICcjODllOGFjJyxcbiAgICAnIzY3ZGJhNScsXG4gICAgJyM0Y2M4YTMnLFxuICAgICcjMzhiMmEzJyxcbiAgICAnIzJjOThhMCcsXG4gICAgJyMyNTdkOTgnLFxuICBdLFxuICBWaXJpZGlzOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlVmlyaWRpcyksXG4gIFdhcm06IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVXYXJtKSxcbiAgWWxHbjogYXNTY2hlbWUoc2NoZW1lWWxHbiksXG4gIFlsR25CdTogYXNTY2hlbWUoc2NoZW1lWWxHbkJ1KSxcbiAgWWxPckJyOiBhc1NjaGVtZShzY2hlbWVZbE9yQnIpLFxuICBZbE9yUmQ6IGFzU2NoZW1lKHNjaGVtZVlsT3JSZCksXG59O1xuXG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhDT0xPUl9TQ0hFTUVTKTtcblxuY29uc3QgY29tcGxlbWVudGFyeSA9ICcjZjUyMDIwJztcbmNvbnN0IGJhc2VEaWZmQ29sb3IgPSAnIzE3YTViZSc7XG5cbmNvbnN0IGRpZmZDb2xvcnM6IERpZmZDb2xvcnMgPSB7XG4gIG5lZ2F0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBiYXNlRGlmZkNvbG9yXSxcbiAgICB9LFxuICB9LFxuICBwb3NpdGl2ZToge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IFtGTE9XX01JTl9DT0xPUiwgY29tcGxlbWVudGFyeV0sXG4gICAgfSxcbiAgfSxcbiAgbG9jYXRpb25BcmVhczoge1xuICAgIG91dGxpbmU6ICdyZ2JhKDkyLDExMiwxMjgsMC41KScsXG4gICAgbm9ybWFsOiAncmdiYSgyMjAsMjIwLDIyMCwwLjUpJyxcbiAgfSxcbiAgb3V0bGluZUNvbG9yOiAncmdiKDIzMCwyMzMsMjM3KScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd21hcENvbG9ycyhcbiAgc2V0dGluZ3NTdGF0ZTogU2V0dGluZ3NTdGF0ZSxcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICByZXR1cm4gZ2V0Q29sb3JzKFxuICAgIGZhbHNlLCAvLyBUT0RPOiBkaWZmTW9kZVxuICAgIHNldHRpbmdzU3RhdGUuY29sb3JTY2hlbWUsXG4gICAgc2V0dGluZ3NTdGF0ZS5kYXJrTW9kZSxcbiAgICBzZXR0aW5nc1N0YXRlLmZhZGVFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZUFtb3VudCxcbiAgICBzZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcnMoXG4gIGRpZmZNb2RlOiBib29sZWFuLFxuICBjb2xvclNjaGVtZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuICBmYWRlRW5hYmxlZDogYm9vbGVhbixcbiAgZmFkZU9wYWNpdHlFbmFibGVkOiBib29sZWFuLFxuICBmYWRlQW1vdW50OiBudW1iZXIsXG4gIGFuaW1hdGU6IGJvb2xlYW4sXG4pOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHtcbiAgaWYgKGRpZmZNb2RlKSB7XG4gICAgcmV0dXJuIGRpZmZDb2xvcnM7XG4gIH1cblxuICBsZXQgc2NoZW1lO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yU2NoZW1lKSkge1xuICAgIHNjaGVtZSA9IGNvbG9yU2NoZW1lO1xuICB9IGVsc2Uge1xuICAgIHNjaGVtZSA9XG4gICAgICAoY29sb3JTY2hlbWUgJiYgQ09MT1JfU0NIRU1FU1tjb2xvclNjaGVtZV0pIHx8IERFRkFVTFRfQ09MT1JfU0NIRU1FO1xuICAgIGlmIChkYXJrTW9kZSkge1xuICAgICAgc2NoZW1lID0gc2NoZW1lLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIChhbmltYXRlKVxuICAvLyBpZiAoZmFkZUFtb3VudCA+IDApXG4gIHtcbiAgICBjb25zdCBpbmRpY2VzID0gcmFuZ2UoMCwgTWF0aC5tYXgoMTAsIHNjaGVtZS5sZW5ndGgpKTtcbiAgICBjb25zdCBOID0gaW5kaWNlcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZVNlcXVlbnRpYWwoaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWUpKS5kb21haW4oW1xuICAgICAgMCxcbiAgICAgIE4sXG4gICAgXSk7XG5cbiAgICBpZiAoIWZhZGVFbmFibGVkIHx8IGZhZGVBbW91bnQgPT09IDApIHtcbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKChjLCBpKSA9PiBjb2xvclNjYWxlKGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYW1vdW50ID0gc2NhbGVQb3coKVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgOiAxLzIuNSlcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAxMDAgOiA1MClcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAyMCA6IDUpXG4gICAgICAgIC8vIC5leHBvbmVudCgxLzIuNSlcbiAgICAgICAgLmV4cG9uZW50KDEuNSlcbiAgICAgICAgLmRvbWFpbihbTiwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKSwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMCwgZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKV0pXG4gICAgICAgIC8vIC5yYW5nZShkYXJrTW9kZSA/IFsxLWZhZGVBbW91bnQvMTAwLCAxXSA6IFsxLCAxIC0gZmFkZUFtb3VudC8xMDBdKVxuICAgICAgICAvLyAucmFuZ2UoZGFya01vZGUgPyBbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSA6IFtmYWRlQW1vdW50LzEwMCwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSlcbiAgICAgICAgLnJhbmdlKFswLCAoMiAqIGZhZGVBbW91bnQpIC8gMTAwXSk7XG5cbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKFxuICAgICAgICAoYywgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JTY2FsZShpKTtcbiAgICAgICAgICBjb25zdCBhID0gYW1vdW50KGkpO1xuICAgICAgICAgIGlmIChjb2xvciA9PSBudWxsIHx8IGEgPT0gbnVsbCkgcmV0dXJuICcjMDAwJztcbiAgICAgICAgICBjb25zdCBjb2wgPSBoY2woY29sb3IpO1xuICAgICAgICAgIGNvbC5sID0gZGFya01vZGUgPyBjb2wubCAtIGNvbC5sICogYSA6IGNvbC5sICsgKDEwMCAtIGNvbC5sKSAqIGE7XG4gICAgICAgICAgY29sLmMgPSBjb2wuYyAtIGNvbC5jICogKGEgLyA0KTtcbiAgICAgICAgICBpZiAoZmFkZU9wYWNpdHlFbmFibGVkKSB7XG4gICAgICAgICAgICBjb2wub3BhY2l0eSA9IGNvbC5vcGFjaXR5ICogKDEuMCAtIGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGludGVycG9sYXRlUmdiQmFzaXMoW2NvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnXSkoYW1vdW50KGkpKVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZUhzbChjb2xvclNjYWxlKGkpLCBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJykoYW1vdW50KGkpKS50b1N0cmluZygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZSxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgb3V0Z29pbmc6IGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgIH0sXG4gICAgb3V0bGluZUNvbG9yOiBkYXJrTW9kZSA/ICcjMDAwJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVJnYmFCYXNpcyhjb2xvcnM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHNwbGluZSA9IGludGVycG9sYXRlQmFzaXM7XG4gIGNvbnN0IG4gPSBjb2xvcnMubGVuZ3RoO1xuICBsZXQgcjogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGc6IGFueSA9IG5ldyBBcnJheShuKSxcbiAgICBiOiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgb3BhY2l0eTogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGksXG4gICAgY29sb3I6IGFueTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICBvcGFjaXR5W2ldID0gY29sb3Iub3BhY2l0eSB8fCAwO1xuICB9XG4gIHIgPSBzcGxpbmUocik7XG4gIGcgPSBzcGxpbmUoZyk7XG4gIGIgPSBzcGxpbmUoYik7XG4gIG9wYWNpdHkgPSBzcGxpbmUob3BhY2l0eSk7XG4gIC8vIGNvbG9yLm9wYWNpdHkgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gKHQ6IG51bWJlcikge1xuICAgIGNvbG9yLnIgPSByKHQpO1xuICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgIHJldHVybiBjb2xvciArICcnO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgc2NoZW1lOiBzdHJpbmdbXSxcbiAgYW5pbWF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IENvbG9yU2NhbGUge1xuICBjb25zdCBzY2FsZSA9IHNjYWxlU2VxdWVudGlhbFBvdyhpbnRlcnBvbGF0ZVJnYmFCYXNpcyhzY2hlbWUpKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgLyAyIDogMSAvIDMpXG4gICAgLmRvbWFpbihkb21haW4pO1xuXG4gIHJldHVybiAodmFsdWU6IG51bWJlcikgPT4gY29sb3JBc1JnYmEoc2NhbGUodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dDb2xvclNjYWxlKFxuICBjb2xvcnM6IENvbG9yc1JHQkEgfCBEaWZmQ29sb3JzUkdCQSxcbiAgbWFnbml0dWRlRXh0ZW50OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogKG1hZ25pdHVkZTogbnVtYmVyKSA9PiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IG1pbk1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFswXSA6IDA7XG4gIGNvbnN0IG1heE1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFsxXSA6IDA7XG4gIGlmIChpc0RpZmZDb2xvcnNSR0JBKGNvbG9ycykpIHtcbiAgICBjb25zdCBwb3NTY2FsZSA9IGNyZWF0ZUZsb3dDb2xvclNjYWxlKFxuICAgICAgWzAsIG1heE1hZ25pdHVkZV0sXG4gICAgICBjb2xvcnMucG9zaXRpdmUuZmxvd3Muc2NoZW1lLFxuICAgICAgYW5pbWF0ZSxcbiAgICApO1xuICAgIGNvbnN0IG5lZ1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWluTWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5uZWdhdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG5cbiAgICByZXR1cm4gKG1hZ25pdHVkZTogbnVtYmVyKSA9PlxuICAgICAgbWFnbml0dWRlID49IDAgPyBwb3NTY2FsZShtYWduaXR1ZGUpIDogbmVnU2NhbGUobWFnbml0dWRlKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgWzAsIG1heE1hZ25pdHVkZSB8fCAwXSxcbiAgICBjb2xvcnMuZmxvd3Muc2NoZW1lLFxuICAgIGFuaW1hdGUsXG4gICk7XG4gIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+IHNjYWxlKG1hZ25pdHVkZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpZmZDb2xvcnMoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IENvbG9ycyxcbik6IGNvbG9ycyBpcyBEaWZmQ29sb3JzIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9ycykucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9yc1JHQkEgfCBDb2xvcnNSR0JBLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnNSR0JBIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9yc1JHQkEpLnBvc2l0aXZlICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gIGNvbG9yczogTG9jYXRpb25BcmVhQ29sb3JzIHwgdW5kZWZpbmVkLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBjb25zdCBub3JtYWxDb2xvciA9IChjb2xvcnMgJiYgY29sb3JzLm5vcm1hbCkgfHwgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SO1xuICBjb25zdCBub3JtYWxDb2xvckhjbCA9IGhjbChub3JtYWxDb2xvcik7XG4gIGNvbnN0IGxvY2F0aW9uQXJlYXNOb3JtYWwgPSBjb2xvckFzUmdiYShub3JtYWxDb2xvcik7XG4gIHJldHVybiB7XG4gICAgbm9ybWFsOiBsb2NhdGlvbkFyZWFzTm9ybWFsLFxuICAgIGNvbm5lY3RlZDogY29sb3JBc1JnYmFPcihjb2xvcnMgJiYgY29sb3JzLmNvbm5lY3RlZCwgbG9jYXRpb25BcmVhc05vcm1hbCksXG4gICAgaGlnaGxpZ2h0ZWQ6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmhpZ2hsaWdodGVkLFxuICAgICAgb3BhY2lmeUhleChcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDEpLnRvU3RyaW5nKCksXG4gICAgICAgIDAuNSxcbiAgICAgICksXG4gICAgKSxcbiAgICBzZWxlY3RlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuc2VsZWN0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMikudG9TdHJpbmcoKSxcbiAgICAgICAgMC44LFxuICAgICAgKSxcbiAgICApLFxuICAgIG91dGxpbmU6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLm91dGxpbmUsXG4gICAgICBjb2xvckFzUmdiYShcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDQpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9ycyB7XG4gIHNjaGVtZT86IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9ycyB7XG4gIGlubmVyPzogc3RyaW5nO1xuICBvdXRnb2luZz86IHN0cmluZztcbiAgaW5jb21pbmc/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBlbXB0eT86IHN0cmluZztcbiAgb3V0bGluZUVtcHR5TWl4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9ycyB7XG4gIG91dGxpbmU/OiBzdHJpbmc7XG4gIG5vcm1hbD86IHN0cmluZztcbiAgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBjb25uZWN0ZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbG9ycyB7XG4gIGRhcmtNb2RlPzogYm9vbGVhbjtcbiAgbG9jYXRpb25BcmVhcz86IExvY2F0aW9uQXJlYUNvbG9ycztcbiAgZGltbWVkT3BhY2l0eT86IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dBbmRDaXJjbGVDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnMgZXh0ZW5kcyBCYXNlQ29sb3JzIHtcbiAgcG9zaXRpdmU/OiBGbG93QW5kQ2lyY2xlQ29sb3JzO1xuICBuZWdhdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG59XG5cbi8vIFRoZSB4eHhDb2xvcnNSR0JBIG9iamVjdHMgYXJlIG1pcnJvcmluZyB0aGUgaW5wdXQgY29sb3JzJyBvYmplY3RzLFxuLy8gYnV0IGNvbnZlcnRlZCB0byBSR0JBIGFuZCB3aXRoIGFsbCB0aGUgb21pdHRlZCBvbmVzIHNldCB0byBkZWZhdWx0c1xuLy8gb3IgZGVyaXZlZC5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9yc1JHQkEge1xuICBzY2hlbWU6IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkEge1xuICBpbm5lcjogUkdCQTtcbiAgb3V0Z29pbmc6IFJHQkE7XG4gIGluY29taW5nOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgZW1wdHk6IFJHQkE7XG4gIG91dGxpbmVFbXB0eU1peDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBvdXRsaW5lOiBSR0JBO1xuICBub3JtYWw6IFJHQkE7XG4gIHNlbGVjdGVkOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgY29ubmVjdGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb2xvcnNSR0JBIHtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGxvY2F0aW9uQXJlYXM6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkE7XG4gIGRpbW1lZE9wYWNpdHk6IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBmbG93czogRmxvd0NvbG9yc1JHQkE7XG4gIGxvY2F0aW9uQ2lyY2xlczogTG9jYXRpb25DaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnNSR0JBIGV4dGVuZHMgQmFzZUNvbG9yc1JHQkEge1xuICBwb3NpdGl2ZTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkE7XG4gIG5lZ2F0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgaW5wdXRDb2xvcnM6IEZsb3dBbmRDaXJjbGVDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU6IHN0cmluZ1tdLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBIHtcbiAgY29uc3QgZmxvd0NvbG9yU2NoZW1lID1cbiAgICAoaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3Muc2NoZW1lKSB8fFxuICAgIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU7XG4gIGNvbnN0IG1heEZsb3dDb2xvckhjbCA9IGhjbChmbG93Q29sb3JTY2hlbWVbZmxvd0NvbG9yU2NoZW1lLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzICYmIGlucHV0Q29sb3JzLmZsb3dzICYmIGlucHV0Q29sb3JzLmZsb3dzLmhpZ2hsaWdodGVkLFxuICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgwLjcpLnRvU3RyaW5nKCksXG4gICAgKSxcbiAgKTtcblxuICBjb25zdCBlbXB0eUNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycz8ubG9jYXRpb25DaXJjbGVzPy5lbXB0eSxcbiAgICBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJyxcbiAgKTtcbiAgY29uc3QgaW5uZXJDb2xvciA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyLFxuICAgIG1heEZsb3dDb2xvckhjbC50b1N0cmluZygpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IGZsb3dDb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodGVkOiBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgaW5uZXI6IGlubmVyQ29sb3IsXG4gICAgICBvdXRnb2luZzogY29sb3JBc1JnYmFPcihcbiAgICAgICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMub3V0Z29pbmcsXG4gICAgICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgICAgKSxcbiAgICAgIGluY29taW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbmNvbWluZyxcbiAgICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgxLjI1KS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIGhpZ2hsaWdodGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5oaWdobGlnaHRlZCxcbiAgICAgICAgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQsXG4gICAgICApLFxuICAgICAgZW1wdHk6IGVtcHR5Q29sb3IsXG4gICAgICBvdXRsaW5lRW1wdHlNaXg6IGlucHV0Q29sb3JzPy5sb2NhdGlvbkNpcmNsZXM/Lm91dGxpbmVFbXB0eU1peCA/PyAwLjQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZUNvbG9yc1JHQkEoXG4gIGNvbG9yczogQ29sb3JzIHwgRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IEJhc2VDb2xvcnNSR0JBIHtcbiAgY29uc3QgZGFya01vZGUgPSBjb2xvcnMgJiYgY29sb3JzLmRhcmtNb2RlID8gdHJ1ZSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGRhcmtNb2RlLFxuICAgIGxvY2F0aW9uQXJlYXM6IGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmxvY2F0aW9uQXJlYXMsXG4gICAgICBkYXJrTW9kZSxcbiAgICApLFxuICAgIG91dGxpbmVDb2xvcjogY29sb3JBc1JnYmEoXG4gICAgICAoY29sb3JzICYmIGNvbG9ycy5vdXRsaW5lQ29sb3IpIHx8IERFRkFVTFRfT1VUTElORV9DT0xPUixcbiAgICApLFxuICAgIGRpbW1lZE9wYWNpdHk6XG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmRpbW1lZE9wYWNpdHkgIT0gbnVsbFxuICAgICAgICA/IGNvbG9ycy5kaW1tZWRPcGFjaXR5XG4gICAgICAgIDogREVGQVVMVF9ESU1NRURfT1BBQ0lUWSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yc1JHQkEoY29sb3JzOiBDb2xvcnMgfCB1bmRlZmluZWQpOiBDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIC4uLmdldEZsb3dBbmRDaXJjbGVDb2xvcnMoXG4gICAgICBjb2xvcnMsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZDb2xvcnNSR0JBKFxuICBjb2xvcnM6IERpZmZDb2xvcnMgfCB1bmRlZmluZWQsXG4pOiBEaWZmQ29sb3JzUkdCQSB7XG4gIGNvbnN0IGJhc2VDb2xvcnNSR0JBID0gZ2V0QmFzZUNvbG9yc1JHQkEoY29sb3JzKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29sb3JzUkdCQSxcbiAgICBwb3NpdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMucG9zaXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgICBuZWdhdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubmVnYXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYmFBc1N0cmluZyhjb2xvcjogUkdCQSk6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgke2NvbG9yLmpvaW4oJywnKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pZHBvaW50KGE6IG51bWJlciwgYjogbnVtYmVyLCB6ZXJvVG9PbmU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhICsgKGIgLSBhKSAqIHplcm9Ub09uZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1peENvbG9yc1JHQkEoXG4gIGNvbG9yMTogUkdCQSxcbiAgY29sb3IyOiBSR0JBLFxuICB6ZXJvVG9PbmU6IG51bWJlcixcbik6IFJHQkEge1xuICByZXR1cm4gY29sb3IxLm1hcCgodiwgaSkgPT4gbWlkcG9pbnQodiwgY29sb3IyW2ldLCB6ZXJvVG9PbmUpKSBhcyBSR0JBO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRDb2xvcnM7XG4iXX0=
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFdBQVcsRUFDWCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsS0FBSyxJQUFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUdoRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUNyQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLHVCQUF1QixDQUFDO0FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0RSxNQUFNLDJCQUEyQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELE1BQU0sa0NBQWtDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRSxNQUFNLGtD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QUMsVUFBVSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzlCLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFCLElBQUksRUFBRTtRQUNKLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELE9BQU8sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ2hDLE1BQU0sRUFBRTtRQUNOLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFCLEtBQUssRUFBRTtRQUNMLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFCLE1BQU0sRUFBRTtRQUNOLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELFVBQVUsRUFBRTtRQUNWLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRTtRQUNQLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELE9BQU8sRUFBRSxhQUFhLENBQUMsa0JBQWtCLENBQUM7SUFDMUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUM7SUFDcEMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7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LE1BQThCO0lBRTlCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELE9BQU87UUFDTCxHQUFHLGNBQWM7UUFDakIsUUFBUSxFQUFFLHNCQUFzQixDQUM5QixNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFDekIsa0NBQWtDLEVBQ2xDLGNBQWMsQ0FBQyxRQUFRLENBQ3hCO1FBQ0QsUUFBUSxFQUFFLHNCQUFzQixDQUM5QixNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFDekIsa0NBQWtDLEVBQ2xDLGNBQWMsQ0FBQyxRQUFRLENBQ3hCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVc7SUFDdEMsT0FBTyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFNBQWlCO0lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBWSxFQUNaLE1BQVksRUFDWixTQUFpQjtJQUVqQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBUyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxlQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7XG4gIGludGVycG9sYXRlQ29vbCxcbiAgaW50ZXJwb2xhdGVJbmZlcm5vLFxuICBpbnRlcnBvbGF0ZU1hZ21hLFxuICBpbnRlcnBvbGF0ZVBsYXNtYSxcbiAgaW50ZXJwb2xhdGVWaXJpZGlzLFxuICBpbnRlcnBvbGF0ZVdhcm0sXG4gIHNjaGVtZUJsdWVzLFxuICBzY2hlbWVCdUduLFxuICBzY2hlbWVCdVB1LFxuICBzY2hlbWVHbkJ1LFxuICBzY2hlbWVHcmVlbnMsXG4gIHNjaGVtZUdyZXlzLFxuICBzY2hlbWVPcmFuZ2VzLFxuICBzY2hlbWVPclJkLFxuICBzY2hlbWVQdUJ1LFxuICBzY2hlbWVQdUJ1R24sXG4gIHNjaGVtZVB1UmQsXG4gIHNjaGVtZVB1cnBsZXMsXG4gIHNjaGVtZVJkUHUsXG4gIHNjaGVtZVJlZHMsXG4gIHNjaGVtZVlsR24sXG4gIHNjaGVtZVlsR25CdSxcbiAgc2NoZW1lWWxPckJyLFxuICBzY2hlbWVZbE9yUmQsXG59IGZyb20gJ2QzLXNjYWxlLWNocm9tYXRpYyc7XG5pbXBvcnQge3JhbmdlfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQge3NjYWxlUG93LCBzY2FsZVNlcXVlbnRpYWwsIHNjYWxlU2VxdWVudGlhbFBvd30gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUJhc2lzLCBpbnRlcnBvbGF0ZVJnYkJhc2lzfSBmcm9tICdkMy1pbnRlcnBvbGF0ZSc7XG5pbXBvcnQge2NvbG9yIGFzIGQzY29sb3IsIGhjbCwgcmdiIGFzIGNvbG9yUmdifSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge1NldHRpbmdzU3RhdGV9IGZyb20gJy4vRmxvd21hcFN0YXRlJztcblxuY29uc3QgREVGQVVMVF9PVVRMSU5FX0NPTE9SID0gJyNmZmYnO1xuY29uc3QgREVGQVVMVF9ESU1NRURfT1BBQ0lUWSA9IDAuNDtcbmNvbnN0IERFRkFVTFRfRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMxMzdDQkQnXTtcbmNvbnN0IERFRkFVTFRfTE9DQVRJT05fQVJFQV9DT0xPUiA9ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknO1xuXG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjZjY2NTRlJ107XG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjMDBhOWNjJ107XG5cbmV4cG9ydCB0eXBlIENvbG9yU2NhbGUgPSAodmFsdWU6IG51bWJlcikgPT4gUkdCQTtcbmV4cG9ydCB0eXBlIFJHQkEgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgRkFMTEJBQ0tfQ09MT1JfUkdCQTogUkdCQSA9IFsyNTUsIDI1NSwgMjU1LCAyNTVdO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKG9wYWNpdHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKG9wYWNpdHkgKiAyNTUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2lmeUhleChoZXhDb2RlOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGMgPSBkM2NvbG9yKGhleENvZGUpO1xuICBpZiAoIWMpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGhleENvZGUpO1xuICAgIHJldHVybiBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke29wYWNpdHl9KWA7XG4gIH1cbiAgY29uc3QgY29sID0gYy5yZ2IoKTtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sLnJ9LCAke2NvbC5nfSwgJHtjb2wuYn0sICR7b3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQXNSZ2JhKGNvbG9yOiBzdHJpbmcgfCBudW1iZXJbXSk6IFJHQkEge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikpIHtcbiAgICByZXR1cm4gY29sb3IgYXMgUkdCQTtcbiAgfVxuICBjb25zdCBjb2wgPSBkM2NvbG9yKGNvbG9yKTtcbiAgaWYgKCFjb2wpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGNvbG9yKTtcbiAgICByZXR1cm4gRkFMTEJBQ0tfQ09MT1JfUkdCQTtcbiAgfVxuICBjb25zdCByZ2JDb2xvciA9IGNvbC5yZ2IoKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLnIpLFxuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuZyksXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5iKSxcbiAgICBvcGFjaXR5RmxvYXRUb0ludGVnZXIoY29sLm9wYWNpdHkpLFxuICBdO1xufVxuXG5mdW5jdGlvbiBjb2xvckFzUmdiYU9yKFxuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0Q29sb3I6IFJHQkEgfCBzdHJpbmcsXG4pOiBSR0JBIHtcbiAgaWYgKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNvbG9yQXNSZ2JhKGNvbG9yKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlZmF1bHRDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29sb3JBc1JnYmEoZGVmYXVsdENvbG9yKTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdENvbG9yO1xufVxuXG5jb25zdCBhc1NjaGVtZSA9IChzY2hlbWU6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHlBcnJheTxzdHJpbmc+PikgPT5cbiAgc2NoZW1lW3NjaGVtZS5sZW5ndGggLSAxXSBhcyBzdHJpbmdbXTtcblxuZXhwb3J0IGVudW0gQ29sb3JTY2hlbWUge1xuICBwcmltYXJ5ID0gJyMxNjJkM2MnLFxufVxuXG5jb25zdCBTQ0FMRV9OVU1fU1RFUFMgPSAyMDtcbmNvbnN0IGdldENvbG9yU3RlcHMgPSAoaW50ZXJwb2xhdGU6ICh4OiBudW1iZXIpID0+IHN0cmluZykgPT5cbiAgcmFuZ2UoMCwgU0NBTEVfTlVNX1NURVBTICsgMSlcbiAgICAubWFwKChpKSA9PiBpbnRlcnBvbGF0ZShpIC8gU0NBTEVfTlVNX1NURVBTKSlcbiAgICAucmV2ZXJzZSgpO1xuXG5jb25zdCBGTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuZXhwb3J0IGNvbnN0IEdSQVlJU0ggPSBbRkxPV19NSU5fQ09MT1IsIENvbG9yU2NoZW1lLnByaW1hcnldO1xuY29uc3Qgc2NoZW1lQmx1WWwgPSBbXG4gICcjZjdmZWFlJyxcbiAgJyNiN2U2YTUnLFxuICAnIzdjY2JhMicsXG4gICcjNDZhZWEwJyxcbiAgJyMwODkwOTknLFxuICAnIzAwNzE4YicsXG4gICcjMDQ1Mjc1Jyxcbl07XG5cbmNvbnN0IHNjaGVtZUVtcmxkID0gW1xuICAnI2QzZjJhMycsXG4gICcjOTdlMTk2JyxcbiAgJyM2Y2MwOGInLFxuICAnIzRjOWI4MicsXG4gICcjMjE3YTc5JyxcbiAgJyMxMDU5NjUnLFxuICAnIzA3NDA1MCcsXG5dO1xuXG5leHBvcnQgY29uc3Qgc2NoZW1lVGVhbCA9IFtcbiAgJyNkMWVlZWEnLFxuICAnI2E4ZGJkOScsXG4gICcjODVjNGM5JyxcbiAgJyM2OGFiYjgnLFxuICAnIzRmOTBhNicsXG4gICcjM2I3MzhmJyxcbiAgJyMyYTU2NzQnLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfU0NIRU1FID0gc2NoZW1lVGVhbDtcbmV4cG9ydCBjb25zdCBDT0xPUl9TQ0hFTUVTOiB7W2tleTogc3RyaW5nXTogc3RyaW5nW119ID0ge1xuICBCbHVlczogYXNTY2hlbWUoc2NoZW1lQmx1ZXMpLFxuICBCbHVHcm46IFtcbiAgICAnI2M0ZTZjMycsXG4gICAgJyM5NmQyYTQnLFxuICAgICcjNmRiYzkwJyxcbiAgICAnIzRkYTI4NCcsXG4gICAgJyMzNjg3N2EnLFxuICAgICcjMjY2YjZlJyxcbiAgICAnIzFkNGY2MCcsXG4gIF0sXG4gIEJsdVlsOiBzY2hlbWVCbHVZbCxcbiAgQnJ3bllsOiBbXG4gICAgJyNlZGU1Y2YnLFxuICAgICcjZTBjMmEyJyxcbiAgICAnI2QzOWM4MycsXG4gICAgJyNjMTc2NmYnLFxuICAgICcjYTY1NDYxJyxcbiAgICAnIzgxMzc1MycsXG4gICAgJyM1NDFmM2YnLFxuICBdLFxuICBCdUduOiBhc1NjaGVtZShzY2hlbWVCdUduKSxcbiAgQnVQdTogYXNTY2hlbWUoc2NoZW1lQnVQdSksXG4gIEJ1cmc6IFtcbiAgICAnI2ZmYzZjNCcsXG4gICAgJyNmNGEzYTgnLFxuICAgICcjZTM4MTkxJyxcbiAgICAnI2NjNjA3ZCcsXG4gICAgJyNhZDQ2NmMnLFxuICAgICcjOGIzMDU4JyxcbiAgICAnIzY3MjA0NCcsXG4gIF0sXG4gIEJ1cmdZbDogW1xuICAgICcjZmJlNmM1JyxcbiAgICAnI2Y1YmE5OCcsXG4gICAgJyNlZThhODInLFxuICAgICcjZGM3MTc2JyxcbiAgICAnI2M4NTg2YycsXG4gICAgJyM5YzNmNWQnLFxuICAgICcjNzAyODRhJyxcbiAgXSxcbiAgQ29vbDogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZUNvb2wpLFxuICBEYXJrTWludDogW1xuICAgICcjZDJmYmQ0JyxcbiAgICAnI2E1ZGJjMicsXG4gICAgJyM3YmJjYjAnLFxuICAgICcjNTU5YzllJyxcbiAgICAnIzNhN2M4OScsXG4gICAgJyMyMzVkNzInLFxuICAgICcjMTIzZjVhJyxcbiAgXSxcbiAgRW1ybGQ6IHNjaGVtZUVtcmxkLFxuICBHbkJ1OiBhc1NjaGVtZShzY2hlbWVHbkJ1KSxcbiAgR3JheWlzaDogR1JBWUlTSCxcbiAgR3JlZW5zOiBhc1NjaGVtZShzY2hlbWVHcmVlbnMpLFxuICBHcmV5czogYXNTY2hlbWUoc2NoZW1lR3JleXMpLFxuICBJbmZlcm5vOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlSW5mZXJubyksXG4gIE1hZ2VudGE6IFtcbiAgICAnI2YzY2JkMycsXG4gICAgJyNlYWE5YmQnLFxuICAgICcjZGQ4OGFjJyxcbiAgICAnI2NhNjk5ZCcsXG4gICAgJyNiMTRkOGUnLFxuICAgICcjOTEzNTdkJyxcbiAgICAnIzZjMjE2NycsXG4gIF0sXG4gIE1hZ21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlTWFnbWEpLFxuICBNaW50OiBbXG4gICAgJyNlNGYxZTEnLFxuICAgICcjYjRkOWNjJyxcbiAgICAnIzg5YzBiNicsXG4gICAgJyM2M2E2YTAnLFxuICAgICcjNDQ4YzhhJyxcbiAgICAnIzI4NzI3NCcsXG4gICAgJyMwZDU4NWYnLFxuICBdLFxuICBPcmFuZ2VzOiBhc1NjaGVtZShzY2hlbWVPcmFuZ2VzKSxcbiAgT3JSZDogYXNTY2hlbWUoc2NoZW1lT3JSZCksXG4gIE9yWWVsOiBbXG4gICAgJyNlY2RhOWEnLFxuICAgICcjZWZjNDdlJyxcbiAgICAnI2YzYWQ2YScsXG4gICAgJyNmNzk0NWQnLFxuICAgICcjZjk3YjU3JyxcbiAgICAnI2Y2NjM1NicsXG4gICAgJyNlZTRkNWEnLFxuICBdLFxuICBQZWFjaDogW1xuICAgICcjZmRlMGM1JyxcbiAgICAnI2ZhY2JhNicsXG4gICAgJyNmOGI1OGInLFxuICAgICcjZjU5ZTcyJyxcbiAgICAnI2YyODU1ZCcsXG4gICAgJyNlZjZhNGMnLFxuICAgICcjZWI0YTQwJyxcbiAgXSxcbiAgUGxhc21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlUGxhc21hKSxcbiAgUGlua1lsOiBbXG4gICAgJyNmZWY2YjUnLFxuICAgICcjZmZkZDlhJyxcbiAgICAnI2ZmYzI4NScsXG4gICAgJyNmZmE2NzknLFxuICAgICcjZmE4YTc2JyxcbiAgICAnI2YxNmQ3YScsXG4gICAgJyNlMTUzODMnLFxuICBdLFxuICBQdUJ1OiBhc1NjaGVtZShzY2hlbWVQdUJ1KSxcbiAgUHVCdUduOiBhc1NjaGVtZShzY2hlbWVQdUJ1R24pLFxuICBQdVJkOiBhc1NjaGVtZShzY2hlbWVQdVJkKSxcbiAgUHVycDogW1xuICAgICcjZjNlMGY3JyxcbiAgICAnI2U0YzdmMScsXG4gICAgJyNkMWFmZTgnLFxuICAgICcjYjk5OGRkJyxcbiAgICAnIzlmODJjZScsXG4gICAgJyM4MjZkYmEnLFxuICAgICcjNjM1ODlmJyxcbiAgXSxcbiAgUHVycGxlczogYXNTY2hlbWUoc2NoZW1lUHVycGxlcyksXG4gIFB1cnBPcjogW1xuICAgICcjZjlkZGRhJyxcbiAgICAnI2YyYjljNCcsXG4gICAgJyNlNTk3YjknLFxuICAgICcjY2U3OGIzJyxcbiAgICAnI2FkNWZhZCcsXG4gICAgJyM4MzRiYTAnLFxuICAgICcjNTczYjg4JyxcbiAgXSxcbiAgUmRQdTogYXNTY2hlbWUoc2NoZW1lUmRQdSksXG4gIFJlZE9yOiBbXG4gICAgJyNmNmQyYTknLFxuICAgICcjZjViNzhlJyxcbiAgICAnI2YxOWM3YycsXG4gICAgJyNlYTgxNzEnLFxuICAgICcjZGQ2ODZjJyxcbiAgICAnI2NhNTI2OCcsXG4gICAgJyNiMTNmNjQnLFxuICBdLFxuICBSZWRzOiBhc1NjaGVtZShzY2hlbWVSZWRzKSxcbiAgU3Vuc2V0OiBbXG4gICAgJyNmM2U3OWInLFxuICAgICcjZmFjNDg0JyxcbiAgICAnI2Y4YTA3ZScsXG4gICAgJyNlYjdmODYnLFxuICAgICcjY2U2NjkzJyxcbiAgICAnI2EwNTlhMCcsXG4gICAgJyM1YzUzYTUnLFxuICBdLFxuICBTdW5zZXREYXJrOiBbXG4gICAgJyNmY2RlOWMnLFxuICAgICcjZmFhNDc2JyxcbiAgICAnI2YwNzQ2ZScsXG4gICAgJyNlMzRmNmYnLFxuICAgICcjZGMzOTc3JyxcbiAgICAnI2I5MjU3YScsXG4gICAgJyM3YzFkNmYnLFxuICBdLFxuICBUZWFsOiBzY2hlbWVUZWFsLFxuICBUZWFsR3JuOiBbXG4gICAgJyNiMGYyYmMnLFxuICAgICcjODllOGFjJyxcbiAgICAnIzY3ZGJhNScsXG4gICAgJyM0Y2M4YTMnLFxuICAgICcjMzhiMmEzJyxcbiAgICAnIzJjOThhMCcsXG4gICAgJyMyNTdkOTgnLFxuICBdLFxuICBWaXJpZGlzOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlVmlyaWRpcyksXG4gIFdhcm06IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVXYXJtKSxcbiAgWWxHbjogYXNTY2hlbWUoc2NoZW1lWWxHbiksXG4gIFlsR25CdTogYXNTY2hlbWUoc2NoZW1lWWxHbkJ1KSxcbiAgWWxPckJyOiBhc1NjaGVtZShzY2hlbWVZbE9yQnIpLFxuICBZbE9yUmQ6IGFzU2NoZW1lKHNjaGVtZVlsT3JSZCksXG59O1xuXG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhDT0xPUl9TQ0hFTUVTKTtcblxuY29uc3QgY29tcGxlbWVudGFyeSA9ICcjZjUyMDIwJztcbmNvbnN0IGJhc2VEaWZmQ29sb3IgPSAnIzE3YTViZSc7XG5cbmNvbnN0IGRpZmZDb2xvcnM6IERpZmZDb2xvcnMgPSB7XG4gIG5lZ2F0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBiYXNlRGlmZkNvbG9yXSxcbiAgICB9LFxuICB9LFxuICBwb3NpdGl2ZToge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IFtGTE9XX01JTl9DT0xPUiwgY29tcGxlbWVudGFyeV0sXG4gICAgfSxcbiAgfSxcbiAgbG9jYXRpb25BcmVhczoge1xuICAgIG91dGxpbmU6ICdyZ2JhKDkyLDExMiwxMjgsMC41KScsXG4gICAgbm9ybWFsOiAncmdiYSgyMjAsMjIwLDIyMCwwLjUpJyxcbiAgfSxcbiAgb3V0bGluZUNvbG9yOiAncmdiKDIzMCwyMzMsMjM3KScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd21hcENvbG9ycyhzZXR0aW5nczogU2V0dGluZ3NTdGF0ZSk6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICByZXR1cm4gZ2V0Q29sb3JzKFxuICAgIGZhbHNlLCAvLyBUT0RPOiBkaWZmTW9kZVxuICAgIHNldHRpbmdzLmNvbG9yU2NoZW1lLFxuICAgIHNldHRpbmdzLmRhcmtNb2RlLFxuICAgIHNldHRpbmdzLmZhZGVFbmFibGVkLFxuICAgIHNldHRpbmdzLmZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICBzZXR0aW5ncy5mYWRlQW1vdW50LFxuICAgIHNldHRpbmdzLmFuaW1hdGlvbkVuYWJsZWQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcnMoXG4gIGRpZmZNb2RlOiBib29sZWFuLFxuICBjb2xvclNjaGVtZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuICBmYWRlRW5hYmxlZDogYm9vbGVhbixcbiAgZmFkZU9wYWNpdHlFbmFibGVkOiBib29sZWFuLFxuICBmYWRlQW1vdW50OiBudW1iZXIsXG4gIGFuaW1hdGU6IGJvb2xlYW4sXG4pOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHtcbiAgaWYgKGRpZmZNb2RlKSB7XG4gICAgcmV0dXJuIGRpZmZDb2xvcnM7XG4gIH1cblxuICBsZXQgc2NoZW1lO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yU2NoZW1lKSkge1xuICAgIHNjaGVtZSA9IGNvbG9yU2NoZW1lO1xuICB9IGVsc2Uge1xuICAgIHNjaGVtZSA9XG4gICAgICAoY29sb3JTY2hlbWUgJiYgQ09MT1JfU0NIRU1FU1tjb2xvclNjaGVtZV0pIHx8IERFRkFVTFRfQ09MT1JfU0NIRU1FO1xuICAgIGlmIChkYXJrTW9kZSkge1xuICAgICAgc2NoZW1lID0gc2NoZW1lLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIChhbmltYXRlKVxuICAvLyBpZiAoZmFkZUFtb3VudCA+IDApXG4gIHtcbiAgICBjb25zdCBpbmRpY2VzID0gcmFuZ2UoMCwgTWF0aC5tYXgoMTAsIHNjaGVtZS5sZW5ndGgpKTtcbiAgICBjb25zdCBOID0gaW5kaWNlcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZVNlcXVlbnRpYWwoaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWUpKS5kb21haW4oW1xuICAgICAgMCxcbiAgICAgIE4sXG4gICAgXSk7XG5cbiAgICBpZiAoIWZhZGVFbmFibGVkIHx8IGZhZGVBbW91bnQgPT09IDApIHtcbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKChjLCBpKSA9PiBjb2xvclNjYWxlKGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYW1vdW50ID0gc2NhbGVQb3coKVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgOiAxLzIuNSlcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAxMDAgOiA1MClcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAyMCA6IDUpXG4gICAgICAgIC8vIC5leHBvbmVudCgxLzIuNSlcbiAgICAgICAgLmV4cG9uZW50KDEuNSlcbiAgICAgICAgLmRvbWFpbihbTiwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKSwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMCwgZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKV0pXG4gICAgICAgIC8vIC5yYW5nZShkYXJrTW9kZSA/IFsxLWZhZGVBbW91bnQvMTAwLCAxXSA6IFsxLCAxIC0gZmFkZUFtb3VudC8xMDBdKVxuICAgICAgICAvLyAucmFuZ2UoZGFya01vZGUgPyBbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSA6IFtmYWRlQW1vdW50LzEwMCwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSlcbiAgICAgICAgLnJhbmdlKFswLCAoMiAqIGZhZGVBbW91bnQpIC8gMTAwXSk7XG5cbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKFxuICAgICAgICAoYywgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JTY2FsZShpKTtcbiAgICAgICAgICBjb25zdCBhID0gYW1vdW50KGkpO1xuICAgICAgICAgIGlmIChjb2xvciA9PSBudWxsIHx8IGEgPT0gbnVsbCkgcmV0dXJuICcjMDAwJztcbiAgICAgICAgICBjb25zdCBjb2wgPSBoY2woY29sb3IpO1xuICAgICAgICAgIGNvbC5sID0gZGFya01vZGUgPyBjb2wubCAtIGNvbC5sICogYSA6IGNvbC5sICsgKDEwMCAtIGNvbC5sKSAqIGE7XG4gICAgICAgICAgY29sLmMgPSBjb2wuYyAtIGNvbC5jICogKGEgLyA0KTtcbiAgICAgICAgICBpZiAoZmFkZU9wYWNpdHlFbmFibGVkKSB7XG4gICAgICAgICAgICBjb2wub3BhY2l0eSA9IGNvbC5vcGFjaXR5ICogKDEuMCAtIGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGludGVycG9sYXRlUmdiQmFzaXMoW2NvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnXSkoYW1vdW50KGkpKVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZUhzbChjb2xvclNjYWxlKGkpLCBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJykoYW1vdW50KGkpKS50b1N0cmluZygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZSxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgb3V0Z29pbmc6IGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgIH0sXG4gICAgb3V0bGluZUNvbG9yOiBkYXJrTW9kZSA/ICcjMDAwJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVJnYmFCYXNpcyhjb2xvcnM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHNwbGluZSA9IGludGVycG9sYXRlQmFzaXM7XG4gIGNvbnN0IG4gPSBjb2xvcnMubGVuZ3RoO1xuICBsZXQgcjogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGc6IGFueSA9IG5ldyBBcnJheShuKSxcbiAgICBiOiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgb3BhY2l0eTogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGksXG4gICAgY29sb3I6IGFueTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICBvcGFjaXR5W2ldID0gY29sb3Iub3BhY2l0eSB8fCAwO1xuICB9XG4gIHIgPSBzcGxpbmUocik7XG4gIGcgPSBzcGxpbmUoZyk7XG4gIGIgPSBzcGxpbmUoYik7XG4gIG9wYWNpdHkgPSBzcGxpbmUob3BhY2l0eSk7XG4gIC8vIGNvbG9yLm9wYWNpdHkgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gKHQ6IG51bWJlcikge1xuICAgIGNvbG9yLnIgPSByKHQpO1xuICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgIHJldHVybiBjb2xvciArICcnO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgc2NoZW1lOiBzdHJpbmdbXSxcbiAgYW5pbWF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IENvbG9yU2NhbGUge1xuICBjb25zdCBzY2FsZSA9IHNjYWxlU2VxdWVudGlhbFBvdyhpbnRlcnBvbGF0ZVJnYmFCYXNpcyhzY2hlbWUpKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgLyAyIDogMSAvIDMpXG4gICAgLmRvbWFpbihkb21haW4pO1xuXG4gIHJldHVybiAodmFsdWU6IG51bWJlcikgPT4gY29sb3JBc1JnYmEoc2NhbGUodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dDb2xvclNjYWxlKFxuICBjb2xvcnM6IENvbG9yc1JHQkEgfCBEaWZmQ29sb3JzUkdCQSxcbiAgbWFnbml0dWRlRXh0ZW50OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogKG1hZ25pdHVkZTogbnVtYmVyKSA9PiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IG1pbk1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFswXSA6IDA7XG4gIGNvbnN0IG1heE1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFsxXSA6IDA7XG4gIGlmIChpc0RpZmZDb2xvcnNSR0JBKGNvbG9ycykpIHtcbiAgICBjb25zdCBwb3NTY2FsZSA9IGNyZWF0ZUZsb3dDb2xvclNjYWxlKFxuICAgICAgWzAsIG1heE1hZ25pdHVkZV0sXG4gICAgICBjb2xvcnMucG9zaXRpdmUuZmxvd3Muc2NoZW1lLFxuICAgICAgYW5pbWF0ZSxcbiAgICApO1xuICAgIGNvbnN0IG5lZ1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWluTWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5uZWdhdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG5cbiAgICByZXR1cm4gKG1hZ25pdHVkZTogbnVtYmVyKSA9PlxuICAgICAgbWFnbml0dWRlID49IDAgPyBwb3NTY2FsZShtYWduaXR1ZGUpIDogbmVnU2NhbGUobWFnbml0dWRlKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgWzAsIG1heE1hZ25pdHVkZSB8fCAwXSxcbiAgICBjb2xvcnMuZmxvd3Muc2NoZW1lLFxuICAgIGFuaW1hdGUsXG4gICk7XG4gIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+IHNjYWxlKG1hZ25pdHVkZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpZmZDb2xvcnMoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IENvbG9ycyxcbik6IGNvbG9ycyBpcyBEaWZmQ29sb3JzIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9ycykucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9yc1JHQkEgfCBDb2xvcnNSR0JBLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnNSR0JBIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9yc1JHQkEpLnBvc2l0aXZlICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gIGNvbG9yczogTG9jYXRpb25BcmVhQ29sb3JzIHwgdW5kZWZpbmVkLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBjb25zdCBub3JtYWxDb2xvciA9IChjb2xvcnMgJiYgY29sb3JzLm5vcm1hbCkgfHwgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SO1xuICBjb25zdCBub3JtYWxDb2xvckhjbCA9IGhjbChub3JtYWxDb2xvcik7XG4gIGNvbnN0IGxvY2F0aW9uQXJlYXNOb3JtYWwgPSBjb2xvckFzUmdiYShub3JtYWxDb2xvcik7XG4gIHJldHVybiB7XG4gICAgbm9ybWFsOiBsb2NhdGlvbkFyZWFzTm9ybWFsLFxuICAgIGNvbm5lY3RlZDogY29sb3JBc1JnYmFPcihjb2xvcnMgJiYgY29sb3JzLmNvbm5lY3RlZCwgbG9jYXRpb25BcmVhc05vcm1hbCksXG4gICAgaGlnaGxpZ2h0ZWQ6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmhpZ2hsaWdodGVkLFxuICAgICAgb3BhY2lmeUhleChcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDEpLnRvU3RyaW5nKCksXG4gICAgICAgIDAuNSxcbiAgICAgICksXG4gICAgKSxcbiAgICBzZWxlY3RlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuc2VsZWN0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMikudG9TdHJpbmcoKSxcbiAgICAgICAgMC44LFxuICAgICAgKSxcbiAgICApLFxuICAgIG91dGxpbmU6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLm91dGxpbmUsXG4gICAgICBjb2xvckFzUmdiYShcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDQpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9ycyB7XG4gIHNjaGVtZT86IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9ycyB7XG4gIGlubmVyPzogc3RyaW5nO1xuICBvdXRnb2luZz86IHN0cmluZztcbiAgaW5jb21pbmc/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBlbXB0eT86IHN0cmluZztcbiAgb3V0bGluZUVtcHR5TWl4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9ycyB7XG4gIG91dGxpbmU/OiBzdHJpbmc7XG4gIG5vcm1hbD86IHN0cmluZztcbiAgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBjb25uZWN0ZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbG9ycyB7XG4gIGRhcmtNb2RlPzogYm9vbGVhbjtcbiAgbG9jYXRpb25BcmVhcz86IExvY2F0aW9uQXJlYUNvbG9ycztcbiAgZGltbWVkT3BhY2l0eT86IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dBbmRDaXJjbGVDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnMgZXh0ZW5kcyBCYXNlQ29sb3JzIHtcbiAgcG9zaXRpdmU/OiBGbG93QW5kQ2lyY2xlQ29sb3JzO1xuICBuZWdhdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG59XG5cbi8vIFRoZSB4eHhDb2xvcnNSR0JBIG9iamVjdHMgYXJlIG1pcnJvcmluZyB0aGUgaW5wdXQgY29sb3JzJyBvYmplY3RzLFxuLy8gYnV0IGNvbnZlcnRlZCB0byBSR0JBIGFuZCB3aXRoIGFsbCB0aGUgb21pdHRlZCBvbmVzIHNldCB0byBkZWZhdWx0c1xuLy8gb3IgZGVyaXZlZC5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9yc1JHQkEge1xuICBzY2hlbWU6IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkEge1xuICBpbm5lcjogUkdCQTtcbiAgb3V0Z29pbmc6IFJHQkE7XG4gIGluY29taW5nOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgZW1wdHk6IFJHQkE7XG4gIG91dGxpbmVFbXB0eU1peDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBvdXRsaW5lOiBSR0JBO1xuICBub3JtYWw6IFJHQkE7XG4gIHNlbGVjdGVkOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgY29ubmVjdGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb2xvcnNSR0JBIHtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGxvY2F0aW9uQXJlYXM6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkE7XG4gIGRpbW1lZE9wYWNpdHk6IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBmbG93czogRmxvd0NvbG9yc1JHQkE7XG4gIGxvY2F0aW9uQ2lyY2xlczogTG9jYXRpb25DaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnNSR0JBIGV4dGVuZHMgQmFzZUNvbG9yc1JHQkEge1xuICBwb3NpdGl2ZTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkE7XG4gIG5lZ2F0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgaW5wdXRDb2xvcnM6IEZsb3dBbmRDaXJjbGVDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU6IHN0cmluZ1tdLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBIHtcbiAgY29uc3QgZmxvd0NvbG9yU2NoZW1lID1cbiAgICAoaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3Muc2NoZW1lKSB8fFxuICAgIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU7XG4gIGNvbnN0IG1heEZsb3dDb2xvckhjbCA9IGhjbChmbG93Q29sb3JTY2hlbWVbZmxvd0NvbG9yU2NoZW1lLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzICYmIGlucHV0Q29sb3JzLmZsb3dzICYmIGlucHV0Q29sb3JzLmZsb3dzLmhpZ2hsaWdodGVkLFxuICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgwLjcpLnRvU3RyaW5nKCksXG4gICAgKSxcbiAgKTtcblxuICBjb25zdCBlbXB0eUNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycz8ubG9jYXRpb25DaXJjbGVzPy5lbXB0eSxcbiAgICBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJyxcbiAgKTtcbiAgY29uc3QgaW5uZXJDb2xvciA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyLFxuICAgIG1heEZsb3dDb2xvckhjbC50b1N0cmluZygpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IGZsb3dDb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodGVkOiBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgaW5uZXI6IGlubmVyQ29sb3IsXG4gICAgICBvdXRnb2luZzogY29sb3JBc1JnYmFPcihcbiAgICAgICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMub3V0Z29pbmcsXG4gICAgICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgICAgKSxcbiAgICAgIGluY29taW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbmNvbWluZyxcbiAgICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgxLjI1KS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIGhpZ2hsaWdodGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5oaWdobGlnaHRlZCxcbiAgICAgICAgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQsXG4gICAgICApLFxuICAgICAgZW1wdHk6IGVtcHR5Q29sb3IsXG4gICAgICBvdXRsaW5lRW1wdHlNaXg6IGlucHV0Q29sb3JzPy5sb2NhdGlvbkNpcmNsZXM/Lm91dGxpbmVFbXB0eU1peCA/PyAwLjQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZUNvbG9yc1JHQkEoXG4gIGNvbG9yczogQ29sb3JzIHwgRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IEJhc2VDb2xvcnNSR0JBIHtcbiAgY29uc3QgZGFya01vZGUgPSBjb2xvcnMgJiYgY29sb3JzLmRhcmtNb2RlID8gdHJ1ZSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGRhcmtNb2RlLFxuICAgIGxvY2F0aW9uQXJlYXM6IGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmxvY2F0aW9uQXJlYXMsXG4gICAgICBkYXJrTW9kZSxcbiAgICApLFxuICAgIG91dGxpbmVDb2xvcjogY29sb3JBc1JnYmEoXG4gICAgICAoY29sb3JzICYmIGNvbG9ycy5vdXRsaW5lQ29sb3IpIHx8IERFRkFVTFRfT1VUTElORV9DT0xPUixcbiAgICApLFxuICAgIGRpbW1lZE9wYWNpdHk6XG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmRpbW1lZE9wYWNpdHkgIT0gbnVsbFxuICAgICAgICA/IGNvbG9ycy5kaW1tZWRPcGFjaXR5XG4gICAgICAgIDogREVGQVVMVF9ESU1NRURfT1BBQ0lUWSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yc1JHQkEoY29sb3JzOiBDb2xvcnMgfCB1bmRlZmluZWQpOiBDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIC4uLmdldEZsb3dBbmRDaXJjbGVDb2xvcnMoXG4gICAgICBjb2xvcnMsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZDb2xvcnNSR0JBKFxuICBjb2xvcnM6IERpZmZDb2xvcnMgfCB1bmRlZmluZWQsXG4pOiBEaWZmQ29sb3JzUkdCQSB7XG4gIGNvbnN0IGJhc2VDb2xvcnNSR0JBID0gZ2V0QmFzZUNvbG9yc1JHQkEoY29sb3JzKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29sb3JzUkdCQSxcbiAgICBwb3NpdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMucG9zaXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgICBuZWdhdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubmVnYXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYmFBc1N0cmluZyhjb2xvcjogUkdCQSk6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgke2NvbG9yLmpvaW4oJywnKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pZHBvaW50KGE6IG51bWJlciwgYjogbnVtYmVyLCB6ZXJvVG9PbmU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhICsgKGIgLSBhKSAqIHplcm9Ub09uZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1peENvbG9yc1JHQkEoXG4gIGNvbG9yMTogUkdCQSxcbiAgY29sb3IyOiBSR0JBLFxuICB6ZXJvVG9PbmU6IG51bWJlcixcbik6IFJHQkEge1xuICByZXR1cm4gY29sb3IxLm1hcCgodiwgaSkgPT4gbWlkcG9pbnQodiwgY29sb3IyW2ldLCB6ZXJvVG9PbmUpKSBhcyBSR0JBO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRDb2xvcnM7XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
|
|
2
2
|
import type { ViewState } from './types';
|
|
3
|
-
export
|
|
4
|
-
export
|
|
3
|
+
export type LocationProperties = any;
|
|
4
|
+
export type GetViewStateOptions = {
|
|
5
5
|
pad?: number;
|
|
6
6
|
padding?: {
|
|
7
7
|
top: number;
|
|
@@ -16,7 +16,7 @@ export declare function getViewStateForFeatures(featureCollection: FeatureCollec
|
|
|
16
16
|
width: number;
|
|
17
17
|
height: number;
|
|
18
18
|
};
|
|
19
|
-
export declare function getViewStateForLocations(locations:
|
|
19
|
+
export declare function getViewStateForLocations<L>(locations: Iterable<L>, getLocationCoords: (location: L) => [number, number], size: [number, number], opts?: GetViewStateOptions): ViewState & {
|
|
20
20
|
width: number;
|
|
21
21
|
height: number;
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAErC,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,iBAAiB,EACb,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,CAAC,GACrD,kBAAkB,EACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAyB7C;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EACtB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EACpD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAsB7C"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
1
6
|
import { geoBounds } from 'd3-geo';
|
|
2
7
|
import { fitBounds } from '@math.gl/web-mercator';
|
|
3
8
|
export function getViewStateForFeatures(featureCollection, size, opts) {
|
|
@@ -11,23 +16,39 @@ export function getViewStateForFeatures(featureCollection, size, opts) {
|
|
|
11
16
|
]
|
|
12
17
|
: bounds;
|
|
13
18
|
const [width, height] = size;
|
|
14
|
-
return
|
|
19
|
+
return {
|
|
20
|
+
...fitBounds({
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
bounds: paddedBounds,
|
|
24
|
+
padding: opts?.padding,
|
|
25
|
+
// minZoom,
|
|
26
|
+
maxZoom,
|
|
27
|
+
}),
|
|
15
28
|
width,
|
|
16
29
|
height,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
maxZoom,
|
|
21
|
-
})), { width,
|
|
22
|
-
height, bearing: 0, pitch: 0 });
|
|
30
|
+
bearing: 0,
|
|
31
|
+
pitch: 0,
|
|
32
|
+
};
|
|
23
33
|
}
|
|
24
34
|
export function getViewStateForLocations(locations, getLocationCoords, size, opts) {
|
|
35
|
+
const asGeometry = (location) => ({
|
|
36
|
+
type: 'Point',
|
|
37
|
+
coordinates: getLocationCoords(location),
|
|
38
|
+
});
|
|
39
|
+
let geometries;
|
|
40
|
+
if (Array.isArray(locations)) {
|
|
41
|
+
geometries = locations.map(asGeometry);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
geometries = [];
|
|
45
|
+
for (const location of locations) {
|
|
46
|
+
geometries.push(asGeometry(location));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
25
49
|
return getViewStateForFeatures({
|
|
26
50
|
type: 'GeometryCollection',
|
|
27
|
-
geometries
|
|
28
|
-
type: 'Point',
|
|
29
|
-
coordinates: getLocationCoords(location),
|
|
30
|
-
})),
|
|
51
|
+
geometries,
|
|
31
52
|
}, size, opts);
|
|
32
53
|
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFrQmhELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsaUJBRXNCLEVBQ3RCLElBQXNCLEVBQ3RCLElBQTBCO0lBRTFCLE1BQU0sRUFBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxpQkFBd0IsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBeUMsR0FBRztRQUM1RCxDQUFDLENBQUM7WUFDRSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM3QztRQUNILENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDWCxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUM3QixPQUFPO1FBQ0wsR0FBRyxTQUFTLENBQUM7WUFDWCxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTztZQUN0QixXQUFXO1lBQ1gsT0FBTztTQUNSLENBQUM7UUFDRixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU8sRUFBRSxDQUFDO1FBQ1YsS0FBSyxFQUFFLENBQUM7S0FDVCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsU0FBc0IsRUFDdEIsaUJBQW9ELEVBQ3BELElBQXNCLEVBQ3RCLElBQTBCO0lBRTFCLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENBQUM7SUFDSCxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUM1QixVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN4QztTQUFNO1FBQ0wsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0tBQ0Y7SUFDRCxPQUFPLHVCQUF1QixDQUM1QjtRQUNFLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsVUFBVTtLQUNKLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7Z2VvQm91bmRzfSBmcm9tICdkMy1nZW8nO1xuaW1wb3J0IHtmaXRCb3VuZHN9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5pbXBvcnQgdHlwZSB7XG4gIEZlYXR1cmVDb2xsZWN0aW9uLFxuICBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gIEdlb21ldHJ5T2JqZWN0LFxufSBmcm9tICdnZW9qc29uJztcbmltcG9ydCB0eXBlIHtWaWV3U3RhdGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMb2NhdGlvblByb3BlcnRpZXMgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIEdldFZpZXdTdGF0ZU9wdGlvbnMgPSB7XG4gIHBhZD86IG51bWJlcjsgLy8gc2l6ZSByYXRpb1xuICBwYWRkaW5nPzoge3RvcDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyByaWdodDogbnVtYmVyfTtcbiAgdGlsZVNpemU/OiBudW1iZXI7XG4gIC8vIG1pblpvb20/OiBudW1iZXI7ICAvLyBub3Qgc3VwcG9ydGVkIGJ5IGZpdEJvdW5kc1xuICBtYXhab29tPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTdGF0ZUZvckZlYXR1cmVzKFxuICBmZWF0dXJlQ29sbGVjdGlvbjpcbiAgICB8IEZlYXR1cmVDb2xsZWN0aW9uPEdlb21ldHJ5T2JqZWN0LCBMb2NhdGlvblByb3BlcnRpZXM+XG4gICAgfCBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl0sXG4gIG9wdHM/OiBHZXRWaWV3U3RhdGVPcHRpb25zLFxuKTogVmlld1N0YXRlICYge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSB7XG4gIGNvbnN0IHtwYWQgPSAwLjA1LCBtYXhab29tID0gMTAwfSA9IG9wdHMgfHwge307XG4gIGNvbnN0IGJvdW5kcyA9IGdlb0JvdW5kcyhmZWF0dXJlQ29sbGVjdGlvbiBhcyBhbnkpO1xuICBjb25zdCBbW3gxLCB5MV0sIFt4MiwgeTJdXSA9IGJvdW5kcztcbiAgY29uc3QgcGFkZGVkQm91bmRzOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0gPSBwYWRcbiAgICA/IFtcbiAgICAgICAgW3gxIC0gcGFkICogKHgyIC0geDEpLCB5MSAtIHBhZCAqICh5MiAtIHkxKV0sXG4gICAgICAgIFt4MiArIHBhZCAqICh4MiAtIHgxKSwgeTIgKyBwYWQgKiAoeTIgLSB5MSldLFxuICAgICAgXVxuICAgIDogYm91bmRzO1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBzaXplO1xuICByZXR1cm4ge1xuICAgIC4uLmZpdEJvdW5kcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGJvdW5kczogcGFkZGVkQm91bmRzLFxuICAgICAgcGFkZGluZzogb3B0cz8ucGFkZGluZyxcbiAgICAgIC8vIG1pblpvb20sXG4gICAgICBtYXhab29tLFxuICAgIH0pLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiZWFyaW5nOiAwLFxuICAgIHBpdGNoOiAwLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zPEw+KFxuICBsb2NhdGlvbnM6IEl0ZXJhYmxlPEw+LFxuICBnZXRMb2NhdGlvbkNvb3JkczogKGxvY2F0aW9uOiBMKSA9PiBbbnVtYmVyLCBudW1iZXJdLFxuICBzaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICBvcHRzPzogR2V0Vmlld1N0YXRlT3B0aW9ucyxcbik6IFZpZXdTdGF0ZSAmIHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0ge1xuICBjb25zdCBhc0dlb21ldHJ5ID0gKGxvY2F0aW9uOiBMKSA9PiAoe1xuICAgIHR5cGU6ICdQb2ludCcsXG4gICAgY29vcmRpbmF0ZXM6IGdldExvY2F0aW9uQ29vcmRzKGxvY2F0aW9uKSxcbiAgfSk7XG4gIGxldCBnZW9tZXRyaWVzO1xuICBpZiAoQXJyYXkuaXNBcnJheShsb2NhdGlvbnMpKSB7XG4gICAgZ2VvbWV0cmllcyA9IGxvY2F0aW9ucy5tYXAoYXNHZW9tZXRyeSk7XG4gIH0gZWxzZSB7XG4gICAgZ2VvbWV0cmllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICBnZW9tZXRyaWVzLnB1c2goYXNHZW9tZXRyeShsb2NhdGlvbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ2V0Vmlld1N0YXRlRm9yRmVhdHVyZXMoXG4gICAge1xuICAgICAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICAgICBnZW9tZXRyaWVzLFxuICAgIH0gYXMgYW55LFxuICAgIHNpemUsXG4gICAgb3B0cyxcbiAgKTtcbn1cbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -2,13 +2,13 @@ export * from './types';
|
|
|
2
2
|
export * from './colors';
|
|
3
3
|
export * from './FlowmapState';
|
|
4
4
|
export * from './FlowmapSelectors';
|
|
5
|
+
export * from './selector-functions';
|
|
5
6
|
export * from './time';
|
|
6
7
|
export * from './getViewStateForLocations';
|
|
7
8
|
export * from './provider/FlowmapDataProvider';
|
|
9
|
+
export * from './cluster/cluster';
|
|
10
|
+
export * from './cluster/ClusterIndex';
|
|
8
11
|
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
9
12
|
export type { default as FlowmapDataProvider } from './provider/FlowmapDataProvider';
|
|
10
13
|
export { default as LocalFlowmapDataProvider } from './provider/LocalFlowmapDataProvider';
|
|
11
|
-
export { default as createWorkerDataProvider } from './provider/createWorkerDataProvider';
|
|
12
|
-
export { default as WorkerFlowmapDataProvider } from './provider/WorkerFlowmapDataProvider';
|
|
13
|
-
export * from './provider/WorkerFlowmapDataProvider';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AACvB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAC,OAAO,IAAI,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACjF,YAAY,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,qCAAqC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
1
6
|
export * from './types';
|
|
2
7
|
export * from './colors';
|
|
3
8
|
export * from './FlowmapState';
|
|
4
9
|
export * from './FlowmapSelectors';
|
|
10
|
+
export * from './selector-functions';
|
|
5
11
|
export * from './time';
|
|
6
12
|
export * from './getViewStateForLocations';
|
|
7
13
|
export * from './provider/FlowmapDataProvider';
|
|
14
|
+
export * from './cluster/cluster';
|
|
15
|
+
export * from './cluster/ClusterIndex';
|
|
8
16
|
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
9
17
|
export { default as LocalFlowmapDataProvider } from './provider/LocalFlowmapDataProvider';
|
|
10
|
-
|
|
11
|
-
export { default as WorkerFlowmapDataProvider } from './provider/WorkerFlowmapDataProvider';
|
|
12
|
-
export * from './provider/WorkerFlowmapDataProvider';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFakYsT0FBTyxFQUFDLE9BQU8sSUFBSSx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxPQUFPLElBQUksd0JBQXdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDMUYsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU2VsZWN0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyL0Zsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnN9IGZyb20gJy4vRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyc7XG5leHBvcnQgdHlwZSB7ZGVmYXVsdCBhcyBGbG93bWFwRGF0YVByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVyL0Zsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIExvY2FsRmxvd21hcERhdGFQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlci9Mb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZVdvcmtlckRhdGFQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlci9jcmVhdGVXb3JrZXJEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIFdvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXIvV29ya2VyRmxvd21hcERhdGFQcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyL1dvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXInO1xuIl19
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUFDLE9BQU8sSUFBSSx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRWpGLE9BQU8sRUFBQyxPQUFPLElBQUksd0JBQXdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU2VsZWN0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0b3ItZnVuY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyL0Zsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyL2NsdXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyL0NsdXN0ZXJJbmRleCc7XG5leHBvcnQge2RlZmF1bHQgYXMgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29yc30gZnJvbSAnLi9GbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzJztcbmV4cG9ydCB0eXBlIHtkZWZhdWx0IGFzIEZsb3dtYXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXIvRmxvd21hcERhdGFQcm92aWRlcic7XG5leHBvcnQge2RlZmF1bHQgYXMgTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVyL0xvY2FsRmxvd21hcERhdGFQcm92aWRlcic7XG4iXX0=
|
|
@@ -6,10 +6,15 @@ export default interface FlowmapDataProvider<L, F> {
|
|
|
6
6
|
setFlowmapState(flowmapState: FlowmapState): Promise<void>;
|
|
7
7
|
getViewportForLocations(dims: [number, number]): Promise<ViewportProps | undefined>;
|
|
8
8
|
getFlowByIndex(index: number): Promise<F | AggregateFlow | undefined>;
|
|
9
|
-
getLocationById(id: string): Promise<L | Cluster | undefined>;
|
|
9
|
+
getLocationById(id: string | number): Promise<L | Cluster | undefined>;
|
|
10
10
|
getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined>;
|
|
11
|
-
getTotalsForLocation(id: string): Promise<LocationTotals | undefined>;
|
|
11
|
+
getTotalsForLocation(id: string | number): Promise<LocationTotals | undefined>;
|
|
12
12
|
getLayersData(): Promise<LayersData | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* This is to give the data provider control over when/how often layersData
|
|
15
|
+
* is updated which leads to the flowmap being redrawn.
|
|
16
|
+
*/
|
|
17
|
+
updateLayersData(setLayersData: (layersData: LayersData | undefined) => void, changeFlags: Record<string, boolean>): Promise<void>;
|
|
13
18
|
}
|
|
14
19
|
export declare function isFlowmapData<L, F>(data: Record<string, any>): data is FlowmapData<L, F>;
|
|
15
20
|
export declare function isFlowmapDataProvider<L, F>(dataProvider: Record<string, any>): dataProvider is FlowmapDataProvider<L, F>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAqB,cAAc,EAAC,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC;IAC/C,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1D,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI3D,uBAAuB,CACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;IAEtE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEvE,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAClB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAQvC,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAEjD;;;OAGG;IACH,gBAAgB,CACd,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,EAC3D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAO3B;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,YAAY,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAU3C"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
1
6
|
export function isFlowmapData(data) {
|
|
2
|
-
return (data &&
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
return (data && data.locations && data.flows
|
|
8
|
+
// TODO: test that they are iterable
|
|
9
|
+
// Array.isArray(data.locations) &&
|
|
10
|
+
// Array.isArray(data.flows)
|
|
11
|
+
);
|
|
7
12
|
}
|
|
8
13
|
export function isFlowmapDataProvider(dataProvider) {
|
|
9
14
|
return (dataProvider &&
|
|
@@ -14,4 +19,4 @@ export function isFlowmapDataProvider(dataProvider) {
|
|
|
14
19
|
typeof dataProvider.getLocationByIndex === 'function' &&
|
|
15
20
|
typeof dataProvider.getLayersData === 'function');
|
|
16
21
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFxREgsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsSUFBeUI7SUFFekIsT0FBTyxDQUNMLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLO0lBQ3BDLG9DQUFvQztJQUNwQyxtQ0FBbUM7SUFDbkMsNEJBQTRCO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxZQUFpQztJQUVqQyxPQUFPLENBQ0wsWUFBWTtRQUNaLE9BQU8sWUFBWSxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQ2xELE9BQU8sWUFBWSxDQUFDLHVCQUF1QixLQUFLLFVBQVU7UUFDMUQsT0FBTyxZQUFZLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFDakQsT0FBTyxZQUFZLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFDbEQsT0FBTyxZQUFZLENBQUMsa0JBQWtCLEtBQUssVUFBVTtRQUNyRCxPQUFPLFlBQVksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIEZsb3dtYXAuZ2wgY29udHJpYnV0b3JzXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBUZXJhbHl0aWNzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7QWdncmVnYXRlRmxvdywgQ2x1c3RlciwgTG9jYXRpb25BY2Nlc3NvcnMsIExvY2F0aW9uVG90YWxzfSBmcm9tICcuLic7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi4vRmxvd21hcFN0YXRlJztcbmltcG9ydCB7XG4gIENsdXN0ZXJOb2RlLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIExheWVyc0RhdGEsXG4gIFZpZXdwb3J0UHJvcHMsXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJmYWNlIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICBzZXRBY2Nlc3NvcnMoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPik6IHZvaWQ7XG5cbiAgc2V0Rmxvd21hcFN0YXRlKGZsb3dtYXBTdGF0ZTogRmxvd21hcFN0YXRlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBjbGVhckRhdGEoKTogdm9pZDtcblxuICBnZXRWaWV3cG9ydEZvckxvY2F0aW9ucyhcbiAgICBkaW1zOiBbbnVtYmVyLCBudW1iZXJdLFxuICApOiBQcm9taXNlPFZpZXdwb3J0UHJvcHMgfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldEZsb3dUb3RhbHMoKTogUHJvbWlzZTxGbG93VG90YWxzPjtcblxuICBnZXRGbG93QnlJbmRleChpbmRleDogbnVtYmVyKTogUHJvbWlzZTxGIHwgQWdncmVnYXRlRmxvdyB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0TG9jYXRpb25CeUlkKGlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPEwgfCBDbHVzdGVyIHwgdW5kZWZpbmVkPjtcblxuICBnZXRMb2NhdGlvbkJ5SW5kZXgoaWR4OiBudW1iZXIpOiBQcm9taXNlPEwgfCBDbHVzdGVyTm9kZSB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0VG90YWxzRm9yTG9jYXRpb24oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgKTogUHJvbWlzZTxMb2NhdGlvblRvdGFscyB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0TG9jYXRpb25zSW5CYm94KFxuICAvLyAgIGJib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAvLyApOiBQcm9taXNlPEFycmF5PEZsb3dMb2NhdGlvbiB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0TG9jYXRpb25zRm9yU2VhcmNoQm94KCk6IFByb21pc2U8KEZsb3dMb2NhdGlvbiB8IENsdXN0ZXJOb2RlKVtdIHwgdW5kZWZpbmVkPjtcblxuICBnZXRMYXllcnNEYXRhKCk6IFByb21pc2U8TGF5ZXJzRGF0YSB8IHVuZGVmaW5lZD47XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdG8gZ2l2ZSB0aGUgZGF0YSBwcm92aWRlciBjb250cm9sIG92ZXIgd2hlbi9ob3cgb2Z0ZW4gbGF5ZXJzRGF0YVxuICAgKiBpcyB1cGRhdGVkIHdoaWNoIGxlYWRzIHRvIHRoZSBmbG93bWFwIGJlaW5nIHJlZHJhd24uXG4gICAqL1xuICB1cGRhdGVMYXllcnNEYXRhKFxuICAgIHNldExheWVyc0RhdGE6IChsYXllcnNEYXRhOiBMYXllcnNEYXRhIHwgdW5kZWZpbmVkKSA9PiB2b2lkLFxuICAgIGNoYW5nZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbiAgKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd21hcERhdGE8TCwgRj4oXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pOiBkYXRhIGlzIEZsb3dtYXBEYXRhPEwsIEY+IHtcbiAgcmV0dXJuIChcbiAgICBkYXRhICYmIGRhdGEubG9jYXRpb25zICYmIGRhdGEuZmxvd3NcbiAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhleSBhcmUgaXRlcmFibGVcbiAgICAvLyBBcnJheS5pc0FycmF5KGRhdGEubG9jYXRpb25zKSAmJlxuICAgIC8vIEFycmF5LmlzQXJyYXkoZGF0YS5mbG93cylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPihcbiAgZGF0YVByb3ZpZGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZGF0YVByb3ZpZGVyIGlzIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFQcm92aWRlciAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcFN0YXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRWaWV3cG9ydEZvckxvY2F0aW9ucyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXggPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRMYXllcnNEYXRhID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXX0=
|
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import type FlowmapDataProvider from './FlowmapDataProvider';
|
|
2
2
|
import type { Cluster, ClusterNode, FlowmapData, FlowmapDataAccessors, LayersData, LocationTotals, ViewportProps, AggregateFlow } from '../types';
|
|
3
3
|
import { FlowmapState } from '../FlowmapState';
|
|
4
|
+
import FlowmapSelectors from '../FlowmapSelectors';
|
|
4
5
|
import { GetViewStateOptions } from '../getViewStateForLocations';
|
|
5
|
-
|
|
6
|
+
import { ClusterIndex } from '../cluster/ClusterIndex';
|
|
7
|
+
export default class LocalFlowmapDataProvider<L extends Record<string, any>, F extends Record<string, any>> implements FlowmapDataProvider<L, F> {
|
|
6
8
|
private selectors;
|
|
7
9
|
private flowmapData;
|
|
8
10
|
private flowmapState;
|
|
9
11
|
constructor(accessors: FlowmapDataAccessors<L, F>);
|
|
10
12
|
setAccessors(accessors: FlowmapDataAccessors<L, F>): void;
|
|
11
|
-
setFlowmapData(flowmapData: FlowmapData<L, F>):
|
|
13
|
+
setFlowmapData(flowmapData: FlowmapData<L, F>): void;
|
|
14
|
+
getSelectors(): FlowmapSelectors<L, F>;
|
|
15
|
+
getFlowmapData(): FlowmapData<L, F> | undefined;
|
|
12
16
|
setFlowmapState(flowmapState: FlowmapState): Promise<void>;
|
|
17
|
+
getFlowmapState(): FlowmapState | undefined;
|
|
13
18
|
getFlowByIndex(idx: number): Promise<F | AggregateFlow | undefined>;
|
|
14
19
|
getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined>;
|
|
15
20
|
getLayersData(): Promise<LayersData | undefined>;
|
|
16
|
-
getLocationById(id: string): Promise<L | Cluster | undefined>;
|
|
17
|
-
getTotalsForLocation(id: string): Promise<LocationTotals | undefined>;
|
|
21
|
+
getLocationById(id: string | number): Promise<L | Cluster | undefined>;
|
|
22
|
+
getTotalsForLocation(id: string | number): Promise<LocationTotals | undefined>;
|
|
18
23
|
getViewportForLocations(dims: [number, number], opts?: GetViewStateOptions): Promise<ViewportProps | undefined>;
|
|
24
|
+
updateLayersData(setLayersData: (layersData: LayersData | undefined) => void): Promise<void>;
|
|
25
|
+
getClusterZoom(): number | undefined;
|
|
26
|
+
getClusterIndex(): ClusterIndex<F> | undefined;
|
|
27
|
+
getLocationsById(): Map<string | number, L> | undefined;
|
|
28
|
+
getLocationTotals(): Map<string | number, LocationTotals> | undefined;
|
|
29
|
+
getFlowsForFlowmapLayer(): Array<F | AggregateFlow> | undefined;
|
|
19
30
|
}
|
|
20
31
|
//# sourceMappingURL=LocalFlowmapDataProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalFlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/LocalFlowmapDataProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalFlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/LocalFlowmapDataProvider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,mBAAmB,EAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,wBAAwB,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAC7B,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,YAAY,CAA2B;gBAEnC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAOjD,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIlD,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAIpD,YAAY,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;IAItC,cAAc,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAIzC,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,eAAe,IAAI,YAAY,GAAG,SAAS;IAIrC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAYnE,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;IAWrE,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAOhD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAqBtE,oBAAoB,CACxB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAShC,uBAAuB,CAC3B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAgB/B,gBAAgB,CACpB,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI;IAK7D,cAAc,IAAI,MAAM,GAAG,SAAS;IAMpC,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAM9C,gBAAgB,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS;IAMvD,iBAAiB,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,GAAG,SAAS;IAMrE,uBAAuB,IAAI,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS;CAQhE"}
|