@flowmap.gl/data 8.0.0-alpha.2 → 8.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{FlowMapAggregateAccessors.d.ts → FlowmapAggregateAccessors.d.ts} +6 -6
- package/dist/{FlowMapAggregateAccessors.d.ts.map → FlowmapAggregateAccessors.d.ts.map} +1 -1
- package/dist/{FlowMapAggregateAccessors.js → FlowmapAggregateAccessors.js} +3 -3
- package/dist/{FlowMapSelectors.d.ts → FlowmapSelectors.d.ts} +47 -45
- package/dist/FlowmapSelectors.d.ts.map +1 -0
- package/dist/FlowmapSelectors.js +869 -0
- package/dist/{FlowMapState.d.ts → FlowmapState.d.ts} +5 -2
- package/dist/FlowmapState.d.ts.map +1 -0
- package/dist/FlowmapState.js +2 -0
- package/dist/colors.d.ts +6 -6
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +42 -17
- package/dist/getViewStateForLocations.d.ts +12 -10
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +4 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/provider/FlowmapDataProvider.d.ts +16 -0
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/FlowmapDataProvider.js +17 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts +20 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/LocalFlowmapDataProvider.js +95 -0
- package/dist/provider/WorkerFlowmapDataProvider.d.ts +42 -0
- package/dist/provider/WorkerFlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/WorkerFlowmapDataProvider.js +82 -0
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts +2 -0
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts.map +1 -0
- package/dist/provider/WorkerFlowmapDataProviderWorker.js +4 -0
- package/dist/provider/createWorkerDataProvider.d.ts +3 -0
- package/dist/provider/createWorkerDataProvider.d.ts.map +1 -0
- package/dist/provider/createWorkerDataProvider.js +21 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/util.d.ts +0 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -4
- package/package.json +7 -2
- package/src/{FlowMapAggregateAccessors.ts → FlowmapAggregateAccessors.ts} +6 -6
- package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +154 -113
- package/src/{FlowMapState.ts → FlowmapState.ts} +4 -1
- package/src/colors.ts +50 -16
- package/src/getViewStateForLocations.ts +20 -16
- package/src/index.ts +9 -6
- package/src/provider/{FlowMapDataProvider.ts → FlowmapDataProvider.ts} +14 -12
- package/src/provider/LocalFlowmapDataProvider.ts +119 -0
- package/src/provider/WorkerFlowmapDataProvider.ts +121 -0
- package/src/provider/WorkerFlowmapDataProviderWorker.ts +4 -0
- package/src/provider/createWorkerDataProvider.ts +18 -0
- package/src/types.ts +2 -2
- package/src/util.ts +0 -4
- package/dist/FlowMapSelectors.d.ts.map +0 -1
- package/dist/FlowMapSelectors.js +0 -834
- package/dist/FlowMapState.d.ts.map +0 -1
- package/dist/FlowMapState.js +0 -2
- package/dist/provider/FlowMapDataProvider.d.ts +0 -16
- package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/FlowMapDataProvider.js +0 -17
- package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
- package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/LocalFlowMapDataProvider.js +0 -87
- package/src/provider/LocalFlowMapDataProvider.ts +0 -105
|
@@ -7,6 +7,7 @@ export interface FilterState {
|
|
|
7
7
|
export interface SettingsState {
|
|
8
8
|
animationEnabled: boolean;
|
|
9
9
|
fadeEnabled: boolean;
|
|
10
|
+
fadeOpacityEnabled: boolean;
|
|
10
11
|
locationTotalsEnabled: boolean;
|
|
11
12
|
adaptiveScalesEnabled: boolean;
|
|
12
13
|
clusteringEnabled: boolean;
|
|
@@ -15,10 +16,12 @@ export interface SettingsState {
|
|
|
15
16
|
darkMode: boolean;
|
|
16
17
|
fadeAmount: number;
|
|
17
18
|
colorScheme: string | undefined;
|
|
19
|
+
highlightColor: string;
|
|
20
|
+
maxTopFlowsDisplayNum: number;
|
|
18
21
|
}
|
|
19
|
-
export interface
|
|
22
|
+
export interface FlowmapState {
|
|
20
23
|
filterState: FilterState;
|
|
21
24
|
settingsState: SettingsState;
|
|
22
25
|
viewport: ViewportProps;
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=
|
|
27
|
+
//# sourceMappingURL=FlowmapState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowmapState.d.ts","sourceRoot":"","sources":["../src/FlowmapState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;CACzB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBTdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbkZpbHRlck1vZGUsIFZpZXdwb3J0UHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclN0YXRlIHtcbiAgc2VsZWN0ZWRMb2NhdGlvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZFRpbWVSYW5nZTogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkO1xuICBsb2NhdGlvbkZpbHRlck1vZGU6IExvY2F0aW9uRmlsdGVyTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc1N0YXRlIHtcbiAgYW5pbWF0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgZmFkZUVuYWJsZWQ6IGJvb2xlYW47XG4gIGZhZGVPcGFjaXR5RW5hYmxlZDogYm9vbGVhbjtcbiAgbG9jYXRpb25Ub3RhbHNFbmFibGVkOiBib29sZWFuO1xuICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdFbmFibGVkOiBib29sZWFuO1xuICBjbHVzdGVyaW5nQXV0bzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0xldmVsPzogbnVtYmVyO1xuICBkYXJrTW9kZTogYm9vbGVhbjtcbiAgZmFkZUFtb3VudDogbnVtYmVyO1xuICBjb2xvclNjaGVtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoaWdobGlnaHRDb2xvcjogc3RyaW5nO1xuICBtYXhUb3BGbG93c0Rpc3BsYXlOdW06IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93bWFwU3RhdGUge1xuICBmaWx0ZXJTdGF0ZTogRmlsdGVyU3RhdGU7XG4gIHNldHRpbmdzU3RhdGU6IFNldHRpbmdzU3RhdGU7XG4gIHZpZXdwb3J0OiBWaWV3cG9ydFByb3BzO1xufVxuIl19
|
package/dist/colors.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SettingsState } from './
|
|
1
|
+
import { SettingsState } from './FlowmapState';
|
|
2
2
|
export declare type ColorScale = (value: number) => RGBA;
|
|
3
3
|
export declare type RGBA = [number, number, number, number];
|
|
4
4
|
export declare function opacityFloatToInteger(opacity: number): number;
|
|
@@ -7,15 +7,15 @@ export declare function colorAsRgba(color: string): RGBA;
|
|
|
7
7
|
export declare enum ColorScheme {
|
|
8
8
|
primary = "#162d3c"
|
|
9
9
|
}
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const GRAYISH: string[];
|
|
11
11
|
export declare const schemeTeal: string[];
|
|
12
12
|
export declare const DEFAULT_COLOR_SCHEME: string[];
|
|
13
13
|
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
|
|
18
|
-
export declare function getColors(diffMode: boolean, schemeKey: string | undefined, darkMode: boolean, fadeEnabled: boolean, fadeAmount: number, animate: boolean): Colors | DiffColors;
|
|
17
|
+
export declare function getFlowmapColors(settingsState: SettingsState): Colors | DiffColors;
|
|
18
|
+
export declare function getColors(diffMode: boolean, schemeKey: 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];
|
|
21
21
|
export declare function isDiffColors(colors: DiffColors | Colors): colors is DiffColors;
|
|
@@ -30,7 +30,7 @@ export interface LocationCircleColors {
|
|
|
30
30
|
incoming?: string;
|
|
31
31
|
highlighted?: string;
|
|
32
32
|
empty?: string;
|
|
33
|
-
|
|
33
|
+
outlineEmptyMix?: number;
|
|
34
34
|
}
|
|
35
35
|
export interface LocationAreaColors {
|
|
36
36
|
outline?: string;
|
|
@@ -67,7 +67,7 @@ export interface LocationCircleColorsRGBA {
|
|
|
67
67
|
incoming: RGBA;
|
|
68
68
|
highlighted: RGBA;
|
|
69
69
|
empty: RGBA;
|
|
70
|
-
|
|
70
|
+
outlineEmptyMix: number;
|
|
71
71
|
}
|
|
72
72
|
export interface LocationAreaColorsRGBA {
|
|
73
73
|
outline: RGBA;
|
package/dist/colors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAW7C,oBAAY,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACjD,oBAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAIpD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAa/C;AAkBD,oBAAY,WAAW;IACrB,OAAO,YAAY;CACpB;AASD,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}
|
package/dist/colors.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
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
2
|
import { range } from 'd3-array';
|
|
3
3
|
import { scalePow, scaleSequential, scaleSequentialPow } from 'd3-scale';
|
|
4
|
-
import { interpolateRgbBasis } from 'd3-interpolate';
|
|
5
|
-
import { color as d3color, hcl } from 'd3-color';
|
|
4
|
+
import { interpolateBasis, interpolateRgbBasis } from 'd3-interpolate';
|
|
5
|
+
import { color as d3color, hcl, rgb as colorRgb } from 'd3-color';
|
|
6
6
|
const DEFAULT_OUTLINE_COLOR = '#fff';
|
|
7
7
|
const DEFAULT_DIMMED_OPACITY = 0.4;
|
|
8
8
|
const DEFAULT_FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
|
|
@@ -56,7 +56,7 @@ const getColorSteps = (interpolate) => range(0, SCALE_NUM_STEPS + 1)
|
|
|
56
56
|
.map((i) => interpolate(i / SCALE_NUM_STEPS))
|
|
57
57
|
.reverse();
|
|
58
58
|
const FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
|
|
59
|
-
export const
|
|
59
|
+
export const GRAYISH = [FLOW_MIN_COLOR, ColorScheme.primary];
|
|
60
60
|
const schemeBluYl = [
|
|
61
61
|
'#f7feae',
|
|
62
62
|
'#b7e6a5',
|
|
@@ -87,7 +87,6 @@ export const schemeTeal = [
|
|
|
87
87
|
export const DEFAULT_COLOR_SCHEME = schemeTeal;
|
|
88
88
|
export const COLOR_SCHEMES = {
|
|
89
89
|
Blues: asScheme(schemeBlues),
|
|
90
|
-
BluesPale: BLUES_PALE,
|
|
91
90
|
BluGrn: [
|
|
92
91
|
'#c4e6c3',
|
|
93
92
|
'#96d2a4',
|
|
@@ -139,6 +138,7 @@ export const COLOR_SCHEMES = {
|
|
|
139
138
|
],
|
|
140
139
|
Emrld: schemeEmrld,
|
|
141
140
|
GnBu: asScheme(schemeGnBu),
|
|
141
|
+
Grayish: GRAYISH,
|
|
142
142
|
Greens: asScheme(schemeGreens),
|
|
143
143
|
Greys: asScheme(schemeGreys),
|
|
144
144
|
Inferno: getColorSteps(interpolateInferno),
|
|
@@ -279,11 +279,11 @@ const diffColors = {
|
|
|
279
279
|
},
|
|
280
280
|
outlineColor: 'rgb(230,233,237)',
|
|
281
281
|
};
|
|
282
|
-
export function
|
|
282
|
+
export function getFlowmapColors(settingsState) {
|
|
283
283
|
return getColors(false, // TODO: diffMode
|
|
284
|
-
settingsState.colorScheme, settingsState.darkMode, settingsState.fadeEnabled, settingsState.fadeAmount, settingsState.animationEnabled);
|
|
284
|
+
settingsState.colorScheme, settingsState.darkMode, settingsState.fadeEnabled, settingsState.fadeOpacityEnabled, settingsState.fadeAmount, settingsState.animationEnabled);
|
|
285
285
|
}
|
|
286
|
-
export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeAmount, animate) {
|
|
286
|
+
export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeOpacityEnabled, fadeAmount, animate) {
|
|
287
287
|
if (diffMode) {
|
|
288
288
|
return diffColors;
|
|
289
289
|
}
|
|
@@ -319,14 +319,15 @@ export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeAmount
|
|
|
319
319
|
.range([0, (2 * fadeAmount) / 100]);
|
|
320
320
|
scheme = indices.map((c, i) => {
|
|
321
321
|
const color = colorScale(i);
|
|
322
|
-
const
|
|
323
|
-
if (color == null ||
|
|
322
|
+
const a = amount(i);
|
|
323
|
+
if (color == null || a == null)
|
|
324
324
|
return '#000';
|
|
325
325
|
const col = hcl(color);
|
|
326
|
-
col.l = darkMode
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
326
|
+
col.l = darkMode ? col.l - col.l * a : col.l + (100 - col.l) * a;
|
|
327
|
+
col.c = col.c - col.c * (a / 4);
|
|
328
|
+
if (fadeOpacityEnabled) {
|
|
329
|
+
col.opacity = col.opacity * (1.0 - a);
|
|
330
|
+
}
|
|
330
331
|
return col.toString();
|
|
331
332
|
});
|
|
332
333
|
}
|
|
@@ -342,8 +343,32 @@ export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeAmount
|
|
|
342
343
|
outlineColor: darkMode ? '#000' : 'rgba(255, 255, 255, 0.5)',
|
|
343
344
|
};
|
|
344
345
|
}
|
|
346
|
+
function interpolateRgbaBasis(colors) {
|
|
347
|
+
const spline = interpolateBasis;
|
|
348
|
+
const n = colors.length;
|
|
349
|
+
let r = new Array(n), g = new Array(n), b = new Array(n), opacity = new Array(n), i, color;
|
|
350
|
+
for (i = 0; i < n; ++i) {
|
|
351
|
+
color = colorRgb(colors[i]);
|
|
352
|
+
r[i] = color.r || 0;
|
|
353
|
+
g[i] = color.g || 0;
|
|
354
|
+
b[i] = color.b || 0;
|
|
355
|
+
opacity[i] = color.opacity || 0;
|
|
356
|
+
}
|
|
357
|
+
r = spline(r);
|
|
358
|
+
g = spline(g);
|
|
359
|
+
b = spline(b);
|
|
360
|
+
opacity = spline(opacity);
|
|
361
|
+
// color.opacity = 1;
|
|
362
|
+
return function (t) {
|
|
363
|
+
color.r = r(t);
|
|
364
|
+
color.g = g(t);
|
|
365
|
+
color.b = b(t);
|
|
366
|
+
color.opacity = opacity(t);
|
|
367
|
+
return color + '';
|
|
368
|
+
};
|
|
369
|
+
}
|
|
345
370
|
export function createFlowColorScale(domain, scheme, animate) {
|
|
346
|
-
const scale = scaleSequentialPow(
|
|
371
|
+
const scale = scaleSequentialPow(interpolateRgbaBasis(scheme))
|
|
347
372
|
// @ts-ignore
|
|
348
373
|
.exponent(animate ? 1 / 2 : 1 / 3)
|
|
349
374
|
.domain(domain);
|
|
@@ -379,7 +404,7 @@ function getLocationAreaColorsRGBA(colors, darkMode) {
|
|
|
379
404
|
};
|
|
380
405
|
}
|
|
381
406
|
function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
382
|
-
var _a;
|
|
407
|
+
var _a, _b, _c;
|
|
383
408
|
const flowColorScheme = (inputColors && inputColors.flows && inputColors.flows.scheme) ||
|
|
384
409
|
defaultFlowColorScheme;
|
|
385
410
|
const maxFlowColorHcl = hcl(flowColorScheme[flowColorScheme.length - 1]);
|
|
@@ -405,7 +430,7 @@ function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
|
405
430
|
inputColors.locationCircles &&
|
|
406
431
|
inputColors.locationCircles.highlighted, flowColorHighlighted),
|
|
407
432
|
empty: emptyColor,
|
|
408
|
-
|
|
433
|
+
outlineEmptyMix: (_c = (_b = inputColors === null || inputColors === void 0 ? void 0 : inputColors.locationCircles) === null || _b === void 0 ? void 0 : _b.outlineEmptyMix) !== null && _c !== void 0 ? _c : 0.4,
|
|
409
434
|
},
|
|
410
435
|
};
|
|
411
436
|
}
|
|
@@ -438,4 +463,4 @@ export function mixColorsRGBA(color1, color2, zeroToOne) {
|
|
|
438
463
|
return color1.map((v, i) => midpoint(v, color2[i], zeroToOne));
|
|
439
464
|
}
|
|
440
465
|
export default getColors;
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUcvQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUNyQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLHVCQUF1QixDQUFDO0FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0RSxNQUFNLDJCQUEyQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELE1BQU0sa0NBQWtDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRSxNQUFNLGtDQUFrQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFLL0UsTUFBTSxtQkFBbUIsR0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXZELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFlO0lBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsT0FBZSxFQUFFLE9BQWU7SUFDekQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sdUJBQXVCLE9BQU8sR0FBRyxDQUFDO0tBQzFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFhO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLG1CQUFtQixDQUFDO0tBQzVCO0lBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU87UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0QixxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0tBQ25DLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLEtBQXlCLEVBQ3pCLFlBQTJCO0lBRTNCLElBQUksS0FBSyxFQUFFO1FBQ1QsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0I7SUFDRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNwQyxPQUFPLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNsQztJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQTRDLEVBQUUsRUFBRSxDQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQWEsQ0FBQztBQUV4QyxNQUFNLENBQU4sSUFBWSxXQUVYO0FBRkQsV0FBWSxXQUFXO0lBQ3JCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFGVyxXQUFXLEtBQVgsV0FBVyxRQUV0QjtBQUVELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQWtDLEVBQUUsRUFBRSxDQUMzRCxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsR0FBRyxDQUFDLENBQUM7S0FDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0tBQzVDLE9BQU8sRUFBRSxDQUFDO0FBRWYsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxNQUFNLFdBQVcsR0FBRztJQUNsQixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0NBQ1YsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBOEI7SUFDdEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDNUIsU0FBUyxFQUFFLFVBQVU7SUFDckIsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsS0FBSyxFQUFFLFdBQVc7SUFDbEIsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsSUFBSSxFQUFFO1FBQ0osU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUM7SUFDcEMsUUFBUSxFQUFFO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsS0FBSyxFQUFFLFdBQVc7SUFDbEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDOUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDNUIsT0FBTyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztJQUMxQyxPQUFPLEVBQUU7UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxLQUFLLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLElBQUksRUFBRTtRQUNKLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELE9BQU8sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFCLEtBQUssRUFBRTtRQUNMLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELEtBQUssRUFBRTtRQUNMLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7S0FDVjtJQUNELE1BQU0sRUFBRSxhQUFhLENBQUMsaUJBQWlCLENBQUM7SUFDeEMsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDOUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsSUFBSSxFQUFFO1FBQ0osU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDaEMsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsS0FBSyxFQUFFO1FBQ0wsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUIsTUFBTSxFQUFFO1FBQ04sU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsSUFBSSxFQUFFLFVBQVU7SUFDaEIsT0FBTyxFQUFFO1FBQ1AsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNWO0lBQ0QsT0FBTyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztJQUMxQyxJQUFJLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUMxQixNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUM5QixNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUM5QixNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQztDQUMvQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUU1RCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDaEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFlO0lBQzdCLFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7U0FDeEM7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7U0FDeEM7S0FDRjtJQUNELGFBQWEsRUFBRTtRQUNiLE9BQU8sRUFBRSxzQkFBc0I7UUFDL0IsTUFBTSxFQUFFLHVCQUF1QjtLQUNoQztJQUNELFlBQVksRUFBRSxrQkFBa0I7Q0FDakMsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsYUFBNEI7SUFFNUIsT0FBTyxTQUFTLENBQ2QsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixhQUFhLENBQUMsV0FBVyxFQUN6QixhQUFhLENBQUMsUUFBUSxFQUN0QixhQUFhLENBQUMsV0FBVyxFQUN6QixhQUFhLENBQUMsVUFBVSxFQUN4QixhQUFhLENBQUMsZ0JBQWdCLENBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsUUFBaUIsRUFDakIsU0FBNkIsRUFDN0IsUUFBaUIsRUFDakIsV0FBb0IsRUFDcEIsVUFBa0IsRUFDbEIsT0FBZ0I7SUFFaEIsSUFBSSxRQUFRLEVBQUU7UUFDWixPQUFPLFVBQVUsQ0FBQztLQUNuQjtJQUVELElBQUksTUFBTSxHQUFHLENBQUMsU0FBUyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO0lBRTdFLElBQUksUUFBUSxFQUFFO1FBQ1osTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNuQztJQUNELGVBQWU7SUFDZixzQkFBc0I7SUFDdEI7UUFDRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNyRSxDQUFDO1lBQ0QsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtZQUNwQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDTCxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUU7Z0JBQ3ZCLGlDQUFpQztnQkFDakMsZ0NBQWdDO2dCQUNoQyw4QkFBOEI7Z0JBQzlCLG1CQUFtQjtpQkFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQztpQkFDYixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsNENBQTRDO2dCQUM1Qyw0Q0FBNEM7Z0JBQzVDLHFFQUFxRTtnQkFDckUsbUVBQW1FO2dCQUNuRSxrQ0FBa0M7aUJBQ2pDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXRDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDUCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJO29CQUFFLE9BQU8sTUFBTSxDQUFDO2dCQUNsRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUTtvQkFDZCxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUs7b0JBQ3ZCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBR0YsQ0FBQztTQUNIO0tBQ0Y7SUFFRCxPQUFPO1FBQ0wsUUFBUTtRQUNSLEtBQUssRUFBRTtZQUNMLE1BQU07U0FDUDtRQUNELGVBQWUsRUFBRTtZQUNmLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNyQztRQUNELFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsMEJBQTBCO0tBQzdELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUF3QixFQUN4QixNQUFnQixFQUNoQixPQUE0QjtJQUU1QixNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxhQUFhO1NBQ1osUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEIsT0FBTyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE1BQW1DLEVBQ25DLGVBQTZDLEVBQzdDLE9BQTRCO0lBRTVCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUNuQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFDakIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUM1QixPQUFPLENBQ1IsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUNuQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFDakIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUM1QixPQUFPLENBQ1IsQ0FBQztRQUVGLE9BQU8sQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDM0IsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDOUQ7SUFFRCxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FDaEMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxFQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDbkIsT0FBTyxDQUNSLENBQUM7SUFDRixPQUFPLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUEyQjtJQUUzQixPQUFRLE1BQXFCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFtQztJQUVuQyxPQUFRLE1BQXlCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FDaEMsTUFBc0MsRUFDdEMsUUFBaUI7SUFFakIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDJCQUEyQixDQUFDO0lBQzdFLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixTQUFTLEVBQUUsYUFBYSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDO1FBQ3pFLFdBQVcsRUFBRSxhQUFhLENBQ3hCLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUM1QixVQUFVLENBQ1IsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDOUQsR0FBRyxDQUNKLENBQ0Y7UUFDRCxRQUFRLEVBQUUsYUFBYSxDQUNyQixNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFDekIsVUFBVSxDQUNSLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzlELEdBQUcsQ0FDSixDQUNGO1FBQ0QsT0FBTyxFQUFFLGFBQWEsQ0FDcEIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQ3hCLFdBQVcsQ0FDVCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUMvRCxDQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUE2RkQsU0FBUyxzQkFBc0IsQ0FDN0IsV0FBNEMsRUFDNUMsc0JBQWdDLEVBQ2hDLFFBQWlCOztJQUVqQixNQUFNLGVBQWUsR0FDbkIsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5RCxzQkFBc0IsQ0FBQztJQUN6QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FDeEMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ2pFLFdBQVcsQ0FDVCxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNsRSxDQUNGLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQzlCLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLGVBQWUsMENBQUUsS0FBSyxFQUNuQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMzQixDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUM5QixXQUFXO1FBQ1QsV0FBVyxDQUFDLGVBQWU7UUFDM0IsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQ25DLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FDM0IsQ0FBQztJQUNGLE9BQU87UUFDTCxLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUUsZUFBZTtZQUN2QixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDO1FBQ0QsZUFBZSxFQUFFO1lBQ2YsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUSxFQUFFLGFBQWEsQ0FDckIsV0FBVztnQkFDVCxXQUFXLENBQUMsZUFBZTtnQkFDM0IsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQ3RDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzNCO1lBQ0QsUUFBUSxFQUFFLGFBQWEsQ0FDckIsV0FBVztnQkFDVCxXQUFXLENBQUMsZUFBZTtnQkFDM0IsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQ3RDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQ25FO1lBQ0QsV0FBVyxFQUFFLGFBQWEsQ0FDeEIsV0FBVztnQkFDVCxXQUFXLENBQUMsZUFBZTtnQkFDM0IsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQ3pDLG9CQUFvQixDQUNyQjtZQUNELEtBQUssRUFBRSxVQUFVO1lBQ2pCLFlBQVksRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUM7U0FDekQ7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3hCLE1BQXVDO0lBRXZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRCxPQUFPO1FBQ0wsUUFBUTtRQUNSLGFBQWEsRUFBRSx5QkFBeUIsQ0FDdEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQzlCLFFBQVEsQ0FDVDtRQUNELFlBQVksRUFBRSxXQUFXLENBQ3ZCLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxxQkFBcUIsQ0FDekQ7UUFDRCxhQUFhLEVBQ1gsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLElBQUksSUFBSTtZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWE7WUFDdEIsQ0FBQyxDQUFDLHNCQUFzQjtLQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBMEI7SUFDdEQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsdUNBQ0ssY0FBYyxHQUNkLHNCQUFzQixDQUN2QixNQUFNLEVBQ04seUJBQXlCLEVBQ3pCLGNBQWMsQ0FBQyxRQUFRLENBQ3hCLEVBQ0Q7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUE4QjtJQUU5QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCx1Q0FDSyxjQUFjLEtBQ2pCLFFBQVEsRUFBRSxzQkFBc0IsQ0FDOUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQ3pCLGtDQUFrQyxFQUNsQyxjQUFjLENBQUMsUUFBUSxDQUN4QixFQUNELFFBQVEsRUFBRSxzQkFBc0IsQ0FDOUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQ3pCLGtDQUFrQyxFQUNsQyxjQUFjLENBQUMsUUFBUSxDQUN4QixJQUNEO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBVztJQUN0QyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsU0FBaUI7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFZLEVBQ1osTUFBWSxFQUNaLFNBQWlCO0lBRWpCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFTLENBQUM7QUFDekUsQ0FBQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW50ZXJwb2xhdGVDb29sLFxuICBpbnRlcnBvbGF0ZUluZmVybm8sXG4gIGludGVycG9sYXRlTWFnbWEsXG4gIGludGVycG9sYXRlUGxhc21hLFxuICBpbnRlcnBvbGF0ZVZpcmlkaXMsXG4gIGludGVycG9sYXRlV2FybSxcbiAgc2NoZW1lQmx1ZXMsXG4gIHNjaGVtZUJ1R24sXG4gIHNjaGVtZUJ1UHUsXG4gIHNjaGVtZUduQnUsXG4gIHNjaGVtZUdyZWVucyxcbiAgc2NoZW1lR3JleXMsXG4gIHNjaGVtZU9yYW5nZXMsXG4gIHNjaGVtZU9yUmQsXG4gIHNjaGVtZVB1QnUsXG4gIHNjaGVtZVB1QnVHbixcbiAgc2NoZW1lUHVSZCxcbiAgc2NoZW1lUHVycGxlcyxcbiAgc2NoZW1lUmRQdSxcbiAgc2NoZW1lUmVkcyxcbiAgc2NoZW1lWWxHbixcbiAgc2NoZW1lWWxHbkJ1LFxuICBzY2hlbWVZbE9yQnIsXG4gIHNjaGVtZVlsT3JSZCxcbn0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7c2NhbGVQb3csIHNjYWxlU2VxdWVudGlhbCwgc2NhbGVTZXF1ZW50aWFsUG93fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2ludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gJ2QzLWludGVycG9sYXRlJztcbmltcG9ydCB7Y29sb3IgYXMgZDNjb2xvciwgaGNsfSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge1NldHRpbmdzU3RhdGV9IGZyb20gJy4vRmxvd01hcFN0YXRlJztcblxuY29uc3QgREVGQVVMVF9PVVRMSU5FX0NPTE9SID0gJyNmZmYnO1xuY29uc3QgREVGQVVMVF9ESU1NRURfT1BBQ0lUWSA9IDAuNDtcbmNvbnN0IERFRkFVTFRfRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMxMzdDQkQnXTtcbmNvbnN0IERFRkFVTFRfTE9DQVRJT05fQVJFQV9DT0xPUiA9ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknO1xuXG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjZjY2NTRlJ107XG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjMDBhOWNjJ107XG5cbmV4cG9ydCB0eXBlIENvbG9yU2NhbGUgPSAodmFsdWU6IG51bWJlcikgPT4gUkdCQTtcbmV4cG9ydCB0eXBlIFJHQkEgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgRkFMTEJBQ0tfQ09MT1JfUkdCQTogUkdCQSA9IFsyNTUsIDI1NSwgMjU1LCAyNTVdO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKG9wYWNpdHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKG9wYWNpdHkgKiAyNTUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2lmeUhleChoZXhDb2RlOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGMgPSBkM2NvbG9yKGhleENvZGUpO1xuICBpZiAoIWMpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGhleENvZGUpO1xuICAgIHJldHVybiBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke29wYWNpdHl9KWA7XG4gIH1cbiAgY29uc3QgY29sID0gYy5yZ2IoKTtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sLnJ9LCAke2NvbC5nfSwgJHtjb2wuYn0sICR7b3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQXNSZ2JhKGNvbG9yOiBzdHJpbmcpOiBSR0JBIHtcbiAgY29uc3QgY29sID0gZDNjb2xvcihjb2xvcik7XG4gIGlmICghY29sKSB7XG4gICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGNvbG9yOiAnLCBjb2xvcik7XG4gICAgcmV0dXJuIEZBTExCQUNLX0NPTE9SX1JHQkE7XG4gIH1cbiAgY29uc3QgcmdiQ29sb3IgPSBjb2wucmdiKCk7XG4gIHJldHVybiBbXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5yKSxcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLmcpLFxuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuYiksXG4gICAgb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKGNvbC5vcGFjaXR5KSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gY29sb3JBc1JnYmFPcihcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdENvbG9yOiBSR0JBIHwgc3RyaW5nLFxuKTogUkdCQSB7XG4gIGlmIChjb2xvcikge1xuICAgIHJldHVybiBjb2xvckFzUmdiYShjb2xvcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBkZWZhdWx0Q29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbG9yQXNSZ2JhKGRlZmF1bHRDb2xvcik7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbn1cblxuY29uc3QgYXNTY2hlbWUgPSAoc2NoZW1lOiBSZWFkb25seUFycmF5PFJlYWRvbmx5QXJyYXk8c3RyaW5nPj4pID0+XG4gIHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0gYXMgc3RyaW5nW107XG5cbmV4cG9ydCBlbnVtIENvbG9yU2NoZW1lIHtcbiAgcHJpbWFyeSA9ICcjMTYyZDNjJyxcbn1cblxuY29uc3QgU0NBTEVfTlVNX1NURVBTID0gMjA7XG5jb25zdCBnZXRDb2xvclN0ZXBzID0gKGludGVycG9sYXRlOiAoeDogbnVtYmVyKSA9PiBzdHJpbmcpID0+XG4gIHJhbmdlKDAsIFNDQUxFX05VTV9TVEVQUyArIDEpXG4gICAgLm1hcCgoaSkgPT4gaW50ZXJwb2xhdGUoaSAvIFNDQUxFX05VTV9TVEVQUykpXG4gICAgLnJldmVyc2UoKTtcblxuY29uc3QgRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmV4cG9ydCBjb25zdCBCTFVFU19QQUxFID0gW0ZMT1dfTUlOX0NPTE9SLCBDb2xvclNjaGVtZS5wcmltYXJ5XTtcbmNvbnN0IHNjaGVtZUJsdVlsID0gW1xuICAnI2Y3ZmVhZScsXG4gICcjYjdlNmE1JyxcbiAgJyM3Y2NiYTInLFxuICAnIzQ2YWVhMCcsXG4gICcjMDg5MDk5JyxcbiAgJyMwMDcxOGInLFxuICAnIzA0NTI3NScsXG5dO1xuXG5jb25zdCBzY2hlbWVFbXJsZCA9IFtcbiAgJyNkM2YyYTMnLFxuICAnIzk3ZTE5NicsXG4gICcjNmNjMDhiJyxcbiAgJyM0YzliODInLFxuICAnIzIxN2E3OScsXG4gICcjMTA1OTY1JyxcbiAgJyMwNzQwNTAnLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtZVRlYWwgPSBbXG4gICcjZDFlZWVhJyxcbiAgJyNhOGRiZDknLFxuICAnIzg1YzRjOScsXG4gICcjNjhhYmI4JyxcbiAgJyM0ZjkwYTYnLFxuICAnIzNiNzM4ZicsXG4gICcjMmE1Njc0Jyxcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTE9SX1NDSEVNRSA9IHNjaGVtZVRlYWw7XG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FUzoge1trZXk6IHN0cmluZ106IHN0cmluZ1tdfSA9IHtcbiAgQmx1ZXM6IGFzU2NoZW1lKHNjaGVtZUJsdWVzKSxcbiAgQmx1ZXNQYWxlOiBCTFVFU19QQUxFLFxuICBCbHVHcm46IFtcbiAgICAnI2M0ZTZjMycsXG4gICAgJyM5NmQyYTQnLFxuICAgICcjNmRiYzkwJyxcbiAgICAnIzRkYTI4NCcsXG4gICAgJyMzNjg3N2EnLFxuICAgICcjMjY2YjZlJyxcbiAgICAnIzFkNGY2MCcsXG4gIF0sXG4gIEJsdVlsOiBzY2hlbWVCbHVZbCxcbiAgQnJ3bllsOiBbXG4gICAgJyNlZGU1Y2YnLFxuICAgICcjZTBjMmEyJyxcbiAgICAnI2QzOWM4MycsXG4gICAgJyNjMTc2NmYnLFxuICAgICcjYTY1NDYxJyxcbiAgICAnIzgxMzc1MycsXG4gICAgJyM1NDFmM2YnLFxuICBdLFxuICBCdUduOiBhc1NjaGVtZShzY2hlbWVCdUduKSxcbiAgQnVQdTogYXNTY2hlbWUoc2NoZW1lQnVQdSksXG4gIEJ1cmc6IFtcbiAgICAnI2ZmYzZjNCcsXG4gICAgJyNmNGEzYTgnLFxuICAgICcjZTM4MTkxJyxcbiAgICAnI2NjNjA3ZCcsXG4gICAgJyNhZDQ2NmMnLFxuICAgICcjOGIzMDU4JyxcbiAgICAnIzY3MjA0NCcsXG4gIF0sXG4gIEJ1cmdZbDogW1xuICAgICcjZmJlNmM1JyxcbiAgICAnI2Y1YmE5OCcsXG4gICAgJyNlZThhODInLFxuICAgICcjZGM3MTc2JyxcbiAgICAnI2M4NTg2YycsXG4gICAgJyM5YzNmNWQnLFxuICAgICcjNzAyODRhJyxcbiAgXSxcbiAgQ29vbDogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZUNvb2wpLFxuICBEYXJrTWludDogW1xuICAgICcjZDJmYmQ0JyxcbiAgICAnI2E1ZGJjMicsXG4gICAgJyM3YmJjYjAnLFxuICAgICcjNTU5YzllJyxcbiAgICAnIzNhN2M4OScsXG4gICAgJyMyMzVkNzInLFxuICAgICcjMTIzZjVhJyxcbiAgXSxcbiAgRW1ybGQ6IHNjaGVtZUVtcmxkLFxuICBHbkJ1OiBhc1NjaGVtZShzY2hlbWVHbkJ1KSxcbiAgR3JlZW5zOiBhc1NjaGVtZShzY2hlbWVHcmVlbnMpLFxuICBHcmV5czogYXNTY2hlbWUoc2NoZW1lR3JleXMpLFxuICBJbmZlcm5vOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlSW5mZXJubyksXG4gIE1hZ2VudGE6IFtcbiAgICAnI2YzY2JkMycsXG4gICAgJyNlYWE5YmQnLFxuICAgICcjZGQ4OGFjJyxcbiAgICAnI2NhNjk5ZCcsXG4gICAgJyNiMTRkOGUnLFxuICAgICcjOTEzNTdkJyxcbiAgICAnIzZjMjE2NycsXG4gIF0sXG4gIE1hZ21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlTWFnbWEpLFxuICBNaW50OiBbXG4gICAgJyNlNGYxZTEnLFxuICAgICcjYjRkOWNjJyxcbiAgICAnIzg5YzBiNicsXG4gICAgJyM2M2E2YTAnLFxuICAgICcjNDQ4YzhhJyxcbiAgICAnIzI4NzI3NCcsXG4gICAgJyMwZDU4NWYnLFxuICBdLFxuICBPcmFuZ2VzOiBhc1NjaGVtZShzY2hlbWVPcmFuZ2VzKSxcbiAgT3JSZDogYXNTY2hlbWUoc2NoZW1lT3JSZCksXG4gIE9yWWVsOiBbXG4gICAgJyNlY2RhOWEnLFxuICAgICcjZWZjNDdlJyxcbiAgICAnI2YzYWQ2YScsXG4gICAgJyNmNzk0NWQnLFxuICAgICcjZjk3YjU3JyxcbiAgICAnI2Y2NjM1NicsXG4gICAgJyNlZTRkNWEnLFxuICBdLFxuICBQZWFjaDogW1xuICAgICcjZmRlMGM1JyxcbiAgICAnI2ZhY2JhNicsXG4gICAgJyNmOGI1OGInLFxuICAgICcjZjU5ZTcyJyxcbiAgICAnI2YyODU1ZCcsXG4gICAgJyNlZjZhNGMnLFxuICAgICcjZWI0YTQwJyxcbiAgXSxcbiAgUGxhc21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlUGxhc21hKSxcbiAgUGlua1lsOiBbXG4gICAgJyNmZWY2YjUnLFxuICAgICcjZmZkZDlhJyxcbiAgICAnI2ZmYzI4NScsXG4gICAgJyNmZmE2NzknLFxuICAgICcjZmE4YTc2JyxcbiAgICAnI2YxNmQ3YScsXG4gICAgJyNlMTUzODMnLFxuICBdLFxuICBQdUJ1OiBhc1NjaGVtZShzY2hlbWVQdUJ1KSxcbiAgUHVCdUduOiBhc1NjaGVtZShzY2hlbWVQdUJ1R24pLFxuICBQdVJkOiBhc1NjaGVtZShzY2hlbWVQdVJkKSxcbiAgUHVycDogW1xuICAgICcjZjNlMGY3JyxcbiAgICAnI2U0YzdmMScsXG4gICAgJyNkMWFmZTgnLFxuICAgICcjYjk5OGRkJyxcbiAgICAnIzlmODJjZScsXG4gICAgJyM4MjZkYmEnLFxuICAgICcjNjM1ODlmJyxcbiAgXSxcbiAgUHVycGxlczogYXNTY2hlbWUoc2NoZW1lUHVycGxlcyksXG4gIFB1cnBPcjogW1xuICAgICcjZjlkZGRhJyxcbiAgICAnI2YyYjljNCcsXG4gICAgJyNlNTk3YjknLFxuICAgICcjY2U3OGIzJyxcbiAgICAnI2FkNWZhZCcsXG4gICAgJyM4MzRiYTAnLFxuICAgICcjNTczYjg4JyxcbiAgXSxcbiAgUmRQdTogYXNTY2hlbWUoc2NoZW1lUmRQdSksXG4gIFJlZE9yOiBbXG4gICAgJyNmNmQyYTknLFxuICAgICcjZjViNzhlJyxcbiAgICAnI2YxOWM3YycsXG4gICAgJyNlYTgxNzEnLFxuICAgICcjZGQ2ODZjJyxcbiAgICAnI2NhNTI2OCcsXG4gICAgJyNiMTNmNjQnLFxuICBdLFxuICBSZWRzOiBhc1NjaGVtZShzY2hlbWVSZWRzKSxcbiAgU3Vuc2V0OiBbXG4gICAgJyNmM2U3OWInLFxuICAgICcjZmFjNDg0JyxcbiAgICAnI2Y4YTA3ZScsXG4gICAgJyNlYjdmODYnLFxuICAgICcjY2U2NjkzJyxcbiAgICAnI2EwNTlhMCcsXG4gICAgJyM1YzUzYTUnLFxuICBdLFxuICBTdW5zZXREYXJrOiBbXG4gICAgJyNmY2RlOWMnLFxuICAgICcjZmFhNDc2JyxcbiAgICAnI2YwNzQ2ZScsXG4gICAgJyNlMzRmNmYnLFxuICAgICcjZGMzOTc3JyxcbiAgICAnI2I5MjU3YScsXG4gICAgJyM3YzFkNmYnLFxuICBdLFxuICBUZWFsOiBzY2hlbWVUZWFsLFxuICBUZWFsR3JuOiBbXG4gICAgJyNiMGYyYmMnLFxuICAgICcjODllOGFjJyxcbiAgICAnIzY3ZGJhNScsXG4gICAgJyM0Y2M4YTMnLFxuICAgICcjMzhiMmEzJyxcbiAgICAnIzJjOThhMCcsXG4gICAgJyMyNTdkOTgnLFxuICBdLFxuICBWaXJpZGlzOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlVmlyaWRpcyksXG4gIFdhcm06IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVXYXJtKSxcbiAgWWxHbjogYXNTY2hlbWUoc2NoZW1lWWxHbiksXG4gIFlsR25CdTogYXNTY2hlbWUoc2NoZW1lWWxHbkJ1KSxcbiAgWWxPckJyOiBhc1NjaGVtZShzY2hlbWVZbE9yQnIpLFxuICBZbE9yUmQ6IGFzU2NoZW1lKHNjaGVtZVlsT3JSZCksXG59O1xuXG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhDT0xPUl9TQ0hFTUVTKTtcblxuY29uc3QgY29tcGxlbWVudGFyeSA9ICcjZjUyMDIwJztcbmNvbnN0IGJhc2VEaWZmQ29sb3IgPSAnIzE3YTViZSc7XG5cbmNvbnN0IGRpZmZDb2xvcnM6IERpZmZDb2xvcnMgPSB7XG4gIG5lZ2F0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBiYXNlRGlmZkNvbG9yXSxcbiAgICB9LFxuICB9LFxuICBwb3NpdGl2ZToge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IFtGTE9XX01JTl9DT0xPUiwgY29tcGxlbWVudGFyeV0sXG4gICAgfSxcbiAgfSxcbiAgbG9jYXRpb25BcmVhczoge1xuICAgIG91dGxpbmU6ICdyZ2JhKDkyLDExMiwxMjgsMC41KScsXG4gICAgbm9ybWFsOiAncmdiYSgyMjAsMjIwLDIyMCwwLjUpJyxcbiAgfSxcbiAgb3V0bGluZUNvbG9yOiAncmdiKDIzMCwyMzMsMjM3KScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd01hcENvbG9ycyhcbiAgc2V0dGluZ3NTdGF0ZTogU2V0dGluZ3NTdGF0ZSxcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICByZXR1cm4gZ2V0Q29sb3JzKFxuICAgIGZhbHNlLCAvLyBUT0RPOiBkaWZmTW9kZVxuICAgIHNldHRpbmdzU3RhdGUuY29sb3JTY2hlbWUsXG4gICAgc2V0dGluZ3NTdGF0ZS5kYXJrTW9kZSxcbiAgICBzZXR0aW5nc1N0YXRlLmZhZGVFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZUFtb3VudCxcbiAgICBzZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcnMoXG4gIGRpZmZNb2RlOiBib29sZWFuLFxuICBzY2hlbWVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGFya01vZGU6IGJvb2xlYW4sXG4gIGZhZGVFbmFibGVkOiBib29sZWFuLFxuICBmYWRlQW1vdW50OiBudW1iZXIsXG4gIGFuaW1hdGU6IGJvb2xlYW4sXG4pOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHtcbiAgaWYgKGRpZmZNb2RlKSB7XG4gICAgcmV0dXJuIGRpZmZDb2xvcnM7XG4gIH1cblxuICBsZXQgc2NoZW1lID0gKHNjaGVtZUtleSAmJiBDT0xPUl9TQ0hFTUVTW3NjaGVtZUtleV0pIHx8IERFRkFVTFRfQ09MT1JfU0NIRU1FO1xuXG4gIGlmIChkYXJrTW9kZSkge1xuICAgIHNjaGVtZSA9IHNjaGVtZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuICAvLyBpZiAoYW5pbWF0ZSlcbiAgLy8gaWYgKGZhZGVBbW91bnQgPiAwKVxuICB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHJhbmdlKDAsIE1hdGgubWF4KDEwLCBzY2hlbWUubGVuZ3RoKSk7XG4gICAgY29uc3QgTiA9IGluZGljZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBjb2xvclNjYWxlID0gc2NhbGVTZXF1ZW50aWFsKGludGVycG9sYXRlUmdiQmFzaXMoc2NoZW1lKSkuZG9tYWluKFtcbiAgICAgIDAsXG4gICAgICBOLFxuICAgIF0pO1xuXG4gICAgaWYgKCFmYWRlRW5hYmxlZCB8fCBmYWRlQW1vdW50ID09PSAwKSB7XG4gICAgICBzY2hlbWUgPSBpbmRpY2VzLm1hcCgoYywgaSkgPT4gY29sb3JTY2FsZShpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IHNjYWxlUG93KClcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAxIDogMS8yLjUpXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMTAwIDogNTApXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMjAgOiA1KVxuICAgICAgICAvLyAuZXhwb25lbnQoMS8yLjUpXG4gICAgICAgIC5leHBvbmVudCgxLjUpXG4gICAgICAgIC5kb21haW4oW04sIDBdKVxuICAgICAgICAvLyAucmFuZ2UoW2ZhZGVBbW91bnQvMTAwKihhbmltYXRlPzI6MSksIDBdKVxuICAgICAgICAvLyAucmFuZ2UoWzAsIGZhZGVBbW91bnQvMTAwKihhbmltYXRlPzI6MSldKVxuICAgICAgICAvLyAucmFuZ2UoZGFya01vZGUgPyBbMS1mYWRlQW1vdW50LzEwMCwgMV0gOiBbMSwgMSAtIGZhZGVBbW91bnQvMTAwXSlcbiAgICAgICAgLy8gLnJhbmdlKGRhcmtNb2RlID8gWzEgLSBmYWRlQW1vdW50LzEwMCwgMV0gOiBbZmFkZUFtb3VudC8xMDAsIDBdKVxuICAgICAgICAvLyAucmFuZ2UoWzEgLSBmYWRlQW1vdW50LzEwMCwgMV0pXG4gICAgICAgIC5yYW5nZShbMCwgKDIgKiBmYWRlQW1vdW50KSAvIDEwMF0pO1xuXG4gICAgICBzY2hlbWUgPSBpbmRpY2VzLm1hcChcbiAgICAgICAgKGMsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNvbG9yU2NhbGUoaSk7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBhbW91bnQoaSk7XG4gICAgICAgICAgaWYgKGNvbG9yID09IG51bGwgfHwgYWxwaGEgPT0gbnVsbCkgcmV0dXJuICcjMDAwJztcbiAgICAgICAgICBjb25zdCBjb2wgPSBoY2woY29sb3IpO1xuICAgICAgICAgIGNvbC5sID0gZGFya01vZGVcbiAgICAgICAgICAgID8gY29sLmwgLSBjb2wubCAqIGFscGhhXG4gICAgICAgICAgICA6IGNvbC5sICsgKDEwMCAtIGNvbC5sKSAqIGFscGhhO1xuICAgICAgICAgIGNvbC5jID0gY29sLmMgLSBjb2wuYyAqIChhbHBoYSAvIDQpO1xuICAgICAgICAgIHJldHVybiBjb2wudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVSZ2JCYXNpcyhbY29sb3JTY2FsZShpKSwgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZiddKShhbW91bnQoaSkpXG4gICAgICAgIC8vIGludGVycG9sYXRlSHNsKGNvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKShhbW91bnQoaSkpLnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXJrTW9kZSxcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBvdXRnb2luZzogZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgfSxcbiAgICBvdXRsaW5lQ29sb3I6IGRhcmtNb2RlID8gJyMwMDAnIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBzY2hlbWU6IHN0cmluZ1tdLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogQ29sb3JTY2FsZSB7XG4gIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsUG93KGludGVycG9sYXRlUmdiQmFzaXMoc2NoZW1lKSlcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLmV4cG9uZW50KGFuaW1hdGUgPyAxIC8gMiA6IDEgLyAzKVxuICAgIC5kb21haW4oZG9tYWluKTtcbiAgcmV0dXJuICh2YWx1ZTogbnVtYmVyKSA9PiBjb2xvckFzUmdiYShzY2FsZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd0NvbG9yU2NhbGUoXG4gIGNvbG9yczogQ29sb3JzUkdCQSB8IERpZmZDb2xvcnNSR0JBLFxuICBtYWduaXR1ZGVFeHRlbnQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsXG4gIGFuaW1hdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiAobWFnbml0dWRlOiBudW1iZXIpID0+IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgbWluTWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzBdIDogMDtcbiAgY29uc3QgbWF4TWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzFdIDogMDtcbiAgaWYgKGlzRGlmZkNvbG9yc1JHQkEoY29sb3JzKSkge1xuICAgIGNvbnN0IHBvc1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWF4TWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5wb3NpdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG4gICAgY29uc3QgbmVnU2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICAgIFswLCBtaW5NYWduaXR1ZGVdLFxuICAgICAgY29sb3JzLm5lZ2F0aXZlLmZsb3dzLnNjaGVtZSxcbiAgICAgIGFuaW1hdGUsXG4gICAgKTtcblxuICAgIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+XG4gICAgICBtYWduaXR1ZGUgPj0gMCA/IHBvc1NjYWxlKG1hZ25pdHVkZSkgOiBuZWdTY2FsZShtYWduaXR1ZGUpO1xuICB9XG5cbiAgY29uc3Qgc2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICBbMCwgbWF4TWFnbml0dWRlIHx8IDBdLFxuICAgIGNvbG9ycy5mbG93cy5zY2hlbWUsXG4gICAgYW5pbWF0ZSxcbiAgKTtcbiAgcmV0dXJuIChtYWduaXR1ZGU6IG51bWJlcikgPT4gc2NhbGUobWFnbml0dWRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9ycyhcbiAgY29sb3JzOiBEaWZmQ29sb3JzIHwgQ29sb3JzLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnMge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzKS5wb3NpdGl2ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmQ29sb3JzUkdCQShcbiAgY29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4pOiBjb2xvcnMgaXMgRGlmZkNvbG9yc1JHQkEge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzUkdCQSkucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgY29sb3JzOiBMb2NhdGlvbkFyZWFDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIGNvbnN0IG5vcm1hbENvbG9yID0gKGNvbG9ycyAmJiBjb2xvcnMubm9ybWFsKSB8fCBERUZBVUxUX0xPQ0FUSU9OX0FSRUFfQ09MT1I7XG4gIGNvbnN0IG5vcm1hbENvbG9ySGNsID0gaGNsKG5vcm1hbENvbG9yKTtcbiAgY29uc3QgbG9jYXRpb25BcmVhc05vcm1hbCA9IGNvbG9yQXNSZ2JhKG5vcm1hbENvbG9yKTtcbiAgcmV0dXJuIHtcbiAgICBub3JtYWw6IGxvY2F0aW9uQXJlYXNOb3JtYWwsXG4gICAgY29ubmVjdGVkOiBjb2xvckFzUmdiYU9yKGNvbG9ycyAmJiBjb2xvcnMuY29ubmVjdGVkLCBsb2NhdGlvbkFyZWFzTm9ybWFsKSxcbiAgICBoaWdobGlnaHRlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuaGlnaGxpZ2h0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMSkudG9TdHJpbmcoKSxcbiAgICAgICAgMC41LFxuICAgICAgKSxcbiAgICApLFxuICAgIHNlbGVjdGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5zZWxlY3RlZCxcbiAgICAgIG9wYWNpZnlIZXgoXG4gICAgICAgIG5vcm1hbENvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgyKS50b1N0cmluZygpLFxuICAgICAgICAwLjgsXG4gICAgICApLFxuICAgICksXG4gICAgb3V0bGluZTogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMub3V0bGluZSxcbiAgICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oNCkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzIHtcbiAgc2NoZW1lPzogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzIHtcbiAgaW5uZXI/OiBzdHJpbmc7XG4gIG91dGdvaW5nPzogc3RyaW5nO1xuICBpbmNvbWluZz86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGVtcHR5Pzogc3RyaW5nO1xuICBlbXB0eU91dGxpbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzIHtcbiAgb3V0bGluZT86IHN0cmluZztcbiAgbm9ybWFsPzogc3RyaW5nO1xuICBzZWxlY3RlZD86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGNvbm5lY3RlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29sb3JzIHtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBsb2NhdGlvbkFyZWFzPzogTG9jYXRpb25BcmVhQ29sb3JzO1xuICBkaW1tZWRPcGFjaXR5PzogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzIGV4dGVuZHMgQmFzZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBwb3NpdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG4gIG5lZ2F0aXZlPzogRmxvd0FuZENpcmNsZUNvbG9ycztcbn1cblxuLy8gVGhlIHh4eENvbG9yc1JHQkEgb2JqZWN0cyBhcmUgbWlycm9yaW5nIHRoZSBpbnB1dCBjb2xvcnMnIG9iamVjdHMsXG4vLyBidXQgY29udmVydGVkIHRvIFJHQkEgYW5kIHdpdGggYWxsIHRoZSBvbWl0dGVkIG9uZXMgc2V0IHRvIGRlZmF1bHRzXG4vLyBvciBkZXJpdmVkLlxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzUkdCQSB7XG4gIHNjaGVtZTogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGlubmVyOiBSR0JBO1xuICBvdXRnb2luZzogUkdCQTtcbiAgaW5jb21pbmc6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBlbXB0eTogUkdCQTtcbiAgZW1wdHlPdXRsaW5lOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBvdXRsaW5lOiBSR0JBO1xuICBub3JtYWw6IFJHQkE7XG4gIHNlbGVjdGVkOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgY29ubmVjdGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb2xvcnNSR0JBIHtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGxvY2F0aW9uQXJlYXM6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkE7XG4gIGRpbW1lZE9wYWNpdHk6IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBmbG93czogRmxvd0NvbG9yc1JHQkE7XG4gIGxvY2F0aW9uQ2lyY2xlczogTG9jYXRpb25DaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnNSR0JBIGV4dGVuZHMgQmFzZUNvbG9yc1JHQkEge1xuICBwb3NpdGl2ZTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkE7XG4gIG5lZ2F0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgaW5wdXRDb2xvcnM6IEZsb3dBbmRDaXJjbGVDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU6IHN0cmluZ1tdLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBIHtcbiAgY29uc3QgZmxvd0NvbG9yU2NoZW1lID1cbiAgICAoaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3Muc2NoZW1lKSB8fFxuICAgIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU7XG4gIGNvbnN0IG1heEZsb3dDb2xvckhjbCA9IGhjbChmbG93Q29sb3JTY2hlbWVbZmxvd0NvbG9yU2NoZW1lLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzICYmIGlucHV0Q29sb3JzLmZsb3dzICYmIGlucHV0Q29sb3JzLmZsb3dzLmhpZ2hsaWdodGVkLFxuICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgwLjcpLnRvU3RyaW5nKCksXG4gICAgKSxcbiAgKTtcblxuICBjb25zdCBlbXB0eUNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycz8ubG9jYXRpb25DaXJjbGVzPy5lbXB0eSxcbiAgICBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJyxcbiAgKTtcbiAgY29uc3QgaW5uZXJDb2xvciA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyLFxuICAgIG1heEZsb3dDb2xvckhjbC50b1N0cmluZygpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IGZsb3dDb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodGVkOiBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgaW5uZXI6IGlubmVyQ29sb3IsXG4gICAgICBvdXRnb2luZzogY29sb3JBc1JnYmFPcihcbiAgICAgICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMub3V0Z29pbmcsXG4gICAgICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgICAgKSxcbiAgICAgIGluY29taW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbmNvbWluZyxcbiAgICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgxLjI1KS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIGhpZ2hsaWdodGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5oaWdobGlnaHRlZCxcbiAgICAgICAgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQsXG4gICAgICApLFxuICAgICAgZW1wdHk6IGVtcHR5Q29sb3IsXG4gICAgICBlbXB0eU91dGxpbmU6IG1peENvbG9yc1JHQkEoaW5uZXJDb2xvciwgZW1wdHlDb2xvciwgMC40KSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCYXNlQ29sb3JzUkdCQShcbiAgY29sb3JzOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHwgdW5kZWZpbmVkLFxuKTogQmFzZUNvbG9yc1JHQkEge1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbG9ycyAmJiBjb2xvcnMuZGFya01vZGUgPyB0cnVlIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgbG9jYXRpb25BcmVhczogZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubG9jYXRpb25BcmVhcyxcbiAgICAgIGRhcmtNb2RlLFxuICAgICksXG4gICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYShcbiAgICAgIChjb2xvcnMgJiYgY29sb3JzLm91dGxpbmVDb2xvcikgfHwgREVGQVVMVF9PVVRMSU5FX0NPTE9SLFxuICAgICksXG4gICAgZGltbWVkT3BhY2l0eTpcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuZGltbWVkT3BhY2l0eSAhPSBudWxsXG4gICAgICAgID8gY29sb3JzLmRpbW1lZE9wYWNpdHlcbiAgICAgICAgOiBERUZBVUxUX0RJTU1FRF9PUEFDSVRZLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JzUkdCQShjb2xvcnM6IENvbG9ycyB8IHVuZGVmaW5lZCk6IENvbG9yc1JHQkEge1xuICBjb25zdCBiYXNlQ29sb3JzUkdCQSA9IGdldEJhc2VDb2xvcnNSR0JBKGNvbG9ycyk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbG9yc1JHQkEsXG4gICAgLi4uZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IERpZmZDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIHBvc2l0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5wb3NpdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICAgIG5lZ2F0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5uZWdhdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiYUFzU3RyaW5nKGNvbG9yOiBSR0JBKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sb3Iuam9pbignLCcpfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkcG9pbnQoYTogbnVtYmVyLCBiOiBudW1iZXIsIHplcm9Ub09uZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgKyAoYiAtIGEpICogemVyb1RvT25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWl4Q29sb3JzUkdCQShcbiAgY29sb3IxOiBSR0JBLFxuICBjb2xvcjI6IFJHQkEsXG4gIHplcm9Ub09uZTogbnVtYmVyLFxuKTogUkdCQSB7XG4gIHJldHVybiBjb2xvcjEubWFwKCh2LCBpKSA9PiBtaWRwb2ludCh2LCBjb2xvcjJbaV0sIHplcm9Ub09uZSkpIGFzIFJHQkE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENvbG9ycztcbiJdfQ==
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR2hFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFDdkQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sa0NBQWtDLEdBQUcsQ0FB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QUMxQixJQUFJLEVBQUU7UUFDSixTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxPQUFPLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNoQyxNQUFNLEVBQUU7UUFDTixTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUMxQixLQUFLLEVBQUU7UUFDTCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUMxQixNQUFNLEVBQUU7UUFDTixTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxVQUFVLEVBQUU7UUFDVixTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxJQUFJLEVBQUUsVUFBVTtJQUNoQixPQUFPLEVBQUU7UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO0tBQ1Y7SUFDRCxPQUFPLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixDQUFDO0lBQzFDLElBQUksRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDO0lBQ3BDLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO0NBQy9CLENBQUM7QUFF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QUFjLENBQUMsUUFBUSxDQUN4QixFQUNELFFBQVEsRUFBRSxzQkFBc0IsQ0FDOUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQ3pCLGtDQUFrQyxFQUNsQyxjQUFjLENBQUMsUUFBUSxDQUN4QixJQUNEO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBVztJQUN0QyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsU0FBaUI7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFZLEVBQ1osTUFBWSxFQUNaLFNBQWlCO0lBRWpCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFTLENBQUM7QUFDekUsQ0FBQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW50ZXJwb2xhdGVDb29sLFxuICBpbnRlcnBvbGF0ZUluZmVybm8sXG4gIGludGVycG9sYXRlTWFnbWEsXG4gIGludGVycG9sYXRlUGxhc21hLFxuICBpbnRlcnBvbGF0ZVZpcmlkaXMsXG4gIGludGVycG9sYXRlV2FybSxcbiAgc2NoZW1lQmx1ZXMsXG4gIHNjaGVtZUJ1R24sXG4gIHNjaGVtZUJ1UHUsXG4gIHNjaGVtZUduQnUsXG4gIHNjaGVtZUdyZWVucyxcbiAgc2NoZW1lR3JleXMsXG4gIHNjaGVtZU9yYW5nZXMsXG4gIHNjaGVtZU9yUmQsXG4gIHNjaGVtZVB1QnUsXG4gIHNjaGVtZVB1QnVHbixcbiAgc2NoZW1lUHVSZCxcbiAgc2NoZW1lUHVycGxlcyxcbiAgc2NoZW1lUmRQdSxcbiAgc2NoZW1lUmVkcyxcbiAgc2NoZW1lWWxHbixcbiAgc2NoZW1lWWxHbkJ1LFxuICBzY2hlbWVZbE9yQnIsXG4gIHNjaGVtZVlsT3JSZCxcbn0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7c2NhbGVQb3csIHNjYWxlU2VxdWVudGlhbCwgc2NhbGVTZXF1ZW50aWFsUG93fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2ludGVycG9sYXRlQmFzaXMsIGludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gJ2QzLWludGVycG9sYXRlJztcbmltcG9ydCB7Y29sb3IgYXMgZDNjb2xvciwgaGNsLCByZ2IgYXMgY29sb3JSZ2J9IGZyb20gJ2QzLWNvbG9yJztcbmltcG9ydCB7U2V0dGluZ3NTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuXG5jb25zdCBERUZBVUxUX09VVExJTkVfQ09MT1IgPSAnI2ZmZic7XG5jb25zdCBERUZBVUxUX0RJTU1FRF9PUEFDSVRZID0gMC40O1xuY29uc3QgREVGQVVMVF9GTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuY29uc3QgREVGQVVMVF9GTE9XX0NPTE9SX1NDSEVNRSA9IFtERUZBVUxUX0ZMT1dfTUlOX0NPTE9SLCAnIzEzN0NCRCddO1xuY29uc3QgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SID0gJ3JnYmEoMjIwLDIyMCwyMjAsMC41KSc7XG5cbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyNmNjY1NGUnXTtcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMwMGE5Y2MnXTtcblxuZXhwb3J0IHR5cGUgQ29sb3JTY2FsZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBSR0JBO1xuZXhwb3J0IHR5cGUgUkdCQSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBGQUxMQkFDS19DT0xPUl9SR0JBOiBSR0JBID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaXR5RmxvYXRUb0ludGVnZXIob3BhY2l0eTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQob3BhY2l0eSAqIDI1NSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaWZ5SGV4KGhleENvZGU6IHN0cmluZywgb3BhY2l0eTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IGQzY29sb3IoaGV4Q29kZSk7XG4gIGlmICghYykge1xuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2xvcjogJywgaGV4Q29kZSk7XG4gICAgcmV0dXJuIGByZ2JhKDI1NSwgMjU1LCAyNTUsICR7b3BhY2l0eX0pYDtcbiAgfVxuICBjb25zdCBjb2wgPSBjLnJnYigpO1xuICByZXR1cm4gYHJnYmEoJHtjb2wucn0sICR7Y29sLmd9LCAke2NvbC5ifSwgJHtvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JBc1JnYmEoY29sb3I6IHN0cmluZyk6IFJHQkEge1xuICBjb25zdCBjb2wgPSBkM2NvbG9yKGNvbG9yKTtcbiAgaWYgKCFjb2wpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGNvbG9yKTtcbiAgICByZXR1cm4gRkFMTEJBQ0tfQ09MT1JfUkdCQTtcbiAgfVxuICBjb25zdCByZ2JDb2xvciA9IGNvbC5yZ2IoKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLnIpLFxuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuZyksXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5iKSxcbiAgICBvcGFjaXR5RmxvYXRUb0ludGVnZXIoY29sLm9wYWNpdHkpLFxuICBdO1xufVxuXG5mdW5jdGlvbiBjb2xvckFzUmdiYU9yKFxuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0Q29sb3I6IFJHQkEgfCBzdHJpbmcsXG4pOiBSR0JBIHtcbiAgaWYgKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNvbG9yQXNSZ2JhKGNvbG9yKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlZmF1bHRDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29sb3JBc1JnYmEoZGVmYXVsdENvbG9yKTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdENvbG9yO1xufVxuXG5jb25zdCBhc1NjaGVtZSA9IChzY2hlbWU6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHlBcnJheTxzdHJpbmc+PikgPT5cbiAgc2NoZW1lW3NjaGVtZS5sZW5ndGggLSAxXSBhcyBzdHJpbmdbXTtcblxuZXhwb3J0IGVudW0gQ29sb3JTY2hlbWUge1xuICBwcmltYXJ5ID0gJyMxNjJkM2MnLFxufVxuXG5jb25zdCBTQ0FMRV9OVU1fU1RFUFMgPSAyMDtcbmNvbnN0IGdldENvbG9yU3RlcHMgPSAoaW50ZXJwb2xhdGU6ICh4OiBudW1iZXIpID0+IHN0cmluZykgPT5cbiAgcmFuZ2UoMCwgU0NBTEVfTlVNX1NURVBTICsgMSlcbiAgICAubWFwKChpKSA9PiBpbnRlcnBvbGF0ZShpIC8gU0NBTEVfTlVNX1NURVBTKSlcbiAgICAucmV2ZXJzZSgpO1xuXG5jb25zdCBGTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuZXhwb3J0IGNvbnN0IEdSQVlJU0ggPSBbRkxPV19NSU5fQ09MT1IsIENvbG9yU2NoZW1lLnByaW1hcnldO1xuY29uc3Qgc2NoZW1lQmx1WWwgPSBbXG4gICcjZjdmZWFlJyxcbiAgJyNiN2U2YTUnLFxuICAnIzdjY2JhMicsXG4gICcjNDZhZWEwJyxcbiAgJyMwODkwOTknLFxuICAnIzAwNzE4YicsXG4gICcjMDQ1Mjc1Jyxcbl07XG5cbmNvbnN0IHNjaGVtZUVtcmxkID0gW1xuICAnI2QzZjJhMycsXG4gICcjOTdlMTk2JyxcbiAgJyM2Y2MwOGInLFxuICAnIzRjOWI4MicsXG4gICcjMjE3YTc5JyxcbiAgJyMxMDU5NjUnLFxuICAnIzA3NDA1MCcsXG5dO1xuXG5leHBvcnQgY29uc3Qgc2NoZW1lVGVhbCA9IFtcbiAgJyNkMWVlZWEnLFxuICAnI2E4ZGJkOScsXG4gICcjODVjNGM5JyxcbiAgJyM2OGFiYjgnLFxuICAnIzRmOTBhNicsXG4gICcjM2I3MzhmJyxcbiAgJyMyYTU2NzQnLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfU0NIRU1FID0gc2NoZW1lVGVhbDtcbmV4cG9ydCBjb25zdCBDT0xPUl9TQ0hFTUVTOiB7W2tleTogc3RyaW5nXTogc3RyaW5nW119ID0ge1xuICBCbHVlczogYXNTY2hlbWUoc2NoZW1lQmx1ZXMpLFxuICBCbHVHcm46IFtcbiAgICAnI2M0ZTZjMycsXG4gICAgJyM5NmQyYTQnLFxuICAgICcjNmRiYzkwJyxcbiAgICAnIzRkYTI4NCcsXG4gICAgJyMzNjg3N2EnLFxuICAgICcjMjY2YjZlJyxcbiAgICAnIzFkNGY2MCcsXG4gIF0sXG4gIEJsdVlsOiBzY2hlbWVCbHVZbCxcbiAgQnJ3bllsOiBbXG4gICAgJyNlZGU1Y2YnLFxuICAgICcjZTBjMmEyJyxcbiAgICAnI2QzOWM4MycsXG4gICAgJyNjMTc2NmYnLFxuICAgICcjYTY1NDYxJyxcbiAgICAnIzgxMzc1MycsXG4gICAgJyM1NDFmM2YnLFxuICBdLFxuICBCdUduOiBhc1NjaGVtZShzY2hlbWVCdUduKSxcbiAgQnVQdTogYXNTY2hlbWUoc2NoZW1lQnVQdSksXG4gIEJ1cmc6IFtcbiAgICAnI2ZmYzZjNCcsXG4gICAgJyNmNGEzYTgnLFxuICAgICcjZTM4MTkxJyxcbiAgICAnI2NjNjA3ZCcsXG4gICAgJyNhZDQ2NmMnLFxuICAgICcjOGIzMDU4JyxcbiAgICAnIzY3MjA0NCcsXG4gIF0sXG4gIEJ1cmdZbDogW1xuICAgICcjZmJlNmM1JyxcbiAgICAnI2Y1YmE5OCcsXG4gICAgJyNlZThhODInLFxuICAgICcjZGM3MTc2JyxcbiAgICAnI2M4NTg2YycsXG4gICAgJyM5YzNmNWQnLFxuICAgICcjNzAyODRhJyxcbiAgXSxcbiAgQ29vbDogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZUNvb2wpLFxuICBEYXJrTWludDogW1xuICAgICcjZDJmYmQ0JyxcbiAgICAnI2E1ZGJjMicsXG4gICAgJyM3YmJjYjAnLFxuICAgICcjNTU5YzllJyxcbiAgICAnIzNhN2M4OScsXG4gICAgJyMyMzVkNzInLFxuICAgICcjMTIzZjVhJyxcbiAgXSxcbiAgRW1ybGQ6IHNjaGVtZUVtcmxkLFxuICBHbkJ1OiBhc1NjaGVtZShzY2hlbWVHbkJ1KSxcbiAgR3JheWlzaDogR1JBWUlTSCxcbiAgR3JlZW5zOiBhc1NjaGVtZShzY2hlbWVHcmVlbnMpLFxuICBHcmV5czogYXNTY2hlbWUoc2NoZW1lR3JleXMpLFxuICBJbmZlcm5vOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlSW5mZXJubyksXG4gIE1hZ2VudGE6IFtcbiAgICAnI2YzY2JkMycsXG4gICAgJyNlYWE5YmQnLFxuICAgICcjZGQ4OGFjJyxcbiAgICAnI2NhNjk5ZCcsXG4gICAgJyNiMTRkOGUnLFxuICAgICcjOTEzNTdkJyxcbiAgICAnIzZjMjE2NycsXG4gIF0sXG4gIE1hZ21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlTWFnbWEpLFxuICBNaW50OiBbXG4gICAgJyNlNGYxZTEnLFxuICAgICcjYjRkOWNjJyxcbiAgICAnIzg5YzBiNicsXG4gICAgJyM2M2E2YTAnLFxuICAgICcjNDQ4YzhhJyxcbiAgICAnIzI4NzI3NCcsXG4gICAgJyMwZDU4NWYnLFxuICBdLFxuICBPcmFuZ2VzOiBhc1NjaGVtZShzY2hlbWVPcmFuZ2VzKSxcbiAgT3JSZDogYXNTY2hlbWUoc2NoZW1lT3JSZCksXG4gIE9yWWVsOiBbXG4gICAgJyNlY2RhOWEnLFxuICAgICcjZWZjNDdlJyxcbiAgICAnI2YzYWQ2YScsXG4gICAgJyNmNzk0NWQnLFxuICAgICcjZjk3YjU3JyxcbiAgICAnI2Y2NjM1NicsXG4gICAgJyNlZTRkNWEnLFxuICBdLFxuICBQZWFjaDogW1xuICAgICcjZmRlMGM1JyxcbiAgICAnI2ZhY2JhNicsXG4gICAgJyNmOGI1OGInLFxuICAgICcjZjU5ZTcyJyxcbiAgICAnI2YyODU1ZCcsXG4gICAgJyNlZjZhNGMnLFxuICAgICcjZWI0YTQwJyxcbiAgXSxcbiAgUGxhc21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlUGxhc21hKSxcbiAgUGlua1lsOiBbXG4gICAgJyNmZWY2YjUnLFxuICAgICcjZmZkZDlhJyxcbiAgICAnI2ZmYzI4NScsXG4gICAgJyNmZmE2NzknLFxuICAgICcjZmE4YTc2JyxcbiAgICAnI2YxNmQ3YScsXG4gICAgJyNlMTUzODMnLFxuICBdLFxuICBQdUJ1OiBhc1NjaGVtZShzY2hlbWVQdUJ1KSxcbiAgUHVCdUduOiBhc1NjaGVtZShzY2hlbWVQdUJ1R24pLFxuICBQdVJkOiBhc1NjaGVtZShzY2hlbWVQdVJkKSxcbiAgUHVycDogW1xuICAgICcjZjNlMGY3JyxcbiAgICAnI2U0YzdmMScsXG4gICAgJyNkMWFmZTgnLFxuICAgICcjYjk5OGRkJyxcbiAgICAnIzlmODJjZScsXG4gICAgJyM4MjZkYmEnLFxuICAgICcjNjM1ODlmJyxcbiAgXSxcbiAgUHVycGxlczogYXNTY2hlbWUoc2NoZW1lUHVycGxlcyksXG4gIFB1cnBPcjogW1xuICAgICcjZjlkZGRhJyxcbiAgICAnI2YyYjljNCcsXG4gICAgJyNlNTk3YjknLFxuICAgICcjY2U3OGIzJyxcbiAgICAnI2FkNWZhZCcsXG4gICAgJyM4MzRiYTAnLFxuICAgICcjNTczYjg4JyxcbiAgXSxcbiAgUmRQdTogYXNTY2hlbWUoc2NoZW1lUmRQdSksXG4gIFJlZE9yOiBbXG4gICAgJyNmNmQyYTknLFxuICAgICcjZjViNzhlJyxcbiAgICAnI2YxOWM3YycsXG4gICAgJyNlYTgxNzEnLFxuICAgICcjZGQ2ODZjJyxcbiAgICAnI2NhNTI2OCcsXG4gICAgJyNiMTNmNjQnLFxuICBdLFxuICBSZWRzOiBhc1NjaGVtZShzY2hlbWVSZWRzKSxcbiAgU3Vuc2V0OiBbXG4gICAgJyNmM2U3OWInLFxuICAgICcjZmFjNDg0JyxcbiAgICAnI2Y4YTA3ZScsXG4gICAgJyNlYjdmODYnLFxuICAgICcjY2U2NjkzJyxcbiAgICAnI2EwNTlhMCcsXG4gICAgJyM1YzUzYTUnLFxuICBdLFxuICBTdW5zZXREYXJrOiBbXG4gICAgJyNmY2RlOWMnLFxuICAgICcjZmFhNDc2JyxcbiAgICAnI2YwNzQ2ZScsXG4gICAgJyNlMzRmNmYnLFxuICAgICcjZGMzOTc3JyxcbiAgICAnI2I5MjU3YScsXG4gICAgJyM3YzFkNmYnLFxuICBdLFxuICBUZWFsOiBzY2hlbWVUZWFsLFxuICBUZWFsR3JuOiBbXG4gICAgJyNiMGYyYmMnLFxuICAgICcjODllOGFjJyxcbiAgICAnIzY3ZGJhNScsXG4gICAgJyM0Y2M4YTMnLFxuICAgICcjMzhiMmEzJyxcbiAgICAnIzJjOThhMCcsXG4gICAgJyMyNTdkOTgnLFxuICBdLFxuICBWaXJpZGlzOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlVmlyaWRpcyksXG4gIFdhcm06IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVXYXJtKSxcbiAgWWxHbjogYXNTY2hlbWUoc2NoZW1lWWxHbiksXG4gIFlsR25CdTogYXNTY2hlbWUoc2NoZW1lWWxHbkJ1KSxcbiAgWWxPckJyOiBhc1NjaGVtZShzY2hlbWVZbE9yQnIpLFxuICBZbE9yUmQ6IGFzU2NoZW1lKHNjaGVtZVlsT3JSZCksXG59O1xuXG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhDT0xPUl9TQ0hFTUVTKTtcblxuY29uc3QgY29tcGxlbWVudGFyeSA9ICcjZjUyMDIwJztcbmNvbnN0IGJhc2VEaWZmQ29sb3IgPSAnIzE3YTViZSc7XG5cbmNvbnN0IGRpZmZDb2xvcnM6IERpZmZDb2xvcnMgPSB7XG4gIG5lZ2F0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBiYXNlRGlmZkNvbG9yXSxcbiAgICB9LFxuICB9LFxuICBwb3NpdGl2ZToge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IFtGTE9XX01JTl9DT0xPUiwgY29tcGxlbWVudGFyeV0sXG4gICAgfSxcbiAgfSxcbiAgbG9jYXRpb25BcmVhczoge1xuICAgIG91dGxpbmU6ICdyZ2JhKDkyLDExMiwxMjgsMC41KScsXG4gICAgbm9ybWFsOiAncmdiYSgyMjAsMjIwLDIyMCwwLjUpJyxcbiAgfSxcbiAgb3V0bGluZUNvbG9yOiAncmdiKDIzMCwyMzMsMjM3KScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd21hcENvbG9ycyhcbiAgc2V0dGluZ3NTdGF0ZTogU2V0dGluZ3NTdGF0ZSxcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICByZXR1cm4gZ2V0Q29sb3JzKFxuICAgIGZhbHNlLCAvLyBUT0RPOiBkaWZmTW9kZVxuICAgIHNldHRpbmdzU3RhdGUuY29sb3JTY2hlbWUsXG4gICAgc2V0dGluZ3NTdGF0ZS5kYXJrTW9kZSxcbiAgICBzZXR0aW5nc1N0YXRlLmZhZGVFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZUFtb3VudCxcbiAgICBzZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcnMoXG4gIGRpZmZNb2RlOiBib29sZWFuLFxuICBzY2hlbWVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGFya01vZGU6IGJvb2xlYW4sXG4gIGZhZGVFbmFibGVkOiBib29sZWFuLFxuICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGJvb2xlYW4sXG4gIGZhZGVBbW91bnQ6IG51bWJlcixcbiAgYW5pbWF0ZTogYm9vbGVhbixcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICBpZiAoZGlmZk1vZGUpIHtcbiAgICByZXR1cm4gZGlmZkNvbG9ycztcbiAgfVxuXG4gIGxldCBzY2hlbWUgPSAoc2NoZW1lS2V5ICYmIENPTE9SX1NDSEVNRVNbc2NoZW1lS2V5XSkgfHwgREVGQVVMVF9DT0xPUl9TQ0hFTUU7XG5cbiAgaWYgKGRhcmtNb2RlKSB7XG4gICAgc2NoZW1lID0gc2NoZW1lLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG4gIC8vIGlmIChhbmltYXRlKVxuICAvLyBpZiAoZmFkZUFtb3VudCA+IDApXG4gIHtcbiAgICBjb25zdCBpbmRpY2VzID0gcmFuZ2UoMCwgTWF0aC5tYXgoMTAsIHNjaGVtZS5sZW5ndGgpKTtcbiAgICBjb25zdCBOID0gaW5kaWNlcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZVNlcXVlbnRpYWwoaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWUpKS5kb21haW4oW1xuICAgICAgMCxcbiAgICAgIE4sXG4gICAgXSk7XG5cbiAgICBpZiAoIWZhZGVFbmFibGVkIHx8IGZhZGVBbW91bnQgPT09IDApIHtcbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKChjLCBpKSA9PiBjb2xvclNjYWxlKGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYW1vdW50ID0gc2NhbGVQb3coKVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgOiAxLzIuNSlcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAxMDAgOiA1MClcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAyMCA6IDUpXG4gICAgICAgIC8vIC5leHBvbmVudCgxLzIuNSlcbiAgICAgICAgLmV4cG9uZW50KDEuNSlcbiAgICAgICAgLmRvbWFpbihbTiwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKSwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMCwgZmFkZUFtb3VudC8xMDAqKGFuaW1hdGU/MjoxKV0pXG4gICAgICAgIC8vIC5yYW5nZShkYXJrTW9kZSA/IFsxLWZhZGVBbW91bnQvMTAwLCAxXSA6IFsxLCAxIC0gZmFkZUFtb3VudC8xMDBdKVxuICAgICAgICAvLyAucmFuZ2UoZGFya01vZGUgPyBbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSA6IFtmYWRlQW1vdW50LzEwMCwgMF0pXG4gICAgICAgIC8vIC5yYW5nZShbMSAtIGZhZGVBbW91bnQvMTAwLCAxXSlcbiAgICAgICAgLnJhbmdlKFswLCAoMiAqIGZhZGVBbW91bnQpIC8gMTAwXSk7XG5cbiAgICAgIHNjaGVtZSA9IGluZGljZXMubWFwKFxuICAgICAgICAoYywgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JTY2FsZShpKTtcbiAgICAgICAgICBjb25zdCBhID0gYW1vdW50KGkpO1xuICAgICAgICAgIGlmIChjb2xvciA9PSBudWxsIHx8IGEgPT0gbnVsbCkgcmV0dXJuICcjMDAwJztcbiAgICAgICAgICBjb25zdCBjb2wgPSBoY2woY29sb3IpO1xuICAgICAgICAgIGNvbC5sID0gZGFya01vZGUgPyBjb2wubCAtIGNvbC5sICogYSA6IGNvbC5sICsgKDEwMCAtIGNvbC5sKSAqIGE7XG4gICAgICAgICAgY29sLmMgPSBjb2wuYyAtIGNvbC5jICogKGEgLyA0KTtcbiAgICAgICAgICBpZiAoZmFkZU9wYWNpdHlFbmFibGVkKSB7XG4gICAgICAgICAgICBjb2wub3BhY2l0eSA9IGNvbC5vcGFjaXR5ICogKDEuMCAtIGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sLnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGludGVycG9sYXRlUmdiQmFzaXMoW2NvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnXSkoYW1vdW50KGkpKVxuICAgICAgICAvLyBpbnRlcnBvbGF0ZUhzbChjb2xvclNjYWxlKGkpLCBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJykoYW1vdW50KGkpKS50b1N0cmluZygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZSxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgb3V0Z29pbmc6IGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgIH0sXG4gICAgb3V0bGluZUNvbG9yOiBkYXJrTW9kZSA/ICcjMDAwJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVJnYmFCYXNpcyhjb2xvcnM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHNwbGluZSA9IGludGVycG9sYXRlQmFzaXM7XG4gIGNvbnN0IG4gPSBjb2xvcnMubGVuZ3RoO1xuICBsZXQgcjogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGc6IGFueSA9IG5ldyBBcnJheShuKSxcbiAgICBiOiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgb3BhY2l0eTogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGksXG4gICAgY29sb3I6IGFueTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICBvcGFjaXR5W2ldID0gY29sb3Iub3BhY2l0eSB8fCAwO1xuICB9XG4gIHIgPSBzcGxpbmUocik7XG4gIGcgPSBzcGxpbmUoZyk7XG4gIGIgPSBzcGxpbmUoYik7XG4gIG9wYWNpdHkgPSBzcGxpbmUob3BhY2l0eSk7XG4gIC8vIGNvbG9yLm9wYWNpdHkgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gKHQ6IG51bWJlcikge1xuICAgIGNvbG9yLnIgPSByKHQpO1xuICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgIHJldHVybiBjb2xvciArICcnO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgc2NoZW1lOiBzdHJpbmdbXSxcbiAgYW5pbWF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IENvbG9yU2NhbGUge1xuICBjb25zdCBzY2FsZSA9IHNjYWxlU2VxdWVudGlhbFBvdyhpbnRlcnBvbGF0ZVJnYmFCYXNpcyhzY2hlbWUpKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAuZXhwb25lbnQoYW5pbWF0ZSA/IDEgLyAyIDogMSAvIDMpXG4gICAgLmRvbWFpbihkb21haW4pO1xuXG4gIHJldHVybiAodmFsdWU6IG51bWJlcikgPT4gY29sb3JBc1JnYmEoc2NhbGUodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dDb2xvclNjYWxlKFxuICBjb2xvcnM6IENvbG9yc1JHQkEgfCBEaWZmQ29sb3JzUkdCQSxcbiAgbWFnbml0dWRlRXh0ZW50OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogKG1hZ25pdHVkZTogbnVtYmVyKSA9PiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IG1pbk1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFswXSA6IDA7XG4gIGNvbnN0IG1heE1hZ25pdHVkZSA9IG1hZ25pdHVkZUV4dGVudCA/IG1hZ25pdHVkZUV4dGVudFsxXSA6IDA7XG4gIGlmIChpc0RpZmZDb2xvcnNSR0JBKGNvbG9ycykpIHtcbiAgICBjb25zdCBwb3NTY2FsZSA9IGNyZWF0ZUZsb3dDb2xvclNjYWxlKFxuICAgICAgWzAsIG1heE1hZ25pdHVkZV0sXG4gICAgICBjb2xvcnMucG9zaXRpdmUuZmxvd3Muc2NoZW1lLFxuICAgICAgYW5pbWF0ZSxcbiAgICApO1xuICAgIGNvbnN0IG5lZ1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWluTWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5uZWdhdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG5cbiAgICByZXR1cm4gKG1hZ25pdHVkZTogbnVtYmVyKSA9PlxuICAgICAgbWFnbml0dWRlID49IDAgPyBwb3NTY2FsZShtYWduaXR1ZGUpIDogbmVnU2NhbGUobWFnbml0dWRlKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgWzAsIG1heE1hZ25pdHVkZSB8fCAwXSxcbiAgICBjb2xvcnMuZmxvd3Muc2NoZW1lLFxuICAgIGFuaW1hdGUsXG4gICk7XG4gIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+IHNjYWxlKG1hZ25pdHVkZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpZmZDb2xvcnMoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IENvbG9ycyxcbik6IGNvbG9ycyBpcyBEaWZmQ29sb3JzIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9ycykucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9yc1JHQkEgfCBDb2xvcnNSR0JBLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnNSR0JBIHtcbiAgcmV0dXJuIChjb2xvcnMgYXMgRGlmZkNvbG9yc1JHQkEpLnBvc2l0aXZlICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gIGNvbG9yczogTG9jYXRpb25BcmVhQ29sb3JzIHwgdW5kZWZpbmVkLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBjb25zdCBub3JtYWxDb2xvciA9IChjb2xvcnMgJiYgY29sb3JzLm5vcm1hbCkgfHwgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SO1xuICBjb25zdCBub3JtYWxDb2xvckhjbCA9IGhjbChub3JtYWxDb2xvcik7XG4gIGNvbnN0IGxvY2F0aW9uQXJlYXNOb3JtYWwgPSBjb2xvckFzUmdiYShub3JtYWxDb2xvcik7XG4gIHJldHVybiB7XG4gICAgbm9ybWFsOiBsb2NhdGlvbkFyZWFzTm9ybWFsLFxuICAgIGNvbm5lY3RlZDogY29sb3JBc1JnYmFPcihjb2xvcnMgJiYgY29sb3JzLmNvbm5lY3RlZCwgbG9jYXRpb25BcmVhc05vcm1hbCksXG4gICAgaGlnaGxpZ2h0ZWQ6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmhpZ2hsaWdodGVkLFxuICAgICAgb3BhY2lmeUhleChcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDEpLnRvU3RyaW5nKCksXG4gICAgICAgIDAuNSxcbiAgICAgICksXG4gICAgKSxcbiAgICBzZWxlY3RlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuc2VsZWN0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMikudG9TdHJpbmcoKSxcbiAgICAgICAgMC44LFxuICAgICAgKSxcbiAgICApLFxuICAgIG91dGxpbmU6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLm91dGxpbmUsXG4gICAgICBjb2xvckFzUmdiYShcbiAgICAgICAgbm9ybWFsQ29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDQpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9ycyB7XG4gIHNjaGVtZT86IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9ycyB7XG4gIGlubmVyPzogc3RyaW5nO1xuICBvdXRnb2luZz86IHN0cmluZztcbiAgaW5jb21pbmc/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBlbXB0eT86IHN0cmluZztcbiAgb3V0bGluZUVtcHR5TWl4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9ycyB7XG4gIG91dGxpbmU/OiBzdHJpbmc7XG4gIG5vcm1hbD86IHN0cmluZztcbiAgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xuICBjb25uZWN0ZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbG9ycyB7XG4gIGRhcmtNb2RlPzogYm9vbGVhbjtcbiAgbG9jYXRpb25BcmVhcz86IExvY2F0aW9uQXJlYUNvbG9ycztcbiAgZGltbWVkT3BhY2l0eT86IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dBbmRDaXJjbGVDb2xvcnMge1xuICBmbG93cz86IEZsb3dDb2xvcnM7XG4gIGxvY2F0aW9uQ2lyY2xlcz86IExvY2F0aW9uQ2lyY2xlQ29sb3JzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnMgZXh0ZW5kcyBCYXNlQ29sb3JzIHtcbiAgcG9zaXRpdmU/OiBGbG93QW5kQ2lyY2xlQ29sb3JzO1xuICBuZWdhdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG59XG5cbi8vIFRoZSB4eHhDb2xvcnNSR0JBIG9iamVjdHMgYXJlIG1pcnJvcmluZyB0aGUgaW5wdXQgY29sb3JzJyBvYmplY3RzLFxuLy8gYnV0IGNvbnZlcnRlZCB0byBSR0JBIGFuZCB3aXRoIGFsbCB0aGUgb21pdHRlZCBvbmVzIHNldCB0byBkZWZhdWx0c1xuLy8gb3IgZGVyaXZlZC5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NvbG9yc1JHQkEge1xuICBzY2hlbWU6IHN0cmluZ1tdO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkEge1xuICBpbm5lcjogUkdCQTtcbiAgb3V0Z29pbmc6IFJHQkE7XG4gIGluY29taW5nOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgZW1wdHk6IFJHQkE7XG4gIG91dGxpbmVFbXB0eU1peDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBvdXRsaW5lOiBSR0JBO1xuICBub3JtYWw6IFJHQkE7XG4gIHNlbGVjdGVkOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgY29ubmVjdGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb2xvcnNSR0JBIHtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGxvY2F0aW9uQXJlYXM6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkE7XG4gIGRpbW1lZE9wYWNpdHk6IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBmbG93czogRmxvd0NvbG9yc1JHQkE7XG4gIGxvY2F0aW9uQ2lyY2xlczogTG9jYXRpb25DaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnNSR0JBIGV4dGVuZHMgQmFzZUNvbG9yc1JHQkEge1xuICBwb3NpdGl2ZTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkE7XG4gIG5lZ2F0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgaW5wdXRDb2xvcnM6IEZsb3dBbmRDaXJjbGVDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU6IHN0cmluZ1tdLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBIHtcbiAgY29uc3QgZmxvd0NvbG9yU2NoZW1lID1cbiAgICAoaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3Muc2NoZW1lKSB8fFxuICAgIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU7XG4gIGNvbnN0IG1heEZsb3dDb2xvckhjbCA9IGhjbChmbG93Q29sb3JTY2hlbWVbZmxvd0NvbG9yU2NoZW1lLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzICYmIGlucHV0Q29sb3JzLmZsb3dzICYmIGlucHV0Q29sb3JzLmZsb3dzLmhpZ2hsaWdodGVkLFxuICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgwLjcpLnRvU3RyaW5nKCksXG4gICAgKSxcbiAgKTtcblxuICBjb25zdCBlbXB0eUNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycz8ubG9jYXRpb25DaXJjbGVzPy5lbXB0eSxcbiAgICBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJyxcbiAgKTtcbiAgY29uc3QgaW5uZXJDb2xvciA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyLFxuICAgIG1heEZsb3dDb2xvckhjbC50b1N0cmluZygpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IGZsb3dDb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodGVkOiBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgaW5uZXI6IGlubmVyQ29sb3IsXG4gICAgICBvdXRnb2luZzogY29sb3JBc1JnYmFPcihcbiAgICAgICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMub3V0Z29pbmcsXG4gICAgICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgICAgKSxcbiAgICAgIGluY29taW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbmNvbWluZyxcbiAgICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgxLjI1KS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIGhpZ2hsaWdodGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5oaWdobGlnaHRlZCxcbiAgICAgICAgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQsXG4gICAgICApLFxuICAgICAgZW1wdHk6IGVtcHR5Q29sb3IsXG4gICAgICBvdXRsaW5lRW1wdHlNaXg6IGlucHV0Q29sb3JzPy5sb2NhdGlvbkNpcmNsZXM/Lm91dGxpbmVFbXB0eU1peCA/PyAwLjQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZUNvbG9yc1JHQkEoXG4gIGNvbG9yczogQ29sb3JzIHwgRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IEJhc2VDb2xvcnNSR0JBIHtcbiAgY29uc3QgZGFya01vZGUgPSBjb2xvcnMgJiYgY29sb3JzLmRhcmtNb2RlID8gdHJ1ZSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGRhcmtNb2RlLFxuICAgIGxvY2F0aW9uQXJlYXM6IGdldExvY2F0aW9uQXJlYUNvbG9yc1JHQkEoXG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmxvY2F0aW9uQXJlYXMsXG4gICAgICBkYXJrTW9kZSxcbiAgICApLFxuICAgIG91dGxpbmVDb2xvcjogY29sb3JBc1JnYmEoXG4gICAgICAoY29sb3JzICYmIGNvbG9ycy5vdXRsaW5lQ29sb3IpIHx8IERFRkFVTFRfT1VUTElORV9DT0xPUixcbiAgICApLFxuICAgIGRpbW1lZE9wYWNpdHk6XG4gICAgICBjb2xvcnMgJiYgY29sb3JzLmRpbW1lZE9wYWNpdHkgIT0gbnVsbFxuICAgICAgICA/IGNvbG9ycy5kaW1tZWRPcGFjaXR5XG4gICAgICAgIDogREVGQVVMVF9ESU1NRURfT1BBQ0lUWSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yc1JHQkEoY29sb3JzOiBDb2xvcnMgfCB1bmRlZmluZWQpOiBDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIC4uLmdldEZsb3dBbmRDaXJjbGVDb2xvcnMoXG4gICAgICBjb2xvcnMsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZDb2xvcnNSR0JBKFxuICBjb2xvcnM6IERpZmZDb2xvcnMgfCB1bmRlZmluZWQsXG4pOiBEaWZmQ29sb3JzUkdCQSB7XG4gIGNvbnN0IGJhc2VDb2xvcnNSR0JBID0gZ2V0QmFzZUNvbG9yc1JHQkEoY29sb3JzKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29sb3JzUkdCQSxcbiAgICBwb3NpdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMucG9zaXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgICBuZWdhdGl2ZTogZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubmVnYXRpdmUsXG4gICAgICBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFLFxuICAgICAgYmFzZUNvbG9yc1JHQkEuZGFya01vZGUsXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYmFBc1N0cmluZyhjb2xvcjogUkdCQSk6IHN0cmluZyB7XG4gIHJldHVybiBgcmdiYSgke2NvbG9yLmpvaW4oJywnKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pZHBvaW50KGE6IG51bWJlciwgYjogbnVtYmVyLCB6ZXJvVG9PbmU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhICsgKGIgLSBhKSAqIHplcm9Ub09uZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1peENvbG9yc1JHQkEoXG4gIGNvbG9yMTogUkdCQSxcbiAgY29sb3IyOiBSR0JBLFxuICB6ZXJvVG9PbmU6IG51bWJlcixcbik6IFJHQkEge1xuICByZXR1cm4gY29sb3IxLm1hcCgodiwgaSkgPT4gbWlkcG9pbnQodiwgY29sb3IyW2ldLCB6ZXJvVG9PbmUpKSBhcyBSR0JBO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRDb2xvcnM7XG4iXX0=
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
|
|
2
|
-
import { ViewState } from './types';
|
|
1
|
+
import type { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
|
|
2
|
+
import type { ViewState } from './types';
|
|
3
3
|
export declare type LocationProperties = any;
|
|
4
|
-
export declare
|
|
4
|
+
export declare type GetViewStateOptions = {
|
|
5
5
|
pad?: number;
|
|
6
6
|
tileSize?: number;
|
|
7
7
|
minZoom?: number;
|
|
8
8
|
maxZoom?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
};
|
|
10
|
+
export declare function getViewStateForFeatures(featureCollection: FeatureCollection<GeometryObject, LocationProperties> | GeometryCollection, size: [number, number], opts?: GetViewStateOptions): ViewState & {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function getViewStateForLocations(locations: any[], getLocationCentroid: (location: any) => [number, number], size: [number, number], opts?: GetViewStateOptions): ViewState & {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
16
18
|
//# sourceMappingURL=getViewStateForLocations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAgB,SAAS,EAAC,MAAM,SAAS,CAAC;AAEtD,oBAAY,kBAAkB,GAAG,GAAG,CAAC;AAErC,oBAAY,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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,CAwB7C;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,GAAG,EAAE,EAChB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EACxD,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,CAY7C"}
|
|
@@ -9,8 +9,11 @@ export function getViewStateForFeatures(featureCollection, size, opts) {
|
|
|
9
9
|
x2 + pad * (x2 - x1),
|
|
10
10
|
y2 + pad * (y2 - y1),
|
|
11
11
|
];
|
|
12
|
+
const [width, height] = size;
|
|
12
13
|
const { center: [longitude, latitude], zoom, } = viewport(bounds, size, undefined, undefined, tileSize, true);
|
|
13
14
|
return {
|
|
15
|
+
width,
|
|
16
|
+
height,
|
|
14
17
|
longitude,
|
|
15
18
|
latitude,
|
|
16
19
|
zoom: Math.max(Math.min(maxZoom, zoom), minZoom),
|
|
@@ -27,4 +30,4 @@ export function getViewStateForLocations(locations, getLocationCentroid, size, o
|
|
|
27
30
|
})),
|
|
28
31
|
}, size, opts);
|
|
29
32
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQWlCakMsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxpQkFFc0IsRUFDdEIsSUFBc0IsRUFDdEIsSUFBMEI7SUFFMUIsTUFBTSxFQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxpQkFBd0IsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFnQjtRQUMxQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNwQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNwQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNwQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUNyQixDQUFDO0lBQ0YsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDN0IsTUFBTSxFQUNKLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFDN0IsSUFBSSxHQUNMLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFakUsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sU0FBUztRQUNULFFBQVE7UUFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDaEQsT0FBTyxFQUFFLENBQUM7UUFDVixLQUFLLEVBQUUsQ0FBQztLQUNULENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxTQUFnQixFQUNoQixtQkFBd0QsRUFDeEQsSUFBc0IsRUFDdEIsSUFBMEI7SUFFMUIsT0FBTyx1QkFBdUIsQ0FDNUI7UUFDRSxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztTQUMzQyxDQUFDLENBQUM7S0FDRyxFQUNSLElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JvdW5kaW5nQm94LCB2aWV3cG9ydH0gZnJvbSAnQG1hcGJveC9nZW8tdmlld3BvcnQnO1xuaW1wb3J0IHtnZW9Cb3VuZHN9IGZyb20gJ2QzLWdlbyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZlYXR1cmVDb2xsZWN0aW9uLFxuICBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gIEdlb21ldHJ5T2JqZWN0LFxufSBmcm9tICdnZW9qc29uJztcbmltcG9ydCB0eXBlIHtWaWV3cG9ydFByb3BzLCBWaWV3U3RhdGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMb2NhdGlvblByb3BlcnRpZXMgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIEdldFZpZXdTdGF0ZU9wdGlvbnMgPSB7XG4gIHBhZD86IG51bWJlcjtcbiAgdGlsZVNpemU/OiBudW1iZXI7XG4gIG1pblpvb20/OiBudW1iZXI7XG4gIG1heFpvb20/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1N0YXRlRm9yRmVhdHVyZXMoXG4gIGZlYXR1cmVDb2xsZWN0aW9uOlxuICAgIHwgRmVhdHVyZUNvbGxlY3Rpb248R2VvbWV0cnlPYmplY3QsIExvY2F0aW9uUHJvcGVydGllcz5cbiAgICB8IEdlb21ldHJ5Q29sbGVjdGlvbixcbiAgc2l6ZTogW251bWJlciwgbnVtYmVyXSxcbiAgb3B0cz86IEdldFZpZXdTdGF0ZU9wdGlvbnMsXG4pOiBWaWV3U3RhdGUgJiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9IHtcbiAgY29uc3Qge3BhZCA9IDAuMDUsIHRpbGVTaXplID0gNTEyLCBtaW5ab29tID0gMCwgbWF4Wm9vbSA9IDEwMH0gPSBvcHRzIHx8IHt9O1xuICBjb25zdCBbW3gxLCB5MV0sIFt4MiwgeTJdXSA9IGdlb0JvdW5kcyhmZWF0dXJlQ29sbGVjdGlvbiBhcyBhbnkpO1xuICBjb25zdCBib3VuZHM6IEJvdW5kaW5nQm94ID0gW1xuICAgIHgxIC0gcGFkICogKHgyIC0geDEpLFxuICAgIHkxIC0gcGFkICogKHkyIC0geTEpLFxuICAgIHgyICsgcGFkICogKHgyIC0geDEpLFxuICAgIHkyICsgcGFkICogKHkyIC0geTEpLFxuICBdO1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBzaXplO1xuICBjb25zdCB7XG4gICAgY2VudGVyOiBbbG9uZ2l0dWRlLCBsYXRpdHVkZV0sXG4gICAgem9vbSxcbiAgfSA9IHZpZXdwb3J0KGJvdW5kcywgc2l6ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRpbGVTaXplLCB0cnVlKTtcblxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGUsXG4gICAgem9vbTogTWF0aC5tYXgoTWF0aC5taW4obWF4Wm9vbSwgem9vbSksIG1pblpvb20pLFxuICAgIGJlYXJpbmc6IDAsXG4gICAgcGl0Y2g6IDAsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U3RhdGVGb3JMb2NhdGlvbnMoXG4gIGxvY2F0aW9uczogYW55W10sXG4gIGdldExvY2F0aW9uQ2VudHJvaWQ6IChsb2NhdGlvbjogYW55KSA9PiBbbnVtYmVyLCBudW1iZXJdLFxuICBzaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICBvcHRzPzogR2V0Vmlld1N0YXRlT3B0aW9ucyxcbik6IFZpZXdTdGF0ZSAmIHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0ge1xuICByZXR1cm4gZ2V0Vmlld1N0YXRlRm9yRmVhdHVyZXMoXG4gICAge1xuICAgICAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICAgICBnZW9tZXRyaWVzOiBsb2NhdGlvbnMubWFwKChsb2NhdGlvbikgPT4gKHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGdldExvY2F0aW9uQ2VudHJvaWQobG9jYXRpb24pLFxuICAgICAgfSkpLFxuICAgIH0gYXMgYW55LFxuICAgIHNpemUsXG4gICAgb3B0cyxcbiAgKTtcbn1cbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './colors';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
3
|
+
export * from './FlowmapState';
|
|
4
|
+
export * from './FlowmapSelectors';
|
|
5
5
|
export * from './time';
|
|
6
6
|
export * from './getViewStateForLocations';
|
|
7
|
-
export * from './provider/
|
|
8
|
-
export { default as
|
|
9
|
-
export type { default as
|
|
10
|
-
export { default as
|
|
7
|
+
export * from './provider/FlowmapDataProvider';
|
|
8
|
+
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
9
|
+
export type { default as FlowmapDataProvider } from './provider/FlowmapDataProvider';
|
|
10
|
+
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';
|
|
11
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":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,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;AACxF,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAC,OAAO,IAAI,yBAAyB,EAAC,MAAM,sCAAsC,CAAC;AAC1F,cAAc,sCAAsC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './colors';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
3
|
+
export * from './FlowmapState';
|
|
4
|
+
export * from './FlowmapSelectors';
|
|
5
5
|
export * from './time';
|
|
6
6
|
export * from './getViewStateForLocations';
|
|
7
|
-
export * from './provider/
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
|
|
7
|
+
export * from './provider/FlowmapDataProvider';
|
|
8
|
+
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
9
|
+
export { default as LocalFlowmapDataProvider } from './provider/LocalFlowmapDataProvider';
|
|
10
|
+
export { default as createWorkerDataProvider } from './provider/createWorkerDataProvider';
|
|
11
|
+
export { default as WorkerFlowmapDataProvider } from './provider/WorkerFlowmapDataProvider';
|
|
12
|
+
export * from './provider/WorkerFlowmapDataProvider';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFakYsT0FBTyxFQUFDLE9BQU8sSUFBSSx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxPQUFPLElBQUksd0JBQXdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDMUYsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9GbG93bWFwU2VsZWN0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyL0Zsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnN9IGZyb20gJy4vRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyc7XG5leHBvcnQgdHlwZSB7ZGVmYXVsdCBhcyBGbG93bWFwRGF0YVByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVyL0Zsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIExvY2FsRmxvd21hcERhdGFQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlci9Mb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZVdvcmtlckRhdGFQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlci9jcmVhdGVXb3JrZXJEYXRhUHJvdmlkZXInO1xuZXhwb3J0IHtkZWZhdWx0IGFzIFdvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXIvV29ya2VyRmxvd21hcERhdGFQcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyL1dvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXInO1xuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AggregateFlow, Cluster, LocationTotals } from '..';
|
|
2
|
+
import { FlowmapState } from '../FlowmapState';
|
|
3
|
+
import { ClusterNode, FlowmapData, FlowmapDataAccessors, LayersData, ViewportProps } from '../types';
|
|
4
|
+
export default interface FlowmapDataProvider<L, F> {
|
|
5
|
+
setAccessors(accessors: FlowmapDataAccessors<L, F>): void;
|
|
6
|
+
setFlowmapState(flowmapState: FlowmapState): Promise<void>;
|
|
7
|
+
getViewportForLocations(dims: [number, number]): Promise<ViewportProps | undefined>;
|
|
8
|
+
getFlowByIndex(index: number): Promise<F | AggregateFlow | undefined>;
|
|
9
|
+
getLocationById(id: string): Promise<L | Cluster | undefined>;
|
|
10
|
+
getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined>;
|
|
11
|
+
getTotalsForLocation(id: string): Promise<LocationTotals | undefined>;
|
|
12
|
+
getLayersData(): Promise<LayersData | undefined>;
|
|
13
|
+
}
|
|
14
|
+
export declare function isFlowmapData<L, F>(data: Record<string, any>): data is FlowmapData<L, F>;
|
|
15
|
+
export declare function isFlowmapDataProvider<L, F>(dataProvider: Record<string, any>): dataProvider is FlowmapDataProvider<L, F>;
|
|
16
|
+
//# sourceMappingURL=FlowmapDataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,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,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAE9D,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAQtE,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAClD;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,CAQ3B;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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function isFlowmapData(data) {
|
|
2
|
+
return (data &&
|
|
3
|
+
data.locations &&
|
|
4
|
+
data.flows &&
|
|
5
|
+
Array.isArray(data.locations) &&
|
|
6
|
+
Array.isArray(data.flows));
|
|
7
|
+
}
|
|
8
|
+
export function isFlowmapDataProvider(dataProvider) {
|
|
9
|
+
return (dataProvider &&
|
|
10
|
+
typeof dataProvider.setFlowmapState === 'function' &&
|
|
11
|
+
typeof dataProvider.getViewportForLocations === 'function' &&
|
|
12
|
+
typeof dataProvider.getFlowByIndex === 'function' &&
|
|
13
|
+
typeof dataProvider.getLocationById === 'function' &&
|
|
14
|
+
typeof dataProvider.getLocationByIndex === 'function' &&
|
|
15
|
+
typeof dataProvider.getLayersData === 'function');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdDQSxNQUFNLFVBQVUsYUFBYSxDQUMzQixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSTtRQUNKLElBQUksQ0FBQyxTQUFTO1FBQ2QsSUFBSSxDQUFDLEtBQUs7UUFDVixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxZQUFpQztJQUVqQyxPQUFPLENBQ0wsWUFBWTtRQUNaLE9BQU8sWUFBWSxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQ2xELE9BQU8sWUFBWSxDQUFDLHVCQUF1QixLQUFLLFVBQVU7UUFDMUQsT0FBTyxZQUFZLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFDakQsT0FBTyxZQUFZLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFDbEQsT0FBTyxZQUFZLENBQUMsa0JBQWtCLEtBQUssVUFBVTtRQUNyRCxPQUFPLFlBQVksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWdncmVnYXRlRmxvdywgQ2x1c3RlciwgTG9jYXRpb25BY2Nlc3NvcnMsIExvY2F0aW9uVG90YWxzfSBmcm9tICcuLic7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi4vRmxvd21hcFN0YXRlJztcbmltcG9ydCB7XG4gIENsdXN0ZXJOb2RlLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIExheWVyc0RhdGEsXG4gIFZpZXdwb3J0UHJvcHMsXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJmYWNlIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICBzZXRBY2Nlc3NvcnMoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPik6IHZvaWQ7XG5cbiAgc2V0Rmxvd21hcFN0YXRlKGZsb3dtYXBTdGF0ZTogRmxvd21hcFN0YXRlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBjbGVhckRhdGEoKTogdm9pZDtcblxuICBnZXRWaWV3cG9ydEZvckxvY2F0aW9ucyhcbiAgICBkaW1zOiBbbnVtYmVyLCBudW1iZXJdLFxuICApOiBQcm9taXNlPFZpZXdwb3J0UHJvcHMgfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldEZsb3dUb3RhbHMoKTogUHJvbWlzZTxGbG93VG90YWxzPjtcblxuICBnZXRGbG93QnlJbmRleChpbmRleDogbnVtYmVyKTogUHJvbWlzZTxGIHwgQWdncmVnYXRlRmxvdyB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0TG9jYXRpb25CeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEwgfCBDbHVzdGVyIHwgdW5kZWZpbmVkPjtcblxuICBnZXRMb2NhdGlvbkJ5SW5kZXgoaWR4OiBudW1iZXIpOiBQcm9taXNlPEwgfCBDbHVzdGVyTm9kZSB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0VG90YWxzRm9yTG9jYXRpb24oaWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25Ub3RhbHMgfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldExvY2F0aW9uc0luQmJveChcbiAgLy8gICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgLy8gKTogUHJvbWlzZTxBcnJheTxGbG93TG9jYXRpb24gfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWQ+O1xuXG4gIC8vIGdldExvY2F0aW9uc0ZvclNlYXJjaEJveCgpOiBQcm9taXNlPChGbG93TG9jYXRpb24gfCBDbHVzdGVyTm9kZSlbXSB8IHVuZGVmaW5lZD47XG5cbiAgZ2V0TGF5ZXJzRGF0YSgpOiBQcm9taXNlPExheWVyc0RhdGEgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG93bWFwRGF0YTxMLCBGPihcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGRhdGEgaXMgRmxvd21hcERhdGE8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGEgJiZcbiAgICBkYXRhLmxvY2F0aW9ucyAmJlxuICAgIGRhdGEuZmxvd3MgJiZcbiAgICBBcnJheS5pc0FycmF5KGRhdGEubG9jYXRpb25zKSAmJlxuICAgIEFycmF5LmlzQXJyYXkoZGF0YS5mbG93cylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPihcbiAgZGF0YVByb3ZpZGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZGF0YVByb3ZpZGVyIGlzIEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFQcm92aWRlciAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcFN0YXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRWaWV3cG9ydEZvckxvY2F0aW9ucyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXggPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRMYXllcnNEYXRhID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXX0=
|