@kepler.gl/utils 3.2.5 → 3.3.0-alpha.0
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/aggregation.d.ts +1 -2
- package/dist/application-config.d.ts +4 -4
- package/dist/arrow-data-container.d.ts +2 -2
- package/dist/data-container-interface.d.ts +1 -1
- package/dist/data-container-utils.d.ts +1 -1
- package/dist/data-container-utils.js +1 -1
- package/dist/data-row.d.ts +2 -2
- package/dist/data-scale-utils.d.ts +11 -11
- package/dist/data-scale-utils.js +1 -1
- package/dist/data-utils.d.ts +1 -1
- package/dist/dataset-utils.d.ts +1 -1
- package/dist/effect-utils.d.ts +11 -8
- package/dist/effect-utils.js +121 -13
- package/dist/export-map-html.js +2 -4
- package/dist/export-utils.d.ts +4 -4
- package/dist/export-utils.js +1 -1
- package/dist/filter-utils.d.ts +6 -6
- package/dist/gl-utils.d.ts +7 -1
- package/dist/gl-utils.js +106 -15
- package/dist/index.d.ts +1 -1
- package/dist/index.js +15 -8
- package/dist/indexed-data-container.d.ts +2 -2
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +4 -5
- package/dist/map-style-utils/mapbox-utils.d.ts +2 -2
- package/dist/map-utils.d.ts +1 -1
- package/dist/notifications-utils.d.ts +4 -4
- package/dist/plot.d.ts +10 -10
- package/dist/row-data-container.d.ts +2 -2
- package/dist/utils.d.ts +3 -3
- package/package.json +8 -8
package/dist/aggregation.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ValueOf } from '@kepler.gl/types';
|
|
2
2
|
import { AggregationTypes } from '@kepler.gl/constants';
|
|
3
3
|
export declare const getFrequency: (data: any[], accessor?: (any: any) => any) => {
|
|
4
|
-
[key: string]: number;
|
|
5
|
-
[key: number]: number;
|
|
4
|
+
[key: string | number]: number;
|
|
6
5
|
};
|
|
7
6
|
export declare const getMode: (data: any, accessor: any) => string;
|
|
8
7
|
export declare const countUnique: (data: any, accessor?: (d: any) => any) => number;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { MapLib, MapRef } from 'react-map-gl';
|
|
2
2
|
import type { BaseMapLibraryType } from '@kepler.gl/constants';
|
|
3
3
|
import type { DatabaseAdapter } from './application-config-types';
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
4
|
+
export type MapLibInstance = MapLib<any>;
|
|
5
|
+
export type GetMapRef = ReturnType<MapRef['getMap']>;
|
|
6
|
+
export type BaseMapLibraryConfig = {
|
|
7
7
|
getMapLib: () => Promise<MapLibInstance>;
|
|
8
8
|
mapLibAttributionCssClass: string;
|
|
9
9
|
mapLibCssClass: string;
|
|
@@ -14,7 +14,7 @@ export declare type BaseMapLibraryConfig = {
|
|
|
14
14
|
* A mechanism to override default Kepler values/settings so that we
|
|
15
15
|
* without having to make application-specific changes to the kepler repo.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export type KeplerApplicationConfig = {
|
|
18
18
|
/** Default name of export HTML file, can be overridden by user */
|
|
19
19
|
defaultHtmlName?: string;
|
|
20
20
|
defaultImageName?: string;
|
|
@@ -3,7 +3,7 @@ import * as arrow from 'apache-arrow';
|
|
|
3
3
|
import { DATA_TYPES as AnalyzerDATA_TYPES } from 'type-analyzer';
|
|
4
4
|
import { DataContainerInterface, RangeOptions } from './data-container-interface';
|
|
5
5
|
import { DataRow, SharedRowOptions } from './data-row';
|
|
6
|
-
|
|
6
|
+
type ArrowDataContainerInput = {
|
|
7
7
|
cols: arrow.Vector[];
|
|
8
8
|
fields?: ProtoDatasetField[];
|
|
9
9
|
arrowTable?: arrow.Table;
|
|
@@ -70,7 +70,7 @@ export declare class ArrowDataContainer implements DataContainerInterface {
|
|
|
70
70
|
valueAt(rowIndex: number, columnIndex: number): any;
|
|
71
71
|
row(rowIndex: number, sharedRow?: SharedRowOptions): DataRow;
|
|
72
72
|
rowAsArray(rowIndex: number): any[];
|
|
73
|
-
rows(sharedRow: SharedRowOptions):
|
|
73
|
+
rows(sharedRow: SharedRowOptions): Generator<DataRow, void, unknown>;
|
|
74
74
|
column(columnIndex: number): Generator<any, void, unknown>;
|
|
75
75
|
getColumn(columnIndex: number): arrow.Vector;
|
|
76
76
|
getField(columnIndex: number): ProtoDatasetField;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DataContainerInterface } from './data-container-interface';
|
|
2
2
|
import { ProtoDatasetField } from '@kepler.gl/types';
|
|
3
3
|
import * as arrow from 'apache-arrow';
|
|
4
|
-
export
|
|
4
|
+
export type DataContainerOptions = {
|
|
5
5
|
inputDataFormat?: string;
|
|
6
6
|
fields?: ProtoDatasetField[];
|
|
7
7
|
arrowTable?: arrow.Table;
|
|
@@ -72,4 +72,4 @@ function getSampleData(dataContainer) {
|
|
|
72
72
|
}
|
|
73
73
|
return createIndexedDataContainer(dataContainer, indices);
|
|
74
74
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXJyb3dEYXRhQ29udGFpbmVyIiwicmVxdWlyZSIsIl9yb3dEYXRhQ29udGFpbmVyIiwiX2luZGV4ZWREYXRhQ29udGFpbmVyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJEYXRhRm9ybSIsImV4cG9ydHMiLCJST1dTX0FSUkFZIiwiQ09MU19BUlJBWSIsImRlZmF1bHRPcHRpb25zIiwiaW5wdXREYXRhRm9ybWF0IiwiY3JlYXRlRGF0YUNvbnRhaW5lciIsImRhdGEiLCJvcHRpb25zIiwidW5kZWZpbmVkIiwiUm93RGF0YUNvbnRhaW5lciIsInJvd3MiLCJmaWVsZHMiLCJBcnJvd0RhdGFDb250YWluZXIiLCJjb2xzIiwiYXJyb3dUYWJsZSIsIkVycm9yIiwiY3JlYXRlSW5kZXhlZERhdGFDb250YWluZXIiLCJkYXRhQ29udGFpbmVyIiwiaW5kaWNlcyIsIkluZGV4ZWREYXRhQ29udGFpbmVyIiwiZ2V0U2FtcGxlRGF0YSIsInNhbXBsZVNpemUiLCJudW1iZXJPZlJvd3MiLCJudW1Sb3dzIiwic2FtcGxlU3RlcCIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImkiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS1jb250YWluZXItdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtBcnJvd0RhdGFDb250YWluZXJ9IGZyb20gJy4vYXJyb3ctZGF0YS1jb250YWluZXInO1xuaW1wb3J0IHtSb3dEYXRhQ29udGFpbmVyfSBmcm9tICcuL3Jvdy1kYXRhLWNvbnRhaW5lcic7XG5pbXBvcnQge0luZGV4ZWREYXRhQ29udGFpbmVyfSBmcm9tICcuL2luZGV4ZWQtZGF0YS1jb250YWluZXInO1xuXG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcblxuZXhwb3J0IHR5cGUgRGF0YUNvbnRhaW5lck9wdGlvbnMgPSB7XG4gIGlucHV0RGF0YUZvcm1hdD86IHN0cmluZzsgLy8gb25lIG9mIERhdGFGb3JtXG4gIGZpZWxkcz86IFByb3RvRGF0YXNldEZpZWxkW107XG4gIGFycm93VGFibGU/
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXJyb3dEYXRhQ29udGFpbmVyIiwicmVxdWlyZSIsIl9yb3dEYXRhQ29udGFpbmVyIiwiX2luZGV4ZWREYXRhQ29udGFpbmVyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJEYXRhRm9ybSIsImV4cG9ydHMiLCJST1dTX0FSUkFZIiwiQ09MU19BUlJBWSIsImRlZmF1bHRPcHRpb25zIiwiaW5wdXREYXRhRm9ybWF0IiwiY3JlYXRlRGF0YUNvbnRhaW5lciIsImRhdGEiLCJvcHRpb25zIiwidW5kZWZpbmVkIiwiUm93RGF0YUNvbnRhaW5lciIsInJvd3MiLCJmaWVsZHMiLCJBcnJvd0RhdGFDb250YWluZXIiLCJjb2xzIiwiYXJyb3dUYWJsZSIsIkVycm9yIiwiY3JlYXRlSW5kZXhlZERhdGFDb250YWluZXIiLCJkYXRhQ29udGFpbmVyIiwiaW5kaWNlcyIsIkluZGV4ZWREYXRhQ29udGFpbmVyIiwiZ2V0U2FtcGxlRGF0YSIsInNhbXBsZVNpemUiLCJudW1iZXJPZlJvd3MiLCJudW1Sb3dzIiwic2FtcGxlU3RlcCIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImkiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS1jb250YWluZXItdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtBcnJvd0RhdGFDb250YWluZXJ9IGZyb20gJy4vYXJyb3ctZGF0YS1jb250YWluZXInO1xuaW1wb3J0IHtSb3dEYXRhQ29udGFpbmVyfSBmcm9tICcuL3Jvdy1kYXRhLWNvbnRhaW5lcic7XG5pbXBvcnQge0luZGV4ZWREYXRhQ29udGFpbmVyfSBmcm9tICcuL2luZGV4ZWQtZGF0YS1jb250YWluZXInO1xuXG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcblxuZXhwb3J0IHR5cGUgRGF0YUNvbnRhaW5lck9wdGlvbnMgPSB7XG4gIGlucHV0RGF0YUZvcm1hdD86IHN0cmluZzsgLy8gb25lIG9mIERhdGFGb3JtXG4gIGZpZWxkcz86IFByb3RvRGF0YXNldEZpZWxkW107XG4gIGFycm93VGFibGU/OiBhcnJvdy5UYWJsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBEYXRhRm9ybSA9IHtcbiAgUk9XU19BUlJBWTogJ1JPV1NfQVJSQVknLFxuICBDT0xTX0FSUkFZOiAnQ09MU19BUlJBWSdcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBEYXRhQ29udGFpbmVyT3B0aW9ucyA9IHtcbiAgaW5wdXREYXRhRm9ybWF0OiBEYXRhRm9ybS5ST1dTX0FSUkFZXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkYXRhIGNvbnRhaW5lciB3cmFwcGVyIGZvciB0aGUgZGF0YS5cbiAqIEBwYXJhbSBkYXRhIERhdGEuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zLlxuICogQHJldHVybnMgQSBkYXRhIGNvbnRhaW5lciBvYmplY3Qgd2hpY2ggaXMgYmFzZWQgb24gZGF0YSBhbmQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURhdGFDb250YWluZXIoXG4gIGRhdGE6IGFueVtdLFxuICBvcHRpb25zOiBEYXRhQ29udGFpbmVyT3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zXG4pOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlIHtcbiAgb3B0aW9ucyA9IHsuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9uc307XG5cbiAgaWYgKG9wdGlvbnMuaW5wdXREYXRhRm9ybWF0ID09PSBEYXRhRm9ybS5ST1dTX0FSUkFZKSB7XG4gICAgcmV0dXJuIG5ldyBSb3dEYXRhQ29udGFpbmVyKHtyb3dzOiBkYXRhLCBmaWVsZHM6IG9wdGlvbnMuZmllbGRzfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5pbnB1dERhdGFGb3JtYXQgPT09IERhdGFGb3JtLkNPTFNfQVJSQVkpIHtcbiAgICByZXR1cm4gbmV3IEFycm93RGF0YUNvbnRhaW5lcih7XG4gICAgICBjb2xzOiBkYXRhLFxuICAgICAgZmllbGRzOiBvcHRpb25zLmZpZWxkcyxcbiAgICAgIGFycm93VGFibGU6IG9wdGlvbnMuYXJyb3dUYWJsZVxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYSBkYXRhIGNvbnRhaW5lcjogbm90IGltcGxlbWVudGVkIGZvcm1hdCcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkYXRhIGNvbnRhaW5lciB3cmFwcGVyIGFyb3VuZCBhbm90aGVyIGRhdGEgY29udGFpbmVyLlxuICogQHBhcmFtIGRhdGFDb250YWluZXIgUGFyZW50IGRhdGEgY29udGFpbmVyLlxuICogQHBhcmFtIGluZGljZXMgQW4gYXJyYXkgb2Ygcm93IGluZGljZXMgaW4gdGhlIHBhcmVudCBkYXRhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4ZWREYXRhQ29udGFpbmVyKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBpbmRpY2VzOiBudW1iZXJbXVxuKTogRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIHJldHVybiBuZXcgSW5kZXhlZERhdGFDb250YWluZXIoZGF0YUNvbnRhaW5lciwgaW5kaWNlcyk7XG59XG5cbi8qKlxuICogR2V0IGEgc2FtcGxlIG9mIHJvd3MgZnJvbSBhIGRhdGEgY29udGFpbmVyLlxuICogQHBhcmFtIGRhdGFDb250YWluZXIgRGF0YSBjb250YWluZXIgdG8gZ2V0IHNhbXBsZXMgZnJvbS5cbiAqIEBwYXJhbSBzYW1wbGVTaXplIE1heCBudW1iZXIgb2Ygc2FtcGxlcy5cbiAqIEByZXR1cm5zIEEgZGF0YSBjb250YWluZXIgd2hpY2ggY29udGFpbnMgc2FtcGxlcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZURhdGEoXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHNhbXBsZVNpemUgPSA1MDBcbik6IERhdGFDb250YWluZXJJbnRlcmZhY2Uge1xuICBjb25zdCBudW1iZXJPZlJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgY29uc3Qgc2FtcGxlU3RlcCA9IE1hdGgubWF4KE1hdGguZmxvb3IobnVtYmVyT2ZSb3dzIC8gc2FtcGxlU2l6ZSksIDEpO1xuXG4gIGNvbnN0IGluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZSb3dzOyBpICs9IHNhbXBsZVN0ZXApIHtcbiAgICBpbmRpY2VzLnB1c2goaSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlSW5kZXhlZERhdGFDb250YWluZXIoZGF0YUNvbnRhaW5lciwgaW5kaWNlcyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsbUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxxQkFBQSxHQUFBRixPQUFBO0FBQThELFNBQUFHLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBTDlEO0FBQ0E7QUFnQk8sSUFBTW9CLFFBQVEsR0FBQUMsT0FBQSxDQUFBRCxRQUFBLEdBQUc7RUFDdEJFLFVBQVUsRUFBRSxZQUFZO0VBQ3hCQyxVQUFVLEVBQUU7QUFDZCxDQUFDO0FBRUQsSUFBTUMsY0FBb0MsR0FBRztFQUMzQ0MsZUFBZSxFQUFFTCxRQUFRLENBQUNFO0FBQzVCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ksbUJBQW1CQSxDQUNqQ0MsSUFBVyxFQUVhO0VBQUEsSUFEeEJDLE9BQTZCLEdBQUFmLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFnQixTQUFBLEdBQUFoQixTQUFBLE1BQUdXLGNBQWM7RUFFOUNJLE9BQU8sR0FBQWhCLGFBQUEsQ0FBQUEsYUFBQSxLQUFPWSxjQUFjLEdBQUtJLE9BQU8sQ0FBQztFQUV6QyxJQUFJQSxPQUFPLENBQUNILGVBQWUsS0FBS0wsUUFBUSxDQUFDRSxVQUFVLEVBQUU7SUFDbkQsT0FBTyxJQUFJUSxrQ0FBZ0IsQ0FBQztNQUFDQyxJQUFJLEVBQUVKLElBQUk7TUFBRUssTUFBTSxFQUFFSixPQUFPLENBQUNJO0lBQU0sQ0FBQyxDQUFDO0VBQ25FLENBQUMsTUFBTSxJQUFJSixPQUFPLENBQUNILGVBQWUsS0FBS0wsUUFBUSxDQUFDRyxVQUFVLEVBQUU7SUFDMUQsT0FBTyxJQUFJVSxzQ0FBa0IsQ0FBQztNQUM1QkMsSUFBSSxFQUFFUCxJQUFJO01BQ1ZLLE1BQU0sRUFBRUosT0FBTyxDQUFDSSxNQUFNO01BQ3RCRyxVQUFVLEVBQUVQLE9BQU8sQ0FBQ087SUFDdEIsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNQyxLQUFLLENBQUMsMkRBQTJELENBQUM7QUFDMUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLDBCQUEwQkEsQ0FDeENDLGFBQXFDLEVBQ3JDQyxPQUFpQixFQUNPO0VBQ3hCLE9BQU8sSUFBSUMsMENBQW9CLENBQUNGLGFBQWEsRUFBRUMsT0FBTyxDQUFDO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGFBQWFBLENBQzNCSCxhQUFxQyxFQUViO0VBQUEsSUFEeEJJLFVBQVUsR0FBQTdCLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFnQixTQUFBLEdBQUFoQixTQUFBLE1BQUcsR0FBRztFQUVoQixJQUFNOEIsWUFBWSxHQUFHTCxhQUFhLENBQUNNLE9BQU8sQ0FBQyxDQUFDO0VBQzVDLElBQU1DLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNELElBQUksQ0FBQ0UsS0FBSyxDQUFDTCxZQUFZLEdBQUdELFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUVyRSxJQUFNSCxPQUFpQixHQUFHLEVBQUU7RUFDNUIsS0FBSyxJQUFJVSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdOLFlBQVksRUFBRU0sQ0FBQyxJQUFJSixVQUFVLEVBQUU7SUFDakROLE9BQU8sQ0FBQzdCLElBQUksQ0FBQ3VDLENBQUMsQ0FBQztFQUNqQjtFQUVBLE9BQU9aLDBCQUEwQixDQUFDQyxhQUFhLEVBQUVDLE9BQU8sQ0FBQztBQUMzRCIsImlnbm9yZUxpc3QiOltdfQ==
|
package/dist/data-row.d.ts
CHANGED
|
@@ -6,13 +6,13 @@ import { DataContainerInterface } from './data-container-interface';
|
|
|
6
6
|
* - A DataRow object indicates that the row should be used as a temporary shared row.
|
|
7
7
|
* When used, the content of the shared row isn't preserved between calls.
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
9
|
+
export type SharedRowOptions = DataRow | boolean | undefined;
|
|
10
10
|
/**
|
|
11
11
|
* Return type for createSharedRow:
|
|
12
12
|
* - DataRow object that should be used as shared row.
|
|
13
13
|
* - Falsy values indicate that shared row object shouldn't be used.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export type SharedRowOptionsResult = DataRow | false | undefined;
|
|
16
16
|
export declare class DataRow {
|
|
17
17
|
_dataContainer: DataContainerInterface | null;
|
|
18
18
|
_rowIndex: number;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { AggregatedBin, ColorMap, ColorRange, HexColor, KeplerLayer as Layer, MapState, VisualChannel, VisualChannelDomain, RGBColor, RGBAColor, ColorUI, Field } from '@kepler.gl/types';
|
|
2
2
|
import { DataContainerInterface } from './data-container-interface';
|
|
3
|
-
export
|
|
3
|
+
export type ColorBreak = {
|
|
4
4
|
data: HexColor;
|
|
5
5
|
label: string;
|
|
6
6
|
range: number[];
|
|
7
7
|
inputs: number[];
|
|
8
8
|
};
|
|
9
|
-
export
|
|
9
|
+
export type ColorBreakOrdinal = {
|
|
10
10
|
data: HexColor;
|
|
11
11
|
label: string | number | string[] | number[] | null;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
export type D3ScaleFunction = Record<string, any> & ((x: any) => any);
|
|
14
|
+
type FilterProps = any;
|
|
15
|
+
type KeplerTable = any;
|
|
16
|
+
export type LabelFormat = (n: number, type?: string) => string;
|
|
17
|
+
type dataValueAccessor = <T>(param: T) => T;
|
|
18
|
+
type dataContainerValueAccessor = (d: {
|
|
19
19
|
index: number;
|
|
20
20
|
}, dc: DataContainerInterface) => any;
|
|
21
|
-
|
|
21
|
+
type sort = (a: any, b: any) => any;
|
|
22
22
|
/**
|
|
23
23
|
* return quantile domain for an array of data
|
|
24
24
|
*/
|
|
@@ -35,7 +35,7 @@ export declare function getLinearDomain(data: number[], valueAccessor?: dataValu
|
|
|
35
35
|
* return linear domain for an array of data. A log scale domain cannot contain 0
|
|
36
36
|
*/
|
|
37
37
|
export declare function getLogDomain(data: any[], valueAccessor: dataValueAccessor): [number, number];
|
|
38
|
-
export
|
|
38
|
+
export type DomainStops = {
|
|
39
39
|
stops: number[];
|
|
40
40
|
z: number[];
|
|
41
41
|
};
|
|
@@ -43,7 +43,7 @@ export declare type DomainStops = {
|
|
|
43
43
|
* whether field domain is stops
|
|
44
44
|
*/
|
|
45
45
|
export declare function isDomainStops(domain: unknown): domain is DomainStops;
|
|
46
|
-
export
|
|
46
|
+
export type DomainQuantiles = {
|
|
47
47
|
quantiles: number[];
|
|
48
48
|
z: number[];
|
|
49
49
|
};
|
package/dist/data-scale-utils.js
CHANGED
|
@@ -617,4 +617,4 @@ function initCustomPaletteByCustomScale(_ref9) {
|
|
|
617
617
|
};
|
|
618
618
|
return customPalette;
|
|
619
619
|
}
|
|
620
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbW9tZW50IiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9jb2xvclV0aWxzIiwiX2RhdGFVdGlscyIsIl9maWx0ZXJVdGlscyIsIl91dGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZ2V0UXVhbnRpbGVEb21haW4iLCJkYXRhIiwidmFsdWVBY2Nlc3NvciIsInNvcnRGdW5jIiwidmFsdWVzIiwibWFwIiwibm90TnVsbG9yVW5kZWZpbmVkIiwic29ydCIsImdldE9yZGluYWxEb21haW4iLCJkYXRhQ29udGFpbmVyIiwibWFwSW5kZXgiLCJ1bmlxdWUiLCJnZXRMaW5lYXJEb21haW4iLCJyYW5nZSIsImV4dGVudCIsImQiLCJpIiwidW5kZWZpbmVkIiwiZ2V0TG9nRG9tYWluIiwiX2dldExpbmVhckRvbWFpbiIsIl9nZXRMaW5lYXJEb21haW4yIiwiX3NsaWNlZFRvQXJyYXkyIiwiZDAiLCJkMSIsImlzRG9tYWluU3RvcHMiLCJkb21haW4iLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5Iiwic3RvcHMiLCJ6IiwiaXNEb21haW5RdWFudGlsZSIsInF1YW50aWxlcyIsImdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzIiwiYnVja2V0cyIsInRocmVzaG9sZHMiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBvc2l0aW9uIiwiZDNRdWFudGlsZSIsImdldERvbWFpblN0ZXBzYnlab29tIiwic3RlcHMiLCJiaXNlY3RMZWZ0IiwiTWF0aCIsIm1heCIsImdldFNjYWxlRnVuY3Rpb24iLCJzY2FsZSIsImZpeGVkIiwic2NhbGVGdW5jdGlvbiIsIlNDQUxFX0ZVTkMiLCJzY2FsZVR5cGUiLCJnZXRUaHJlc2hvbGRMYWJlbHMiLCJsYWJlbEZvcm1hdCIsImdlbkxlbmd0aCIsImludmVydCIsImludmVydEV4dGVudCIsImlucHV0cyIsInJldmVyc2VGb3JtYXROdW1iZXIiLCJsYWJlbCIsImNvbmNhdCIsImdldFNjYWxlTGFiZWxzIiwiY3VzdG9tU2NhbGVMYWJlbEZvcm1hdCIsIm4iLCJmb3JtYXROdW1iZXIiLCJnZXRRdWFudExlZ2VuZHMiLCJ0aHJlc2hvbGRMYWJlbEZvcm1hdCIsInR5cGUiLCJsYWJlbHMiLCJpbmRleCIsInJnYlRvSGV4IiwiZ2V0T3JkaW5hbExlZ2VuZHMiLCJkYXR1bSIsImlzUmdiQ29sb3IiLCJkZWZhdWx0Rm9ybWF0IiwiZ2V0VGltZUxhYmVsRm9ybWF0IiwiZm9ybWF0dGVyIiwiZ2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXIiLCJ2YWwiLCJtb21lbnQiLCJ1dGMiLCJmb3JtYXQiLCJnZXRRdWFudExhYmVsRm9ybWF0IiwiZmllbGRUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiaXNOdW1iZXIiLCJnZXRMZWdlbmRPZlNjYWxlIiwiX3JlZiIsImJ5Wm9vbSIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsImN1c3RvbU9yZGluYWwiLCJzdHJpbmciLCJmb3JtYXRMYWJlbCIsImdldExheWVyQ29sb3JTY2FsZSIsIl9yZWYyIiwibGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJ2aXN1YWxDaGFubmVsIiwiY29uZmlnIiwidmlzQ29uZmlnIiwiZmllbGQiLCJjb2xvckJyZWFrcyIsImNvbG9yQnJlYWtzVG9Db2xvck1hcCIsImdldFZpc3VhbENoYW5uZWxTY2FsZUJ5Wm9vbSIsIl9yZWYzIiwiX3NjYWxlIiwibWFwU3RhdGUiLCJfbGF5ZXIkbWV0YSIsIm1ldGEiLCJnZXRab29tIiwiem9vbSIsImdldENhdGVnb3JpY2FsQ29sb3JNYXAiLCJjb2xvcnMiLCJ1bmlxdWVWYWx1ZXMiLCJjb2xvck1hcCIsImNvbG9yIiwibGFzdEluZGV4IiwiYXNzaWduQ291bnQiLCJtaW4iLCJhZ2dyZWdhdGVkVmFsdWVzIiwidmFsdWUiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MiLCJfcmVmNCIsIl9yZWY1IiwiY29sb3JCcmVha3NUb0NhdGVnb3JpY2FsQ29sb3JNYXAiLCJ1bmlxIiwiY2IiLCJjb2xvckJyZWFrIiwiY29sb3JNYXBUb0NvbG9yQnJlYWtzIiwiX3JlZjYiLCJfcmVmNyIsIkluZmluaXR5IiwiaXNOdW1lcmljQ29sb3JCcmVha3MiLCJCb29sZWFuIiwiZ2V0SGlzdG9ncmFtRG9tYWluIiwiX3JlZjgiLCJhZ2dyZWdhdGVkQmlucyIsImNvbHVtblN0YXRzIiwiZGF0YXNldCIsImZpZWxkVmFsdWVBY2Nlc3NvciIsImRvbWFpbk1pbiIsIlBPU0lUSVZFX0lORklOSVRZIiwiZG9tYWluTWF4IiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJuVmFsaWQiLCJkb21haW5TdW0iLCJiaW4iLCJtZWFuIiwiYWxsSW5kZXhlcyIsIngiLCJoaXN0b2dyYW1NZWFuIiwicmVzZXRDYXRlZ29yaWNhbENvbG9yTWFwQnlJbmRleCIsIm5ld0NvbG9yTWFwIiwiY20iLCJzZWxlY3RSZXN0Q2F0ZWdvcmljYWxDb2xvck1hcEJ5SW5kZXgiLCJ1bmlxVmFsdWVEaWN0IiwiZnJvbUVudHJpZXMiLCJ0b0FycmF5IiwidiIsInJlc3QiLCJyZW1vdmVDYXRlZ29yaWNhbFZhbHVlRnJvbUNvbG9yTWFwIiwiaXRlbSIsImN1cnJlbnRVbmlxdWVWYWx1ZXMiLCJ1cGRhdGVkVW5pcXVlVmFsdWVzIiwiYWRkQ2F0ZWdvcmljYWxWYWx1ZXNUb0NvbG9yTWFwIiwiaXRlbXMiLCJpbmNsdWRlcyIsImdldENhdGVnb3JpY2FsQ29sb3JTY2FsZSIsImNvbG9yRG9tYWluIiwiY29sb3JSYW5nZSIsInVzZVJnYiIsImNNYXAiLCJoZXhUb1JnYiIsInVua25vd24iLCJOT19WQUxVRV9DT0xPUiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIl9yZWY5Iiwib3JkaW5hbERvbWFpbiIsImN1c3RvbVBhbGV0dGVOYW1lIiwibmFtZSIsInJldXNlQ29sb3JNYXAiLCJjdXN0b21QYWxldHRlIiwiY2F0ZWdvcnkiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS1zY2FsZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jpc2VjdExlZnQsIHF1YW50aWxlU29ydGVkIGFzIGQzUXVhbnRpbGUsIGV4dGVudH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVMsIFNDQUxFX0ZVTkMsIFNDQUxFX1RZUEVTLCBOT19WQUxVRV9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuLy8gaW1wb3J0IHtGaWx0ZXJQcm9wcywgS2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIENvbG9yTWFwLFxuICBDb2xvclJhbmdlLFxuICBIZXhDb2xvcixcbiAgS2VwbGVyTGF5ZXIgYXMgTGF5ZXIsXG4gIE1hcFN0YXRlLFxuICBWaXN1YWxDaGFubmVsLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBSR0JDb2xvcixcbiAgUkdCQUNvbG9yLFxuICBDb2xvclVJLFxuICBGaWVsZFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtpc1JnYkNvbG9yLCByZ2JUb0hleCwgaGV4VG9SZ2J9IGZyb20gJy4vY29sb3ItdXRpbHMnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge2Zvcm1hdE51bWJlciwgaXNOdW1iZXIsIHJldmVyc2VGb3JtYXROdW1iZXIsIHVuaXF1ZX0gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXJ9IGZyb20gJy4vZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIENvbG9yQnJlYWsgPSB7XG4gIGRhdGE6IEhleENvbG9yO1xuICBsYWJlbDogc3RyaW5nO1xuICByYW5nZTogbnVtYmVyW107XG4gIGlucHV0czogbnVtYmVyW107XG59O1xuZXhwb3J0IHR5cGUgQ29sb3JCcmVha09yZGluYWwgPSB7XG4gIGRhdGE6IEhleENvbG9yO1xuICBsYWJlbDogc3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBEM1NjYWxlRnVuY3Rpb24gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgKCh4OiBhbnkpID0+IGFueSk7XG5cbi8vIFRPRE8gaXNvbGF0ZSB0eXBlcyAtIGRlcGVuZHMgb24gQGtlcGxlci5nbC9sYXllcnNcbnR5cGUgRmlsdGVyUHJvcHMgPSBhbnk7XG50eXBlIEtlcGxlclRhYmxlID0gYW55O1xuXG5leHBvcnQgdHlwZSBMYWJlbEZvcm1hdCA9IChuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpID0+IHN0cmluZztcbnR5cGUgZGF0YVZhbHVlQWNjZXNzb3IgPSA8VD4ocGFyYW06IFQpID0+IFQ7XG50eXBlIGRhdGFDb250YWluZXJWYWx1ZUFjY2Vzc29yID0gKGQ6IHtpbmRleDogbnVtYmVyfSwgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IGFueTtcbnR5cGUgc29ydCA9IChhOiBhbnksIGI6IGFueSkgPT4gYW55O1xuLyoqXG4gKiByZXR1cm4gcXVhbnRpbGUgZG9tYWluIGZvciBhbiBhcnJheSBvZiBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWFudGlsZURvbWFpbihcbiAgZGF0YTogYW55W10sXG4gIHZhbHVlQWNjZXNzb3I/OiBkYXRhVmFsdWVBY2Nlc3NvcixcbiAgc29ydEZ1bmM/OiBzb3J0XG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHZhbHVlcyA9IHR5cGVvZiB2YWx1ZUFjY2Vzc29yID09PSAnZnVuY3Rpb24nID8gZGF0YS5tYXAodmFsdWVBY2Nlc3NvcikgOiBkYXRhO1xuXG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKG5vdE51bGxvclVuZGVmaW5lZCkuc29ydChzb3J0RnVuYyk7XG59XG5cbi8qKlxuICogcmV0dXJuIG9yZGluYWwgZG9tYWluIGZvciBhIGRhdGEgY29udGFpbmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmRpbmFsRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhQ29udGFpbmVyVmFsdWVBY2Nlc3NvclxuKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWx1ZXMgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIHJldHVybiB1bmlxdWUodmFsdWVzKS5maWx0ZXIobm90TnVsbG9yVW5kZWZpbmVkKS5zb3J0KCk7XG59XG5cbi8qKlxuICogcmV0dXJuIGxpbmVhciBkb21haW4gZm9yIGFuIGFycmF5IG9mIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVhckRvbWFpbihcbiAgZGF0YTogbnVtYmVyW10sXG4gIHZhbHVlQWNjZXNzb3I/OiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHJhbmdlID0gdHlwZW9mIHZhbHVlQWNjZXNzb3IgPT09ICdmdW5jdGlvbicgPyBleHRlbnQoZGF0YSwgdmFsdWVBY2Nlc3NvcikgOiBleHRlbnQoZGF0YSk7XG4gIHJldHVybiByYW5nZS5tYXAoKGQ6IHVuZGVmaW5lZCB8IG51bWJlciwgaTogbnVtYmVyKSA9PiAoZCA9PT0gdW5kZWZpbmVkID8gaSA6IGQpKSBhcyBbXG4gICAgbnVtYmVyLFxuICAgIG51bWJlclxuICBdO1xufVxuXG4vKipcbiAqIHJldHVybiBsaW5lYXIgZG9tYWluIGZvciBhbiBhcnJheSBvZiBkYXRhLiBBIGxvZyBzY2FsZSBkb21haW4gY2Fubm90IGNvbnRhaW4gMFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nRG9tYWluKGRhdGE6IGFueVtdLCB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3Nvcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBbZDAsIGQxXSA9IGdldExpbmVhckRvbWFpbihkYXRhLCB2YWx1ZUFjY2Vzc29yKTtcbiAgcmV0dXJuIFtkMCA9PT0gMCA/IDFlLTUgOiBkMCwgZDFdO1xufVxuXG5leHBvcnQgdHlwZSBEb21haW5TdG9wcyA9IHtcbiAgc3RvcHM6IG51bWJlcltdO1xuICB6OiBudW1iZXJbXTtcbn07XG5cbi8qKlxuICogd2hldGhlciBmaWVsZCBkb21haW4gaXMgc3RvcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tYWluU3RvcHMoZG9tYWluOiB1bmtub3duKTogZG9tYWluIGlzIERvbWFpblN0b3BzIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoZG9tYWluKSAmJiBBcnJheS5pc0FycmF5KGRvbWFpbi5zdG9wcykgJiYgQXJyYXkuaXNBcnJheShkb21haW4ueik7XG59XG5cbmV4cG9ydCB0eXBlIERvbWFpblF1YW50aWxlcyA9IHtcbiAgcXVhbnRpbGVzOiBudW1iZXJbXTtcbiAgejogbnVtYmVyW107XG59O1xuXG4vKipcbiAqIHdoZXRoZXIgZmllbGQgZG9tYWluIGlzIHF1YW50aWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb21haW5RdWFudGlsZShkb21haW46IGFueSk6IGRvbWFpbiBpcyBEb21haW5RdWFudGlsZXMge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdChkb21haW4pICYmIEFycmF5LmlzQXJyYXkoZG9tYWluLnF1YW50aWxlcykgJiYgQXJyYXkuaXNBcnJheShkb21haW4ueik7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkb21haW4gYXQgem9vbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhyZXNob2xkc0Zyb21RdWFudGlsZXMoXG4gIHF1YW50aWxlczogbnVtYmVyW10sXG4gIGJ1Y2tldHM6IG51bWJlclxuKTogKG51bWJlciB8IHVuZGVmaW5lZClbXSB7XG4gIGNvbnN0IHRocmVzaG9sZHMgPSBbXTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYnVja2V0cykgfHwgYnVja2V0cyA8IDEpIHtcbiAgICByZXR1cm4gW3F1YW50aWxlc1swXSwgcXVhbnRpbGVzW3F1YW50aWxlcy5sZW5ndGggLSAxXV07XG4gIH1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBidWNrZXRzOyBpKyspIHtcbiAgICAvLyBwb3NpdGlvbiBpbiBzb3J0ZWQgYXJyYXlcbiAgICBjb25zdCBwb3NpdGlvbiA9IGkgLyBidWNrZXRzO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aHJlc2hvbGRzLnB1c2goZDNRdWFudGlsZShxdWFudGlsZXMsIHBvc2l0aW9uKSk7XG4gIH1cblxuICByZXR1cm4gdGhyZXNob2xkcztcbn1cblxuLyoqXG4gKiBnZXQgdGhlIGRvbWFpbiBhdCB6b29tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW46IGFueVtdLCBzdGVwczogbnVtYmVyW10sIHo6IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IGkgPSBiaXNlY3RMZWZ0KHN0ZXBzLCB6KTtcblxuICBpZiAoc3RlcHNbaV0gPT09IHopIHtcbiAgICAvLyBJZiB6IGlzIGFuIGludGVnZXIgdmFsdWUgZXhhY3RseSBtYXRjaGluZyBhIHN0ZXAsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBkb21haW5cbiAgICByZXR1cm4gZG9tYWluW2ldO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBuZXh0IGNvYXJzZXN0IGRvbWFpblxuICByZXR1cm4gZG9tYWluW01hdGgubWF4KGkgLSAxLCAwKV07XG59XG5cbi8qKlxuICogR2V0IGQzIHNjYWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUZ1bmN0aW9uKFxuICBzY2FsZTogc3RyaW5nLFxuICByYW5nZTogYW55W10gfCBJdGVyYWJsZUl0ZXJhdG9yPGFueT4sXG4gIGRvbWFpbjogKG51bWJlciB8IHVuZGVmaW5lZClbXSB8IHN0cmluZ1tdIHwgSXRlcmFibGVJdGVyYXRvcjxhbnk+LFxuICBmaXhlZD86IGJvb2xlYW5cbik6IEQzU2NhbGVGdW5jdGlvbiB7XG4gIGNvbnN0IHNjYWxlRnVuY3Rpb24gPSBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV0oKVxuICAgIC5kb21haW4oZG9tYWluKVxuICAgIC5yYW5nZShmaXhlZCA/IGRvbWFpbiA6IHJhbmdlKTtcbiAgc2NhbGVGdW5jdGlvbi5zY2FsZVR5cGUgPSBmaXhlZCA/ICdsaW5lYXInIDogc2NhbGU7XG4gIHJldHVybiBzY2FsZUZ1bmN0aW9uO1xufVxuXG4vKipcbiAqIEdldCB0aHJlc2hvbGQgc2NhbGUgY29sb3IgbGFiZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFRocmVzaG9sZExhYmVscyhcbiAgc2NhbGU6IEQzU2NhbGVGdW5jdGlvbixcbiAgbGFiZWxGb3JtYXQ6IExhYmVsRm9ybWF0XG4pOiBPbWl0PENvbG9yQnJlYWssICdkYXRhJz5bXSB7XG4gIGNvbnN0IGdlbkxlbmd0aCA9IHNjYWxlLnJhbmdlKCkubGVuZ3RoO1xuICByZXR1cm4gc2NhbGUucmFuZ2UoKS5tYXAoKGQsIGkpID0+IHtcbiAgICBjb25zdCBpbnZlcnQgPSBzY2FsZS5pbnZlcnRFeHRlbnQoZCk7XG4gICAgY29uc3QgaW5wdXRzID0gW1xuICAgICAgaSA9PT0gMCA/IG51bGwgOiByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFswXSkpLFxuICAgICAgaSA9PT0gZ2VuTGVuZ3RoIC0gMSA/IG51bGwgOiByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFsxXSkpXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gcmF3IHZhbHVlXG4gICAgICByYW5nZTogaW52ZXJ0LFxuICAgICAgLy8gZm9ybWF0dGVkIHZhbHVlXG4gICAgICBpbnB1dHMsXG4gICAgICBsYWJlbDpcbiAgICAgICAgaSA9PT0gMFxuICAgICAgICAgID8gYExlc3MgdGhhbiAke2xhYmVsRm9ybWF0KGludmVydFsxXSl9YFxuICAgICAgICAgIDogaSA9PT0gZ2VuTGVuZ3RoIC0gMVxuICAgICAgICAgID8gYCR7bGFiZWxGb3JtYXQoaW52ZXJ0WzBdKX0gb3IgbW9yZWBcbiAgICAgICAgICA6IGAke2xhYmVsRm9ybWF0KGludmVydFswXSl9IHRvICR7bGFiZWxGb3JtYXQoaW52ZXJ0WzFdKX1gXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGxpbmVhciAvIHF1YW50IHNjYWxlIGNvbG9yIGxhYmVsc1xuICovXG5mdW5jdGlvbiBnZXRTY2FsZUxhYmVscyhcbiAgc2NhbGU6IEQzU2NhbGVGdW5jdGlvbixcbiAgbGFiZWxGb3JtYXQ6IExhYmVsRm9ybWF0XG4pOiBPbWl0PENvbG9yQnJlYWssICdkYXRhJz5bXSB7XG4gIHJldHVybiBzY2FsZS5yYW5nZSgpLm1hcChkID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0RXh0ZW50KGQpO1xuICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgIHJldmVyc2VGb3JtYXROdW1iZXIobGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSksXG4gICAgICByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFsxXSkpXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYCR7bGFiZWxGb3JtYXQoaW52ZXJ0WzBdKX0gdG8gJHtsYWJlbEZvcm1hdChpbnZlcnRbMV0pfWAsXG4gICAgICAvLyByYXcgdmFsdWVcbiAgICAgIHJhbmdlOiBpbnZlcnQsXG4gICAgICAvLyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgIGlucHV0c1xuICAgIH07XG4gIH0pO1xufVxuXG5jb25zdCBjdXN0b21TY2FsZUxhYmVsRm9ybWF0ID0gbiA9PiAobiA/IGZvcm1hdE51bWJlcihuLCAncmVhbCcpIDogJ25vIHZhbHVlJyk7XG4vKipcbiAqIEdldCBsaW5lYXIgLyBxdWFudCBzY2FsZSBjb2xvciBicmVha3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1YW50TGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uLCBsYWJlbEZvcm1hdDogTGFiZWxGb3JtYXQpOiBDb2xvckJyZWFrW10ge1xuICBpZiAodHlwZW9mIHNjYWxlLmludmVydEV4dGVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCB0aHJlc2hvbGRMYWJlbEZvcm1hdCA9IChuLCB0eXBlKSA9PlxuICAgIG4gJiYgbGFiZWxGb3JtYXQgPyBsYWJlbEZvcm1hdChuKSA6IG4gPyBmb3JtYXROdW1iZXIobiwgdHlwZSkgOiAnbm8gdmFsdWUnO1xuICBjb25zdCBsYWJlbHMgPVxuICAgIHNjYWxlLnNjYWxlVHlwZSA9PT0gJ3RocmVzaG9sZCdcbiAgICAgID8gZ2V0VGhyZXNob2xkTGFiZWxzKHNjYWxlLCB0aHJlc2hvbGRMYWJlbEZvcm1hdClcbiAgICAgIDogc2NhbGUuc2NhbGVUeXBlID09PSAnY3VzdG9tJ1xuICAgICAgPyBnZXRUaHJlc2hvbGRMYWJlbHMoc2NhbGUsIGN1c3RvbVNjYWxlTGFiZWxGb3JtYXQpXG4gICAgICA6IGdldFNjYWxlTGFiZWxzKHNjYWxlLCBsYWJlbEZvcm1hdCk7XG5cbiAgY29uc3QgZGF0YSA9IHNjYWxlLnJhbmdlKCk7XG5cbiAgcmV0dXJuIGxhYmVscy5tYXAoKGxhYmVsLCBpbmRleCkgPT4gKHtcbiAgICBkYXRhOiBBcnJheS5pc0FycmF5KGRhdGFbaW5kZXhdKSA/IHJnYlRvSGV4KGRhdGFbaW5kZXhdKSA6IGRhdGFbaW5kZXhdLFxuICAgIC4uLmxhYmVsXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBHZXQgb3JkaW5hbCBjb2xvciBzY2FsZSBsZWdlbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmRpbmFsTGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uKTogQ29sb3JCcmVha09yZGluYWxbXSB7XG4gIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpO1xuICBjb25zdCBsYWJlbHMgPSBzY2FsZS5kb21haW4oKTtcbiAgY29uc3QgZGF0YSA9IGRvbWFpbi5tYXAoc2NhbGUpO1xuXG4gIHJldHVybiBkYXRhLm1hcCgoZGF0dW0sIGluZGV4KSA9PiAoe1xuICAgIGRhdGE6IGlzUmdiQ29sb3IoZGF0dW0pID8gcmdiVG9IZXgoZGF0dW0pIDogZGF0dW0sXG4gICAgbGFiZWw6IGxhYmVsc1tpbmRleF1cbiAgfSkpO1xufVxuXG5jb25zdCBkZWZhdWx0Rm9ybWF0ID0gZCA9PiBkO1xuXG5jb25zdCBnZXRUaW1lTGFiZWxGb3JtYXQgPSBkb21haW4gPT4ge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW4pO1xuICByZXR1cm4gdmFsID0+IG1vbWVudC51dGModmFsKS5mb3JtYXQoZm9ybWF0dGVyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWFudExhYmVsRm9ybWF0KGRvbWFpbiwgZmllbGRUeXBlKSB7XG4gIC8vIHF1YW50IHNjYWxlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIHRvIGxpbmVhciBGaWVsZHM6IHJlYWwsIHRpbWVzdGFtcCwgaW50ZWdlclxuICByZXR1cm4gZmllbGRUeXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wXG4gICAgPyBnZXRUaW1lTGFiZWxGb3JtYXQoZG9tYWluKVxuICAgIDogIWZpZWxkVHlwZVxuICAgID8gZGVmYXVsdEZvcm1hdFxuICAgIDogbiA9PiAoaXNOdW1iZXIobikgPyBmb3JtYXROdW1iZXIobiwgZmllbGRUeXBlKSA6ICdubyB2YWx1ZScpO1xufVxuXG4vKipcbiAqIEdldCBsZWdlbmRzIGZvciBzY2FsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnZW5kT2ZTY2FsZSh7XG4gIHNjYWxlLFxuICBzY2FsZVR5cGUsXG4gIGxhYmVsRm9ybWF0LFxuICBmaWVsZFR5cGVcbn06IHtcbiAgc2NhbGU/OiBEM1NjYWxlRnVuY3Rpb24gfCBudWxsO1xuICBzY2FsZVR5cGU6IHN0cmluZztcbiAgbGFiZWxGb3JtYXQ/OiBMYWJlbEZvcm1hdDtcbiAgZmllbGRUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufSk6IENvbG9yQnJlYWtbXSB8IENvbG9yQnJlYWtPcmRpbmFsW10ge1xuICBpZiAoIXNjYWxlIHx8IHNjYWxlLmJ5Wm9vbSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoXG4gICAgc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsIHx8XG4gICAgc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsIHx8XG4gICAgZmllbGRUeXBlID09PSBBTExfRklFTERfVFlQRVMuc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBnZXRPcmRpbmFsTGVnZW5kcyhzY2FsZSk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRMYWJlbCA9IGxhYmVsRm9ybWF0IHx8IGdldFF1YW50TGFiZWxGb3JtYXQoc2NhbGUuZG9tYWluKCksIGZpZWxkVHlwZSk7XG5cbiAgcmV0dXJuIGdldFF1YW50TGVnZW5kcyhzY2FsZSwgZm9ybWF0TGFiZWwpO1xufVxuXG4vKipcbiAqIEdldCBjb2xvciBzY2FsZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJDb2xvclNjYWxlKHtcbiAgcmFuZ2UsXG4gIGRvbWFpbixcbiAgc2NhbGVUeXBlLFxuICBsYXllclxufToge1xuICByYW5nZTogQ29sb3JSYW5nZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc2NhbGVUeXBlOiBzdHJpbmc7XG4gIGxheWVyOiBMYXllcjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG59KTogRDNTY2FsZUZ1bmN0aW9uIHwgbnVsbCB7XG4gIGlmIChyYW5nZSAmJiBkb21haW4gJiYgc2NhbGVUeXBlKSB7XG4gICAgcmV0dXJuIGxheWVyLmdldENvbG9yU2NhbGUoc2NhbGVUeXBlLCBkb21haW4sIHJhbmdlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbG9yUmFuZ2UuY29sb3JNYXAgaW50byBjb2xvciBicmVha3MgVUkgaW5wdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVMYXllckNvbG9yTWFwKGxheWVyOiBMYXllciwgdmlzdWFsQ2hhbm5lbDogVmlzdWFsQ2hhbm5lbCk6IENvbG9yTWFwIHtcbiAgY29uc3QgZG9tYWluID0gbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZG9tYWluXTtcbiAgY29uc3QgcmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdO1xuICBjb25zdCBzY2FsZVR5cGUgPSBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5zY2FsZV07XG4gIGNvbnN0IGZpZWxkID0gbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuXG4gIGNvbnN0IHNjYWxlID0gZ2V0TGF5ZXJDb2xvclNjYWxlKHtcbiAgICByYW5nZSxcbiAgICBkb21haW4sXG4gICAgc2NhbGVUeXBlLFxuICAgIGxheWVyXG4gIH0pO1xuXG4gIGNvbnN0IGNvbG9yQnJlYWtzID0gZ2V0TGVnZW5kT2ZTY2FsZSh7XG4gICAgc2NhbGU6IHNjYWxlPy5ieVpvb20gPyBzY2FsZSgwKSA6IHNjYWxlLFxuICAgIHNjYWxlVHlwZSxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG4gIHJldHVybiBjb2xvckJyZWFrc1RvQ29sb3JNYXAoY29sb3JCcmVha3MpO1xufVxuXG4vKipcbiAqIEdldCB2aXN1YWwgY2hhbmVsIHNjYWxlIGZ1bmN0aW9uIGlmIGl0J3MgYmFzZWQgb24gem9vbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsQ2hhbm5lbFNjYWxlQnlab29tKHtcbiAgc2NhbGUsXG4gIGxheWVyLFxuICBtYXBTdGF0ZVxufToge1xuICBzY2FsZTogRDNTY2FsZUZ1bmN0aW9uIHwgbnVsbDtcbiAgbGF5ZXI6IExheWVyO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xufSk6IEQzU2NhbGVGdW5jdGlvbiB8IG51bGwge1xuICBpZiAoc2NhbGU/LmJ5Wm9vbSkge1xuICAgIGNvbnN0IHogPSBsYXllci5tZXRhPy5nZXRab29tID8gbGF5ZXIubWV0YS5nZXRab29tKG1hcFN0YXRlKSA6IG1hcFN0YXRlPy56b29tO1xuICAgIHNjYWxlID0gTnVtYmVyLmlzRmluaXRlKHopID8gc2NhbGUoeikgOiBudWxsO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuLyoqXG4gKiBHZXQgY2F0ZWdvcmljYWwgY29sb3JNYXAgZnJvbSBjb2xvcnMgYW5kIGRvbWFpbiAodW5pcXVlIHZhbHVlcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JNYXAoXG4gIGNvbG9yczogc3RyaW5nW10sXG4gIGRvbWFpbjogKHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBudWxsKVtdXG4pOiBhbnkge1xuICBjb25zdCB1bmlxdWVWYWx1ZXMgPSB1bmlxdWUoZG9tYWluKS5zb3J0KCk7XG4gIGNvbnN0IGNvbG9yTWFwID0gY29sb3JzLm1hcChjb2xvciA9PiBbbnVsbCwgY29sb3JdKTtcblxuICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMCB8fCB1bmlxdWVWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGFzc2lnbkNvdW50ID0gTWF0aC5taW4obGFzdEluZGV4LCB1bmlxdWVWYWx1ZXMubGVuZ3RoKTtcblxuICAvLyBBc3NpZ24gZmlyc3QgdmFsdWVzIG9uZS10by1vbmUgdXAgdG8gdGhlIHBlbnVsdGltYXRlIGNvbG9yIChpZiBhbnkpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXNzaWduQ291bnQ7IGkrKykge1xuICAgIC8vIEB0cy1pZ25vcmUgdHVwbGVcbiAgICBjb2xvck1hcFtpXVswXSA9IHVuaXF1ZVZhbHVlc1tpXTtcbiAgfVxuXG4gIGlmICh1bmlxdWVWYWx1ZXMubGVuZ3RoID4gY29sb3JzLmxlbmd0aCkge1xuICAgIC8vIEFnZ3JlZ2F0ZSB0aGUgcmVzdCAoaW5jbHVkaW5nIHRoZSB2YWx1ZSB0aGF0IHdvdWxkIGhhdmUgZ29uZSB0byBsYXN0IGNvbG9yKVxuICAgIC8vIEJ1aWxkIGFnZ3JlZ2F0ZWQgYXJyYXkgaW5jcmVtZW50YWxseSB0byBtYXRjaCBsZWdhY3kgYmVoYXZpb3JcbiAgICBjb25zdCBhZ2dyZWdhdGVkVmFsdWVzOiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBsYXN0SW5kZXg7IGkgPCB1bmlxdWVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5pcXVlVmFsdWVzW2ldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIC8vIFNwcmVhZCBhcnJheSBlbGVtZW50cyB0byBtYXRjaCBsZWdhY3kgZmxhdHRlbmluZyBiZWhhdmlvclxuICAgICAgICBhZ2dyZWdhdGVkVmFsdWVzLnB1c2goLi4uKHZhbHVlIGFzIGFueVtdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZ2dyZWdhdGVkVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gICAgY29sb3JNYXBbbGFzdEluZGV4XVswXSA9IGFnZ3JlZ2F0ZWRWYWx1ZXM7XG4gIH0gZWxzZSBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA9PT0gY29sb3JzLmxlbmd0aCkge1xuICAgIC8vIEV4YWN0bHkgb25lIHBlciBjb2xvclxuICAgIC8vIEB0cy1pZ25vcmUgdHVwbGVcbiAgICBjb2xvck1hcFtsYXN0SW5kZXhdWzBdID0gdW5pcXVlVmFsdWVzW2xhc3RJbmRleF07XG4gIH1cblxuICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gIHJldHVybiBjb2xvck1hcDtcbn1cblxuLyoqXG4gKiBHZXQgY2F0ZWdvcmljYWwgY29sb3JCcmVha3MgZnJvbSBjb2xvck1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MoXG4gIGNvbG9yTWFwPzogQ29sb3JNYXAgfCBudWxsXG4pOiBDb2xvckJyZWFrT3JkaW5hbFtdIHwgbnVsbCB7XG4gIGlmICghY29sb3JNYXApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjb2xvckJyZWFrcyA9IGNvbG9yTWFwLm1hcCgoW3ZhbHVlLCBjb2xvcl0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogY29sb3IsXG4gICAgICBsYWJlbDogdmFsdWVcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gY29sb3JCcmVha3M7XG59XG5cbi8qKlxuICogY3JlYXRlIGNhdGVnb3JpY2FsIGNvbG9yTWFwIGZyb20gY29sb3JCcmVha3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnJlYWtzVG9DYXRlZ29yaWNhbENvbG9yTWFwKGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrT3JkaW5hbFtdKTogQ29sb3JNYXAge1xuICAvLyBjb2xvck1hcDogW3N0cmluZyB8IHN0cmluZ1tdLCBoZXhzdHJpbmddXG4gIGNvbnN0IGNvbG9ycyA9IHVuaXEoY29sb3JCcmVha3MubWFwKGNiID0+IGNiLmRhdGEpKTtcbiAgY29uc3QgdmFsdWVzID0gdW5pcShjb2xvckJyZWFrcy5tYXAoY2IgPT4gY2IubGFiZWwpKTtcblxuICByZXR1cm4gZ2V0Q2F0ZWdvcmljYWxDb2xvck1hcChjb2xvcnMsIHZhbHVlcyk7XG59XG5cbi8qKlxuICogQ29udmVydCBjb2xvciBicmVha3MgVUkgaW5wdXQgaW50byBjb2xvclJhbmdlLmNvbG9yTWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckJyZWFrc1RvQ29sb3JNYXAoY29sb3JCcmVha3M6IENvbG9yQnJlYWtbXSB8IENvbG9yQnJlYWtPcmRpbmFsW10pOiBDb2xvck1hcCB7XG4gIGNvbnN0IGNvbG9yTWFwID0gY29sb3JCcmVha3MubWFwKChjb2xvckJyZWFrLCBpKSA9PiB7XG4gICAgLy8gW3ZhbHVlLCBoZXhdXG4gICAgcmV0dXJuIFtcbiAgICAgIGNvbG9yQnJlYWsuaW5wdXRzXG4gICAgICAgID8gaSA9PT0gY29sb3JCcmVha3MubGVuZ3RoIC0gMVxuICAgICAgICAgID8gbnVsbCAvLyBsYXN0XG4gICAgICAgICAgOiBjb2xvckJyZWFrLmlucHV0c1sxXVxuICAgICAgICA6IGNvbG9yQnJlYWsubGFiZWwsXG4gICAgICBjb2xvckJyZWFrLmRhdGFcbiAgICBdO1xuICB9KTtcblxuICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gIHJldHVybiBjb2xvck1hcDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbG9yUmFuZ2UuY29sb3JNYXAgaW50byBjb2xvciBicmVha3MgVUkgaW5wdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yTWFwVG9Db2xvckJyZWFrcyhjb2xvck1hcD86IENvbG9yTWFwIHwgbnVsbCk6IENvbG9yQnJlYWtbXSB8IG51bGwge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29sb3JCcmVha3MgPSBjb2xvck1hcC5tYXAoKFt2YWx1ZSwgY29sb3JdLCBpKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPVxuICAgICAgaSA9PT0gMFxuICAgICAgICA/IC8vIGZpcnN0XG4gICAgICAgICAgWy1JbmZpbml0eSwgdmFsdWVdXG4gICAgICAgIDogLy8gbGFzdFxuICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgID8gW2NvbG9yTWFwW2kgLSAxXVswXSwgSW5maW5pdHldXG4gICAgICAgIDogLy8gZWxzZVxuICAgICAgICAgIFtjb2xvck1hcFtpIC0gMV1bMF0sIHZhbHVlXTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogY29sb3IsXG4gICAgICByYW5nZSxcbiAgICAgIGlucHV0czogcmFuZ2UsXG4gICAgICBsYWJlbDpcbiAgICAgICAgLy8gZmlyc3RcbiAgICAgICAgaSA9PT0gMFxuICAgICAgICAgID8gYExlc3MgdGhhbiAke3ZhbHVlfWBcbiAgICAgICAgICA6IC8vIGxhc3RcbiAgICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgICAgPyBgJHtjb2xvck1hcFtpIC0gMV1bMF19IG9yIG1vcmVgXG4gICAgICAgICAgOiBgJHtjb2xvck1hcFtpIC0gMV1bMF19IHRvICR7dmFsdWV9YFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW1wbGVtZW50IGNvbnZlcnNpb24gZm9yIG9yZGluYWxcbiAgcmV0dXJuIGNvbG9yQnJlYWtzO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgY29sb3IgYnJlYWtzIGlzIGZvciBudW1lcmljIGZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNDb2xvckJyZWFrcyhjb2xvckJyZWFrczogdW5rbm93bik6IGNvbG9yQnJlYWtzIGlzIENvbG9yQnJlYWtbXSB7XG4gIHJldHVybiBCb29sZWFuKEFycmF5LmlzQXJyYXkoY29sb3JCcmVha3MpICYmIGNvbG9yQnJlYWtzLmxlbmd0aCAmJiBjb2xvckJyZWFrc1swXS5pbnB1dHMpO1xufVxuXG4vLyByZXR1cm4gZG9tYWluTWluLCBkb21haW5NYXgsIGhpc3RvZ3JhbU1lYW5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b2dyYW1Eb21haW4oe1xuICBhZ2dyZWdhdGVkQmlucyxcbiAgY29sdW1uU3RhdHMsXG4gIGRhdGFzZXQsXG4gIGZpZWxkVmFsdWVBY2Nlc3NvclxufToge1xuICBhZ2dyZWdhdGVkQmlucz86IEFnZ3JlZ2F0ZWRCaW5bXTtcbiAgY29sdW1uU3RhdHM/OiBGaWx0ZXJQcm9wc1snY29sdW1uU3RhdHMnXTtcbiAgZGF0YXNldD86IEtlcGxlclRhYmxlO1xuICBmaWVsZFZhbHVlQWNjZXNzb3I6IChpZHg6IHVua25vd24pID0+IG51bWJlcjtcbn0pIHtcbiAgbGV0IGRvbWFpbk1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgbGV0IGRvbWFpbk1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgbGV0IG5WYWxpZCA9IDA7XG4gIGxldCBkb21haW5TdW0gPSAwO1xuXG4gIGlmIChhZ2dyZWdhdGVkQmlucykge1xuICAgIE9iamVjdC52YWx1ZXMoYWdncmVnYXRlZEJpbnMpLmZvckVhY2goYmluID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGJpbi52YWx1ZTtcbiAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgIGlmICh2YWwgPCBkb21haW5NaW4pIGRvbWFpbk1pbiA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA+IGRvbWFpbk1heCkgZG9tYWluTWF4ID0gdmFsO1xuICAgICAgICBkb21haW5TdW0gKz0gdmFsO1xuICAgICAgICBuVmFsaWQgKz0gMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29sdW1uU3RhdHMgJiYgY29sdW1uU3RhdHMucXVhbnRpbGVzICYmIGNvbHVtblN0YXRzLm1lYW4pIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gcmVjYWxjdWF0ZSBtaW4vbWF4L21lYW4gaWYgaXRzIGFscmVhZHkgaW4gY29sdW1uU3RhdHNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGNvbHVtblN0YXRzLnF1YW50aWxlc1swXS52YWx1ZSxcbiAgICAgICAgY29sdW1uU3RhdHMucXVhbnRpbGVzW2NvbHVtblN0YXRzLnF1YW50aWxlcy5sZW5ndGggLSAxXS52YWx1ZSxcbiAgICAgICAgY29sdW1uU3RhdHMubWVhblxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKGRhdGFzZXQgJiYgZmllbGRWYWx1ZUFjY2Vzc29yKSB7XG4gICAgICBkYXRhc2V0LmFsbEluZGV4ZXMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZmllbGRWYWx1ZUFjY2Vzc29yKHgpO1xuICAgICAgICBpZiAoaXNOdW1iZXIodmFsKSkge1xuICAgICAgICAgIGlmICh2YWwgPCBkb21haW5NaW4pIGRvbWFpbk1pbiA9IHZhbDtcbiAgICAgICAgICBpZiAodmFsID4gZG9tYWluTWF4KSBkb21haW5NYXggPSB2YWw7XG4gICAgICAgICAgZG9tYWluU3VtICs9IHZhbDtcbiAgICAgICAgICBuVmFsaWQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhpc3RvZ3JhbU1lYW4gPSBuVmFsaWQgPiAwID8gZG9tYWluU3VtIC8gblZhbGlkIDogMDtcbiAgcmV0dXJuIFtuVmFsaWQgPiAwID8gZG9tYWluTWluIDogMCwgblZhbGlkID4gMCA/IGRvbWFpbk1heCA6IDAsIGhpc3RvZ3JhbU1lYW5dO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYXRlZ29yaWNhbENvbG9yTWFwQnlJbmRleChjb2xvck1hcDogQ29sb3JNYXAsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuIFtudWxsLCBjbVsxXV07XG4gICAgfVxuICAgIHJldHVybiBjbTtcbiAgfSk7XG4gIHJldHVybiBuZXdDb2xvck1hcDtcbn1cblxuLyoqXG4gKiBzZWxlY3QgcmVzdCBjYXRlZ29yaWNhbCB2YWx1ZXMgZm9yIGEgY29sb3JNYXAgYnkgaXRzIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RSZXN0Q2F0ZWdvcmljYWxDb2xvck1hcEJ5SW5kZXgoXG4gIGNvbG9yTWFwOiBDb2xvck1hcCB8IG51bGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIHVuaXF1ZVZhbHVlcz86IG51bWJlcltdIHwgc3RyaW5nW11cbik6IENvbG9yTWFwIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gIGlmICghY29sb3JNYXAgfHwgIXVuaXF1ZVZhbHVlcykge1xuICAgIHJldHVybiBjb2xvck1hcDtcbiAgfVxuXG4gIC8vIGZpbmQgdW5pcXVlIHZhbHVlcyB0aGF0IGhhcyBub3QgYmVlbiB1c2VkIGluIGN1cnJlbnQgY29sb3JNYXBcbiAgY29uc3QgdW5pcVZhbHVlRGljdCA9IE9iamVjdC5mcm9tRW50cmllcyh1bmlxdWVWYWx1ZXMubWFwKHZhbCA9PiBbdmFsLCBmYWxzZV0pKTtcbiAgY29sb3JNYXAuZm9yRWFjaChjbSA9PiB7XG4gICAgdG9BcnJheShjbVswXSkuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmICh2KSB1bmlxVmFsdWVEaWN0W3ZdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IHJlc3QgPSBPYmplY3Qua2V5cyh1bmlxVmFsdWVEaWN0KS5maWx0ZXIodiA9PiAhdW5pcVZhbHVlRGljdFt2XSk7XG5cbiAgLy8gdXNlIHRoZSBub3QgdXNlZCB1bmlxdWUgdmFsdWVzIGluIHRoZSBzZWxlY3RlZCBjb2xvciBtYXBcbiAgY29uc3QgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5tYXAoKGNtLCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gW1suLi5yZXN0LCAuLi50b0FycmF5KGNtWzBdKV0sIGNtWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIGNtO1xuICB9KSBhcyBDb2xvck1hcDtcblxuICByZXR1cm4gbmV3Q29sb3JNYXA7XG59XG5cbi8qKlxuICogcmVtb3ZlIGEgY2F0ZWdvcmljYWwgdmFsdWUgZnJvbSBhIGNvbG9yTWFwIGJ5IGl0cyBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2F0ZWdvcmljYWxWYWx1ZUZyb21Db2xvck1hcChcbiAgY29sb3JNYXA6IENvbG9yTWFwIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaXRlbTogbnVtYmVyIHwgc3RyaW5nLFxuICBpbmRleDogbnVtYmVyXG4pOiBDb2xvck1hcCB8IG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgaWYgKCFjbVswXSkge1xuICAgICAgICByZXR1cm4gW251bGwsIGNtWzFdXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRVbmlxdWVWYWx1ZXMgPSB0b0FycmF5KGNtWzBdKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRVbmlxdWVWYWx1ZXMgPSBjdXJyZW50VW5pcXVlVmFsdWVzLmZpbHRlcih2ID0+IHYgIT09IGl0ZW0pO1xuICAgICAgcmV0dXJuIFt1cGRhdGVkVW5pcXVlVmFsdWVzLCBjbVsxXV07XG4gICAgfVxuICAgIHJldHVybiBjbTtcbiAgfSkgYXMgQ29sb3JNYXA7XG5cbiAgcmV0dXJuIG5ld0NvbG9yTWFwO1xufVxuXG4vKipcbiAqIGFkZCBjYXRlZ29yaWNhbCB2YWx1ZXMgKGZyb20gbXVsdGlzZWwgZHJvcGRvd24pIHRvIGEgY29sb3JNYXAgYnkgaXRzIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDYXRlZ29yaWNhbFZhbHVlc1RvQ29sb3JNYXAoXG4gIGNvbG9yTWFwOiBDb2xvck1hcCxcbiAgaXRlbXM6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIGluZGV4OiBudW1iZXJcbik6IENvbG9yTWFwIHtcbiAgaWYgKCFjb2xvck1hcCkge1xuICAgIHJldHVybiBjb2xvck1hcDtcbiAgfVxuXG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgaWYgKCFjbVswXSkge1xuICAgICAgICByZXR1cm4gW2l0ZW1zLCBjbVsxXV07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50VW5pcXVlVmFsdWVzID0gdG9BcnJheShjbVswXSk7XG4gICAgICBjb25zdCB1cGRhdGVkVW5pcXVlVmFsdWVzID0gdW5pcShjdXJyZW50VW5pcXVlVmFsdWVzLmNvbmNhdChpdGVtcykpO1xuICAgICAgcmV0dXJuIFt1cGRhdGVkVW5pcXVlVmFsdWVzLCBjbVsxXV07XG4gICAgfVxuICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG90aGVyIGNvbG9yTWFwXG4gICAgY29uc3QgY3VycmVudFVuaXF1ZVZhbHVlcyA9IGNtWzBdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRVbmlxdWVWYWx1ZXMpKSB7XG4gICAgICBjb25zdCB1cGRhdGVkVW5pcXVlVmFsdWVzOiBzdHJpbmdbXSB8IG51bWJlcltdID0gKGN1cnJlbnRVbmlxdWVWYWx1ZXMgYXMgYW55W10pLmZpbHRlcihcbiAgICAgICAgdiA9PiAhaXRlbXMuaW5jbHVkZXModilcbiAgICAgICk7XG4gICAgICByZXR1cm4gW3VwZGF0ZWRVbmlxdWVWYWx1ZXMsIGNtWzFdXTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRVbmlxdWVWYWx1ZXMgJiYgaXRlbXMuaW5jbHVkZXMoY3VycmVudFVuaXF1ZVZhbHVlcykpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgY21bMV1dO1xuICAgIH1cblxuICAgIHJldHVybiBjbTtcbiAgfSkgYXMgQ29sb3JNYXA7XG5cbiAgcmV0dXJuIG5ld0NvbG9yTWFwO1xufVxuXG4vKipcbiAqIGdldCBhIGNvbG9yIHNjYWxlIGZ1bmMgZm9yIGNhdGVnb3JpY2FsIChjdXN0b20gb3JkaW5hbCkgc2NhbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JTY2FsZShcbiAgY29sb3JEb21haW46IG51bWJlcltdIHwgc3RyaW5nW10sXG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2UsXG4gIHVzZVJnYiA9IHRydWVcbik6IChjYXRlZ29yeVZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IFJHQkNvbG9yIHwgUkdCQUNvbG9yIHtcbiAgY29uc3QgY01hcCA9IGNvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICA/IGNvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICA6IGdldENhdGVnb3JpY2FsQ29sb3JNYXAoY29sb3JSYW5nZS5jb2xvcnMsIGNvbG9yRG9tYWluKTtcblxuICBjb25zdCByYW5nZTogbnVtYmVyW11bXSA9IFtdO1xuICBjb25zdCBkb21haW46IHN0cmluZ1tdID0gW107XG4gIGNNYXAuZm9yRWFjaChjbSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY21bMF0pKSB7XG4gICAgICBjbVswXS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGRvbWFpbi5wdXNoKHZhbCk7XG4gICAgICAgIHJhbmdlLnB1c2godXNlUmdiID8gaGV4VG9SZ2IoY21bMV0pIDogY21bMV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbWFpbi5wdXNoKGNtWzBdKTtcbiAgICAgIHJhbmdlLnB1c2godXNlUmdiID8gaGV4VG9SZ2IoY21bMV0pIDogY21bMV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2NhbGUgPSBnZXRTY2FsZUZ1bmN0aW9uKFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsIHJhbmdlLCBkb21haW4sIGZhbHNlKTtcbiAgc2NhbGUudW5rbm93bihOT19WQUxVRV9DT0xPUik7XG4gIHJldHVybiBzY2FsZSBhcyBhbnk7XG59XG5cbi8qKlxuICogaW5pdGlhbGl6ZSBjdXN0b21QYWxldHRlIGJ5IGN1c3RvbSBzY2FsZSBvciBjdXN0b21PcmRpbmFsIHNjYWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICBzY2FsZSxcbiAgZmllbGQsXG4gIG9yZGluYWxEb21haW4sXG4gIHJhbmdlLFxuICBjb2xvckJyZWFrc1xufToge1xuICBzY2FsZTogc3RyaW5nO1xuICBmaWVsZD86IEZpZWxkO1xuICBvcmRpbmFsRG9tYWluPzogbnVtYmVyW10gfCBzdHJpbmdbXTtcbiAgcmFuZ2U6IENvbG9yUmFuZ2U7XG4gIGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrT3JkaW5hbFtdIHwgbnVsbDtcbn0pOiBDb2xvclVJWydjdXN0b21QYWxldHRlJ10ge1xuICBjb25zdCBjdXN0b21QYWxldHRlTmFtZSA9IGBjb2xvci5jdXN0b21QYWxldHRlLiR7c2NhbGV9LiR7ZmllbGQ/Lm5hbWUgfHwgJ3BvaW50LWNvdW50J31gO1xuICAvLyByZXVzZSByYW5nZS5jb2xvck1hcCBpZiB0aGUgZmllbGQgYW5kIHNjYWxlIG5vdCBjaGFuZ2VkXG4gIGNvbnN0IHJldXNlQ29sb3JNYXAgPSByYW5nZS5jb2xvck1hcCAmJiByYW5nZS5uYW1lID09PSBjdXN0b21QYWxldHRlTmFtZSAmJiByYW5nZS50eXBlID09PSBzY2FsZTtcbiAgY29uc3QgY29sb3JNYXAgPSByZXVzZUNvbG9yTWFwXG4gICAgPyByYW5nZS5jb2xvck1hcFxuICAgIDogc2NhbGUgPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiYgb3JkaW5hbERvbWFpblxuICAgID8gZ2V0Q2F0ZWdvcmljYWxDb2xvck1hcChyYW5nZS5jb2xvcnMsIG9yZGluYWxEb21haW4pXG4gICAgOiBjb2xvckJyZWFrcyAmJiBpc051bWVyaWNDb2xvckJyZWFrcyhjb2xvckJyZWFrcylcbiAgICA/IGNvbG9yQnJlYWtzVG9Db2xvck1hcChjb2xvckJyZWFrcylcbiAgICA6IG51bGw7XG4gIGNvbnN0IGNvbG9ycyA9IHJldXNlQ29sb3JNYXAgPyByYW5nZS5jb2xvcnMgOiBjb2xvck1hcCA/IGNvbG9yTWFwLm1hcChjbSA9PiBjbVsxXSkgOiByYW5nZS5jb2xvcnM7XG5cbiAgLy8gdXBkYXRlIGN1c3RvbSBicmVha3NcbiAgY29uc3QgY3VzdG9tUGFsZXR0ZTogQ29sb3JVSVsnY3VzdG9tUGFsZXR0ZSddID0ge1xuICAgIGNhdGVnb3J5OiAnQ3VzdG9tJyxcbiAgICBuYW1lOiBjdXN0b21QYWxldHRlTmFtZSxcbiAgICB0eXBlOiBzY2FsZSxcbiAgICBjb2xvck1hcCxcbiAgICBjb2xvcnM6IGNvbG9ycyB8fCBbXVxuICB9O1xuXG4gIHJldHVybiBjdXN0b21QYWxldHRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQWlCQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFULE9B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
|
|
620
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbW9tZW50IiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9jb2xvclV0aWxzIiwiX2RhdGFVdGlscyIsIl9maWx0ZXJVdGlscyIsIl91dGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZ2V0UXVhbnRpbGVEb21haW4iLCJkYXRhIiwidmFsdWVBY2Nlc3NvciIsInNvcnRGdW5jIiwidmFsdWVzIiwibWFwIiwibm90TnVsbG9yVW5kZWZpbmVkIiwic29ydCIsImdldE9yZGluYWxEb21haW4iLCJkYXRhQ29udGFpbmVyIiwibWFwSW5kZXgiLCJ1bmlxdWUiLCJnZXRMaW5lYXJEb21haW4iLCJyYW5nZSIsImV4dGVudCIsImQiLCJpIiwidW5kZWZpbmVkIiwiZ2V0TG9nRG9tYWluIiwiX2dldExpbmVhckRvbWFpbiIsIl9nZXRMaW5lYXJEb21haW4yIiwiX3NsaWNlZFRvQXJyYXkyIiwiZDAiLCJkMSIsImlzRG9tYWluU3RvcHMiLCJkb21haW4iLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5Iiwic3RvcHMiLCJ6IiwiaXNEb21haW5RdWFudGlsZSIsInF1YW50aWxlcyIsImdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzIiwiYnVja2V0cyIsInRocmVzaG9sZHMiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBvc2l0aW9uIiwiZDNRdWFudGlsZSIsImdldERvbWFpblN0ZXBzYnlab29tIiwic3RlcHMiLCJiaXNlY3RMZWZ0IiwiTWF0aCIsIm1heCIsImdldFNjYWxlRnVuY3Rpb24iLCJzY2FsZSIsImZpeGVkIiwic2NhbGVGdW5jdGlvbiIsIlNDQUxFX0ZVTkMiLCJzY2FsZVR5cGUiLCJnZXRUaHJlc2hvbGRMYWJlbHMiLCJsYWJlbEZvcm1hdCIsImdlbkxlbmd0aCIsImludmVydCIsImludmVydEV4dGVudCIsImlucHV0cyIsInJldmVyc2VGb3JtYXROdW1iZXIiLCJsYWJlbCIsImNvbmNhdCIsImdldFNjYWxlTGFiZWxzIiwiY3VzdG9tU2NhbGVMYWJlbEZvcm1hdCIsIm4iLCJmb3JtYXROdW1iZXIiLCJnZXRRdWFudExlZ2VuZHMiLCJ0aHJlc2hvbGRMYWJlbEZvcm1hdCIsInR5cGUiLCJsYWJlbHMiLCJpbmRleCIsInJnYlRvSGV4IiwiZ2V0T3JkaW5hbExlZ2VuZHMiLCJkYXR1bSIsImlzUmdiQ29sb3IiLCJkZWZhdWx0Rm9ybWF0IiwiZ2V0VGltZUxhYmVsRm9ybWF0IiwiZm9ybWF0dGVyIiwiZ2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXIiLCJ2YWwiLCJtb21lbnQiLCJ1dGMiLCJmb3JtYXQiLCJnZXRRdWFudExhYmVsRm9ybWF0IiwiZmllbGRUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiaXNOdW1iZXIiLCJnZXRMZWdlbmRPZlNjYWxlIiwiX3JlZiIsImJ5Wm9vbSIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsImN1c3RvbU9yZGluYWwiLCJzdHJpbmciLCJmb3JtYXRMYWJlbCIsImdldExheWVyQ29sb3JTY2FsZSIsIl9yZWYyIiwibGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJ2aXN1YWxDaGFubmVsIiwiY29uZmlnIiwidmlzQ29uZmlnIiwiZmllbGQiLCJjb2xvckJyZWFrcyIsImNvbG9yQnJlYWtzVG9Db2xvck1hcCIsImdldFZpc3VhbENoYW5uZWxTY2FsZUJ5Wm9vbSIsIl9yZWYzIiwiX3NjYWxlIiwibWFwU3RhdGUiLCJfbGF5ZXIkbWV0YSIsIm1ldGEiLCJnZXRab29tIiwiem9vbSIsImdldENhdGVnb3JpY2FsQ29sb3JNYXAiLCJjb2xvcnMiLCJ1bmlxdWVWYWx1ZXMiLCJjb2xvck1hcCIsImNvbG9yIiwibGFzdEluZGV4IiwiYXNzaWduQ291bnQiLCJtaW4iLCJhZ2dyZWdhdGVkVmFsdWVzIiwidmFsdWUiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MiLCJfcmVmNCIsIl9yZWY1IiwiY29sb3JCcmVha3NUb0NhdGVnb3JpY2FsQ29sb3JNYXAiLCJ1bmlxIiwiY2IiLCJjb2xvckJyZWFrIiwiY29sb3JNYXBUb0NvbG9yQnJlYWtzIiwiX3JlZjYiLCJfcmVmNyIsIkluZmluaXR5IiwiaXNOdW1lcmljQ29sb3JCcmVha3MiLCJCb29sZWFuIiwiZ2V0SGlzdG9ncmFtRG9tYWluIiwiX3JlZjgiLCJhZ2dyZWdhdGVkQmlucyIsImNvbHVtblN0YXRzIiwiZGF0YXNldCIsImZpZWxkVmFsdWVBY2Nlc3NvciIsImRvbWFpbk1pbiIsIlBPU0lUSVZFX0lORklOSVRZIiwiZG9tYWluTWF4IiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJuVmFsaWQiLCJkb21haW5TdW0iLCJiaW4iLCJtZWFuIiwiYWxsSW5kZXhlcyIsIngiLCJoaXN0b2dyYW1NZWFuIiwicmVzZXRDYXRlZ29yaWNhbENvbG9yTWFwQnlJbmRleCIsIm5ld0NvbG9yTWFwIiwiY20iLCJzZWxlY3RSZXN0Q2F0ZWdvcmljYWxDb2xvck1hcEJ5SW5kZXgiLCJ1bmlxVmFsdWVEaWN0IiwiZnJvbUVudHJpZXMiLCJ0b0FycmF5IiwidiIsInJlc3QiLCJyZW1vdmVDYXRlZ29yaWNhbFZhbHVlRnJvbUNvbG9yTWFwIiwiaXRlbSIsImN1cnJlbnRVbmlxdWVWYWx1ZXMiLCJ1cGRhdGVkVW5pcXVlVmFsdWVzIiwiYWRkQ2F0ZWdvcmljYWxWYWx1ZXNUb0NvbG9yTWFwIiwiaXRlbXMiLCJpbmNsdWRlcyIsImdldENhdGVnb3JpY2FsQ29sb3JTY2FsZSIsImNvbG9yRG9tYWluIiwiY29sb3JSYW5nZSIsInVzZVJnYiIsImNNYXAiLCJoZXhUb1JnYiIsInVua25vd24iLCJOT19WQUxVRV9DT0xPUiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIl9yZWY5Iiwib3JkaW5hbERvbWFpbiIsImN1c3RvbVBhbGV0dGVOYW1lIiwibmFtZSIsInJldXNlQ29sb3JNYXAiLCJjdXN0b21QYWxldHRlIiwiY2F0ZWdvcnkiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS1zY2FsZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jpc2VjdExlZnQsIHF1YW50aWxlU29ydGVkIGFzIGQzUXVhbnRpbGUsIGV4dGVudH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVMsIFNDQUxFX0ZVTkMsIFNDQUxFX1RZUEVTLCBOT19WQUxVRV9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuLy8gaW1wb3J0IHtGaWx0ZXJQcm9wcywgS2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIENvbG9yTWFwLFxuICBDb2xvclJhbmdlLFxuICBIZXhDb2xvcixcbiAgS2VwbGVyTGF5ZXIgYXMgTGF5ZXIsXG4gIE1hcFN0YXRlLFxuICBWaXN1YWxDaGFubmVsLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBSR0JDb2xvcixcbiAgUkdCQUNvbG9yLFxuICBDb2xvclVJLFxuICBGaWVsZFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtpc1JnYkNvbG9yLCByZ2JUb0hleCwgaGV4VG9SZ2J9IGZyb20gJy4vY29sb3ItdXRpbHMnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge2Zvcm1hdE51bWJlciwgaXNOdW1iZXIsIHJldmVyc2VGb3JtYXROdW1iZXIsIHVuaXF1ZX0gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXJ9IGZyb20gJy4vZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIENvbG9yQnJlYWsgPSB7XG4gIGRhdGE6IEhleENvbG9yO1xuICBsYWJlbDogc3RyaW5nO1xuICByYW5nZTogbnVtYmVyW107XG4gIGlucHV0czogbnVtYmVyW107XG59O1xuZXhwb3J0IHR5cGUgQ29sb3JCcmVha09yZGluYWwgPSB7XG4gIGRhdGE6IEhleENvbG9yO1xuICBsYWJlbDogc3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBEM1NjYWxlRnVuY3Rpb24gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgKCh4OiBhbnkpID0+IGFueSk7XG5cbi8vIFRPRE8gaXNvbGF0ZSB0eXBlcyAtIGRlcGVuZHMgb24gQGtlcGxlci5nbC9sYXllcnNcbnR5cGUgRmlsdGVyUHJvcHMgPSBhbnk7XG50eXBlIEtlcGxlclRhYmxlID0gYW55O1xuXG5leHBvcnQgdHlwZSBMYWJlbEZvcm1hdCA9IChuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpID0+IHN0cmluZztcbnR5cGUgZGF0YVZhbHVlQWNjZXNzb3IgPSA8VD4ocGFyYW06IFQpID0+IFQ7XG50eXBlIGRhdGFDb250YWluZXJWYWx1ZUFjY2Vzc29yID0gKGQ6IHtpbmRleDogbnVtYmVyfSwgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IGFueTtcbnR5cGUgc29ydCA9IChhOiBhbnksIGI6IGFueSkgPT4gYW55O1xuLyoqXG4gKiByZXR1cm4gcXVhbnRpbGUgZG9tYWluIGZvciBhbiBhcnJheSBvZiBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWFudGlsZURvbWFpbihcbiAgZGF0YTogYW55W10sXG4gIHZhbHVlQWNjZXNzb3I/OiBkYXRhVmFsdWVBY2Nlc3NvcixcbiAgc29ydEZ1bmM/OiBzb3J0XG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHZhbHVlcyA9IHR5cGVvZiB2YWx1ZUFjY2Vzc29yID09PSAnZnVuY3Rpb24nID8gZGF0YS5tYXAodmFsdWVBY2Nlc3NvcikgOiBkYXRhO1xuXG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKG5vdE51bGxvclVuZGVmaW5lZCkuc29ydChzb3J0RnVuYyk7XG59XG5cbi8qKlxuICogcmV0dXJuIG9yZGluYWwgZG9tYWluIGZvciBhIGRhdGEgY29udGFpbmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmRpbmFsRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhQ29udGFpbmVyVmFsdWVBY2Nlc3NvclxuKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWx1ZXMgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIHJldHVybiB1bmlxdWUodmFsdWVzKS5maWx0ZXIobm90TnVsbG9yVW5kZWZpbmVkKS5zb3J0KCk7XG59XG5cbi8qKlxuICogcmV0dXJuIGxpbmVhciBkb21haW4gZm9yIGFuIGFycmF5IG9mIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVhckRvbWFpbihcbiAgZGF0YTogbnVtYmVyW10sXG4gIHZhbHVlQWNjZXNzb3I/OiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHJhbmdlID0gdHlwZW9mIHZhbHVlQWNjZXNzb3IgPT09ICdmdW5jdGlvbicgPyBleHRlbnQoZGF0YSwgdmFsdWVBY2Nlc3NvcikgOiBleHRlbnQoZGF0YSk7XG4gIHJldHVybiByYW5nZS5tYXAoKGQ6IHVuZGVmaW5lZCB8IG51bWJlciwgaTogbnVtYmVyKSA9PiAoZCA9PT0gdW5kZWZpbmVkID8gaSA6IGQpKSBhcyBbXG4gICAgbnVtYmVyLFxuICAgIG51bWJlclxuICBdO1xufVxuXG4vKipcbiAqIHJldHVybiBsaW5lYXIgZG9tYWluIGZvciBhbiBhcnJheSBvZiBkYXRhLiBBIGxvZyBzY2FsZSBkb21haW4gY2Fubm90IGNvbnRhaW4gMFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nRG9tYWluKGRhdGE6IGFueVtdLCB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3Nvcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBbZDAsIGQxXSA9IGdldExpbmVhckRvbWFpbihkYXRhLCB2YWx1ZUFjY2Vzc29yKTtcbiAgcmV0dXJuIFtkMCA9PT0gMCA/IDFlLTUgOiBkMCwgZDFdO1xufVxuXG5leHBvcnQgdHlwZSBEb21haW5TdG9wcyA9IHtcbiAgc3RvcHM6IG51bWJlcltdO1xuICB6OiBudW1iZXJbXTtcbn07XG5cbi8qKlxuICogd2hldGhlciBmaWVsZCBkb21haW4gaXMgc3RvcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tYWluU3RvcHMoZG9tYWluOiB1bmtub3duKTogZG9tYWluIGlzIERvbWFpblN0b3BzIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoZG9tYWluKSAmJiBBcnJheS5pc0FycmF5KGRvbWFpbi5zdG9wcykgJiYgQXJyYXkuaXNBcnJheShkb21haW4ueik7XG59XG5cbmV4cG9ydCB0eXBlIERvbWFpblF1YW50aWxlcyA9IHtcbiAgcXVhbnRpbGVzOiBudW1iZXJbXTtcbiAgejogbnVtYmVyW107XG59O1xuXG4vKipcbiAqIHdoZXRoZXIgZmllbGQgZG9tYWluIGlzIHF1YW50aWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb21haW5RdWFudGlsZShkb21haW46IGFueSk6IGRvbWFpbiBpcyBEb21haW5RdWFudGlsZXMge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdChkb21haW4pICYmIEFycmF5LmlzQXJyYXkoZG9tYWluLnF1YW50aWxlcykgJiYgQXJyYXkuaXNBcnJheShkb21haW4ueik7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkb21haW4gYXQgem9vbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhyZXNob2xkc0Zyb21RdWFudGlsZXMoXG4gIHF1YW50aWxlczogbnVtYmVyW10sXG4gIGJ1Y2tldHM6IG51bWJlclxuKTogKG51bWJlciB8IHVuZGVmaW5lZClbXSB7XG4gIGNvbnN0IHRocmVzaG9sZHMgPSBbXTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYnVja2V0cykgfHwgYnVja2V0cyA8IDEpIHtcbiAgICByZXR1cm4gW3F1YW50aWxlc1swXSwgcXVhbnRpbGVzW3F1YW50aWxlcy5sZW5ndGggLSAxXV07XG4gIH1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBidWNrZXRzOyBpKyspIHtcbiAgICAvLyBwb3NpdGlvbiBpbiBzb3J0ZWQgYXJyYXlcbiAgICBjb25zdCBwb3NpdGlvbiA9IGkgLyBidWNrZXRzO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aHJlc2hvbGRzLnB1c2goZDNRdWFudGlsZShxdWFudGlsZXMsIHBvc2l0aW9uKSk7XG4gIH1cblxuICByZXR1cm4gdGhyZXNob2xkcztcbn1cblxuLyoqXG4gKiBnZXQgdGhlIGRvbWFpbiBhdCB6b29tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW46IGFueVtdLCBzdGVwczogbnVtYmVyW10sIHo6IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IGkgPSBiaXNlY3RMZWZ0KHN0ZXBzLCB6KTtcblxuICBpZiAoc3RlcHNbaV0gPT09IHopIHtcbiAgICAvLyBJZiB6IGlzIGFuIGludGVnZXIgdmFsdWUgZXhhY3RseSBtYXRjaGluZyBhIHN0ZXAsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBkb21haW5cbiAgICByZXR1cm4gZG9tYWluW2ldO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBuZXh0IGNvYXJzZXN0IGRvbWFpblxuICByZXR1cm4gZG9tYWluW01hdGgubWF4KGkgLSAxLCAwKV07XG59XG5cbi8qKlxuICogR2V0IGQzIHNjYWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUZ1bmN0aW9uKFxuICBzY2FsZTogc3RyaW5nLFxuICByYW5nZTogYW55W10gfCBJdGVyYWJsZUl0ZXJhdG9yPGFueT4sXG4gIGRvbWFpbjogKG51bWJlciB8IHVuZGVmaW5lZClbXSB8IHN0cmluZ1tdIHwgSXRlcmFibGVJdGVyYXRvcjxhbnk+LFxuICBmaXhlZD86IGJvb2xlYW5cbik6IEQzU2NhbGVGdW5jdGlvbiB7XG4gIGNvbnN0IHNjYWxlRnVuY3Rpb24gPSBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV0oKVxuICAgIC5kb21haW4oZG9tYWluKVxuICAgIC5yYW5nZShmaXhlZCA/IGRvbWFpbiA6IHJhbmdlKTtcbiAgc2NhbGVGdW5jdGlvbi5zY2FsZVR5cGUgPSBmaXhlZCA/ICdsaW5lYXInIDogc2NhbGU7XG4gIHJldHVybiBzY2FsZUZ1bmN0aW9uO1xufVxuXG4vKipcbiAqIEdldCB0aHJlc2hvbGQgc2NhbGUgY29sb3IgbGFiZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFRocmVzaG9sZExhYmVscyhcbiAgc2NhbGU6IEQzU2NhbGVGdW5jdGlvbixcbiAgbGFiZWxGb3JtYXQ6IExhYmVsRm9ybWF0XG4pOiBPbWl0PENvbG9yQnJlYWssICdkYXRhJz5bXSB7XG4gIGNvbnN0IGdlbkxlbmd0aCA9IHNjYWxlLnJhbmdlKCkubGVuZ3RoO1xuICByZXR1cm4gc2NhbGUucmFuZ2UoKS5tYXAoKGQsIGkpID0+IHtcbiAgICBjb25zdCBpbnZlcnQgPSBzY2FsZS5pbnZlcnRFeHRlbnQoZCk7XG4gICAgY29uc3QgaW5wdXRzID0gW1xuICAgICAgaSA9PT0gMCA/IG51bGwgOiByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFswXSkpLFxuICAgICAgaSA9PT0gZ2VuTGVuZ3RoIC0gMSA/IG51bGwgOiByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFsxXSkpXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gcmF3IHZhbHVlXG4gICAgICByYW5nZTogaW52ZXJ0LFxuICAgICAgLy8gZm9ybWF0dGVkIHZhbHVlXG4gICAgICBpbnB1dHMsXG4gICAgICBsYWJlbDpcbiAgICAgICAgaSA9PT0gMFxuICAgICAgICAgID8gYExlc3MgdGhhbiAke2xhYmVsRm9ybWF0KGludmVydFsxXSl9YFxuICAgICAgICAgIDogaSA9PT0gZ2VuTGVuZ3RoIC0gMVxuICAgICAgICAgID8gYCR7bGFiZWxGb3JtYXQoaW52ZXJ0WzBdKX0gb3IgbW9yZWBcbiAgICAgICAgICA6IGAke2xhYmVsRm9ybWF0KGludmVydFswXSl9IHRvICR7bGFiZWxGb3JtYXQoaW52ZXJ0WzFdKX1gXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGxpbmVhciAvIHF1YW50IHNjYWxlIGNvbG9yIGxhYmVsc1xuICovXG5mdW5jdGlvbiBnZXRTY2FsZUxhYmVscyhcbiAgc2NhbGU6IEQzU2NhbGVGdW5jdGlvbixcbiAgbGFiZWxGb3JtYXQ6IExhYmVsRm9ybWF0XG4pOiBPbWl0PENvbG9yQnJlYWssICdkYXRhJz5bXSB7XG4gIHJldHVybiBzY2FsZS5yYW5nZSgpLm1hcChkID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0RXh0ZW50KGQpO1xuICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgIHJldmVyc2VGb3JtYXROdW1iZXIobGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSksXG4gICAgICByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFsxXSkpXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYCR7bGFiZWxGb3JtYXQoaW52ZXJ0WzBdKX0gdG8gJHtsYWJlbEZvcm1hdChpbnZlcnRbMV0pfWAsXG4gICAgICAvLyByYXcgdmFsdWVcbiAgICAgIHJhbmdlOiBpbnZlcnQsXG4gICAgICAvLyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgIGlucHV0c1xuICAgIH07XG4gIH0pO1xufVxuXG5jb25zdCBjdXN0b21TY2FsZUxhYmVsRm9ybWF0ID0gbiA9PiAobiA/IGZvcm1hdE51bWJlcihuLCAncmVhbCcpIDogJ25vIHZhbHVlJyk7XG4vKipcbiAqIEdldCBsaW5lYXIgLyBxdWFudCBzY2FsZSBjb2xvciBicmVha3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1YW50TGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uLCBsYWJlbEZvcm1hdDogTGFiZWxGb3JtYXQpOiBDb2xvckJyZWFrW10ge1xuICBpZiAodHlwZW9mIHNjYWxlLmludmVydEV4dGVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCB0aHJlc2hvbGRMYWJlbEZvcm1hdCA9IChuLCB0eXBlKSA9PlxuICAgIG4gJiYgbGFiZWxGb3JtYXQgPyBsYWJlbEZvcm1hdChuKSA6IG4gPyBmb3JtYXROdW1iZXIobiwgdHlwZSkgOiAnbm8gdmFsdWUnO1xuICBjb25zdCBsYWJlbHMgPVxuICAgIHNjYWxlLnNjYWxlVHlwZSA9PT0gJ3RocmVzaG9sZCdcbiAgICAgID8gZ2V0VGhyZXNob2xkTGFiZWxzKHNjYWxlLCB0aHJlc2hvbGRMYWJlbEZvcm1hdClcbiAgICAgIDogc2NhbGUuc2NhbGVUeXBlID09PSAnY3VzdG9tJ1xuICAgICAgPyBnZXRUaHJlc2hvbGRMYWJlbHMoc2NhbGUsIGN1c3RvbVNjYWxlTGFiZWxGb3JtYXQpXG4gICAgICA6IGdldFNjYWxlTGFiZWxzKHNjYWxlLCBsYWJlbEZvcm1hdCk7XG5cbiAgY29uc3QgZGF0YSA9IHNjYWxlLnJhbmdlKCk7XG5cbiAgcmV0dXJuIGxhYmVscy5tYXAoKGxhYmVsLCBpbmRleCkgPT4gKHtcbiAgICBkYXRhOiBBcnJheS5pc0FycmF5KGRhdGFbaW5kZXhdKSA/IHJnYlRvSGV4KGRhdGFbaW5kZXhdIGFzIFJHQkNvbG9yKSA6IGRhdGFbaW5kZXhdLFxuICAgIC4uLmxhYmVsXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBHZXQgb3JkaW5hbCBjb2xvciBzY2FsZSBsZWdlbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmRpbmFsTGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uKTogQ29sb3JCcmVha09yZGluYWxbXSB7XG4gIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpO1xuICBjb25zdCBsYWJlbHMgPSBzY2FsZS5kb21haW4oKTtcbiAgY29uc3QgZGF0YSA9IGRvbWFpbi5tYXAoc2NhbGUpO1xuXG4gIHJldHVybiBkYXRhLm1hcCgoZGF0dW0sIGluZGV4KSA9PiAoe1xuICAgIGRhdGE6IGlzUmdiQ29sb3IoZGF0dW0pID8gcmdiVG9IZXgoZGF0dW0pIDogZGF0dW0sXG4gICAgbGFiZWw6IGxhYmVsc1tpbmRleF1cbiAgfSkpO1xufVxuXG5jb25zdCBkZWZhdWx0Rm9ybWF0ID0gZCA9PiBkO1xuXG5jb25zdCBnZXRUaW1lTGFiZWxGb3JtYXQgPSBkb21haW4gPT4ge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW4pO1xuICByZXR1cm4gdmFsID0+IG1vbWVudC51dGModmFsKS5mb3JtYXQoZm9ybWF0dGVyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWFudExhYmVsRm9ybWF0KGRvbWFpbiwgZmllbGRUeXBlKSB7XG4gIC8vIHF1YW50IHNjYWxlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIHRvIGxpbmVhciBGaWVsZHM6IHJlYWwsIHRpbWVzdGFtcCwgaW50ZWdlclxuICByZXR1cm4gZmllbGRUeXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wXG4gICAgPyBnZXRUaW1lTGFiZWxGb3JtYXQoZG9tYWluKVxuICAgIDogIWZpZWxkVHlwZVxuICAgID8gZGVmYXVsdEZvcm1hdFxuICAgIDogbiA9PiAoaXNOdW1iZXIobikgPyBmb3JtYXROdW1iZXIobiwgZmllbGRUeXBlKSA6ICdubyB2YWx1ZScpO1xufVxuXG4vKipcbiAqIEdldCBsZWdlbmRzIGZvciBzY2FsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnZW5kT2ZTY2FsZSh7XG4gIHNjYWxlLFxuICBzY2FsZVR5cGUsXG4gIGxhYmVsRm9ybWF0LFxuICBmaWVsZFR5cGVcbn06IHtcbiAgc2NhbGU/OiBEM1NjYWxlRnVuY3Rpb24gfCBudWxsO1xuICBzY2FsZVR5cGU6IHN0cmluZztcbiAgbGFiZWxGb3JtYXQ/OiBMYWJlbEZvcm1hdDtcbiAgZmllbGRUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufSk6IENvbG9yQnJlYWtbXSB8IENvbG9yQnJlYWtPcmRpbmFsW10ge1xuICBpZiAoIXNjYWxlIHx8IHNjYWxlLmJ5Wm9vbSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoXG4gICAgc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsIHx8XG4gICAgc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsIHx8XG4gICAgZmllbGRUeXBlID09PSBBTExfRklFTERfVFlQRVMuc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBnZXRPcmRpbmFsTGVnZW5kcyhzY2FsZSk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRMYWJlbCA9IGxhYmVsRm9ybWF0IHx8IGdldFF1YW50TGFiZWxGb3JtYXQoc2NhbGUuZG9tYWluKCksIGZpZWxkVHlwZSk7XG5cbiAgcmV0dXJuIGdldFF1YW50TGVnZW5kcyhzY2FsZSwgZm9ybWF0TGFiZWwpO1xufVxuXG4vKipcbiAqIEdldCBjb2xvciBzY2FsZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJDb2xvclNjYWxlKHtcbiAgcmFuZ2UsXG4gIGRvbWFpbixcbiAgc2NhbGVUeXBlLFxuICBsYXllclxufToge1xuICByYW5nZTogQ29sb3JSYW5nZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc2NhbGVUeXBlOiBzdHJpbmc7XG4gIGxheWVyOiBMYXllcjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG59KTogRDNTY2FsZUZ1bmN0aW9uIHwgbnVsbCB7XG4gIGlmIChyYW5nZSAmJiBkb21haW4gJiYgc2NhbGVUeXBlKSB7XG4gICAgcmV0dXJuIGxheWVyLmdldENvbG9yU2NhbGUoc2NhbGVUeXBlLCBkb21haW4sIHJhbmdlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbG9yUmFuZ2UuY29sb3JNYXAgaW50byBjb2xvciBicmVha3MgVUkgaW5wdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVMYXllckNvbG9yTWFwKGxheWVyOiBMYXllciwgdmlzdWFsQ2hhbm5lbDogVmlzdWFsQ2hhbm5lbCk6IENvbG9yTWFwIHtcbiAgY29uc3QgZG9tYWluID0gbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZG9tYWluXTtcbiAgY29uc3QgcmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdO1xuICBjb25zdCBzY2FsZVR5cGUgPSBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5zY2FsZV07XG4gIGNvbnN0IGZpZWxkID0gbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuXG4gIGNvbnN0IHNjYWxlID0gZ2V0TGF5ZXJDb2xvclNjYWxlKHtcbiAgICByYW5nZSxcbiAgICBkb21haW4sXG4gICAgc2NhbGVUeXBlLFxuICAgIGxheWVyXG4gIH0pO1xuXG4gIGNvbnN0IGNvbG9yQnJlYWtzID0gZ2V0TGVnZW5kT2ZTY2FsZSh7XG4gICAgc2NhbGU6IHNjYWxlPy5ieVpvb20gPyBzY2FsZSgwKSA6IHNjYWxlLFxuICAgIHNjYWxlVHlwZSxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG4gIHJldHVybiBjb2xvckJyZWFrc1RvQ29sb3JNYXAoY29sb3JCcmVha3MpO1xufVxuXG4vKipcbiAqIEdldCB2aXN1YWwgY2hhbmVsIHNjYWxlIGZ1bmN0aW9uIGlmIGl0J3MgYmFzZWQgb24gem9vbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsQ2hhbm5lbFNjYWxlQnlab29tKHtcbiAgc2NhbGUsXG4gIGxheWVyLFxuICBtYXBTdGF0ZVxufToge1xuICBzY2FsZTogRDNTY2FsZUZ1bmN0aW9uIHwgbnVsbDtcbiAgbGF5ZXI6IExheWVyO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xufSk6IEQzU2NhbGVGdW5jdGlvbiB8IG51bGwge1xuICBpZiAoc2NhbGU/LmJ5Wm9vbSkge1xuICAgIGNvbnN0IHogPSBsYXllci5tZXRhPy5nZXRab29tID8gbGF5ZXIubWV0YS5nZXRab29tKG1hcFN0YXRlKSA6IG1hcFN0YXRlPy56b29tO1xuICAgIHNjYWxlID0gTnVtYmVyLmlzRmluaXRlKHopID8gc2NhbGUoeikgOiBudWxsO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuLyoqXG4gKiBHZXQgY2F0ZWdvcmljYWwgY29sb3JNYXAgZnJvbSBjb2xvcnMgYW5kIGRvbWFpbiAodW5pcXVlIHZhbHVlcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JNYXAoXG4gIGNvbG9yczogc3RyaW5nW10sXG4gIGRvbWFpbjogKHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBudWxsKVtdXG4pOiBhbnkge1xuICBjb25zdCB1bmlxdWVWYWx1ZXMgPSB1bmlxdWUoZG9tYWluKS5zb3J0KCk7XG4gIGNvbnN0IGNvbG9yTWFwID0gY29sb3JzLm1hcChjb2xvciA9PiBbbnVsbCwgY29sb3JdKTtcblxuICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMCB8fCB1bmlxdWVWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGFzc2lnbkNvdW50ID0gTWF0aC5taW4obGFzdEluZGV4LCB1bmlxdWVWYWx1ZXMubGVuZ3RoKTtcblxuICAvLyBBc3NpZ24gZmlyc3QgdmFsdWVzIG9uZS10by1vbmUgdXAgdG8gdGhlIHBlbnVsdGltYXRlIGNvbG9yIChpZiBhbnkpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXNzaWduQ291bnQ7IGkrKykge1xuICAgIC8vIEB0cy1pZ25vcmUgdHVwbGVcbiAgICBjb2xvck1hcFtpXVswXSA9IHVuaXF1ZVZhbHVlc1tpXTtcbiAgfVxuXG4gIGlmICh1bmlxdWVWYWx1ZXMubGVuZ3RoID4gY29sb3JzLmxlbmd0aCkge1xuICAgIC8vIEFnZ3JlZ2F0ZSB0aGUgcmVzdCAoaW5jbHVkaW5nIHRoZSB2YWx1ZSB0aGF0IHdvdWxkIGhhdmUgZ29uZSB0byBsYXN0IGNvbG9yKVxuICAgIC8vIEJ1aWxkIGFnZ3JlZ2F0ZWQgYXJyYXkgaW5jcmVtZW50YWxseSB0byBtYXRjaCBsZWdhY3kgYmVoYXZpb3JcbiAgICBjb25zdCBhZ2dyZWdhdGVkVmFsdWVzOiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBsYXN0SW5kZXg7IGkgPCB1bmlxdWVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5pcXVlVmFsdWVzW2ldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIC8vIFNwcmVhZCBhcnJheSBlbGVtZW50cyB0byBtYXRjaCBsZWdhY3kgZmxhdHRlbmluZyBiZWhhdmlvclxuICAgICAgICBhZ2dyZWdhdGVkVmFsdWVzLnB1c2goLi4uKHZhbHVlIGFzIGFueVtdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZ2dyZWdhdGVkVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gICAgY29sb3JNYXBbbGFzdEluZGV4XVswXSA9IGFnZ3JlZ2F0ZWRWYWx1ZXM7XG4gIH0gZWxzZSBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA9PT0gY29sb3JzLmxlbmd0aCkge1xuICAgIC8vIEV4YWN0bHkgb25lIHBlciBjb2xvclxuICAgIC8vIEB0cy1pZ25vcmUgdHVwbGVcbiAgICBjb2xvck1hcFtsYXN0SW5kZXhdWzBdID0gdW5pcXVlVmFsdWVzW2xhc3RJbmRleF07XG4gIH1cblxuICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gIHJldHVybiBjb2xvck1hcDtcbn1cblxuLyoqXG4gKiBHZXQgY2F0ZWdvcmljYWwgY29sb3JCcmVha3MgZnJvbSBjb2xvck1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MoXG4gIGNvbG9yTWFwPzogQ29sb3JNYXAgfCBudWxsXG4pOiBDb2xvckJyZWFrT3JkaW5hbFtdIHwgbnVsbCB7XG4gIGlmICghY29sb3JNYXApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjb2xvckJyZWFrcyA9IGNvbG9yTWFwLm1hcCgoW3ZhbHVlLCBjb2xvcl0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogY29sb3IsXG4gICAgICBsYWJlbDogdmFsdWVcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gY29sb3JCcmVha3M7XG59XG5cbi8qKlxuICogY3JlYXRlIGNhdGVnb3JpY2FsIGNvbG9yTWFwIGZyb20gY29sb3JCcmVha3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnJlYWtzVG9DYXRlZ29yaWNhbENvbG9yTWFwKGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrT3JkaW5hbFtdKTogQ29sb3JNYXAge1xuICAvLyBjb2xvck1hcDogW3N0cmluZyB8IHN0cmluZ1tdLCBoZXhzdHJpbmddXG4gIGNvbnN0IGNvbG9ycyA9IHVuaXEoY29sb3JCcmVha3MubWFwKGNiID0+IGNiLmRhdGEpKTtcbiAgY29uc3QgdmFsdWVzID0gdW5pcShjb2xvckJyZWFrcy5tYXAoY2IgPT4gY2IubGFiZWwpKTtcblxuICByZXR1cm4gZ2V0Q2F0ZWdvcmljYWxDb2xvck1hcChjb2xvcnMsIHZhbHVlcyk7XG59XG5cbi8qKlxuICogQ29udmVydCBjb2xvciBicmVha3MgVUkgaW5wdXQgaW50byBjb2xvclJhbmdlLmNvbG9yTWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckJyZWFrc1RvQ29sb3JNYXAoY29sb3JCcmVha3M6IENvbG9yQnJlYWtbXSB8IENvbG9yQnJlYWtPcmRpbmFsW10pOiBDb2xvck1hcCB7XG4gIGNvbnN0IGNvbG9yTWFwID0gY29sb3JCcmVha3MubWFwKChjb2xvckJyZWFrLCBpKSA9PiB7XG4gICAgLy8gW3ZhbHVlLCBoZXhdXG4gICAgcmV0dXJuIFtcbiAgICAgIGNvbG9yQnJlYWsuaW5wdXRzXG4gICAgICAgID8gaSA9PT0gY29sb3JCcmVha3MubGVuZ3RoIC0gMVxuICAgICAgICAgID8gbnVsbCAvLyBsYXN0XG4gICAgICAgICAgOiBjb2xvckJyZWFrLmlucHV0c1sxXVxuICAgICAgICA6IGNvbG9yQnJlYWsubGFiZWwsXG4gICAgICBjb2xvckJyZWFrLmRhdGFcbiAgICBdO1xuICB9KTtcblxuICAvLyBAdHMtaWdub3JlIHR1cGxlXG4gIHJldHVybiBjb2xvck1hcDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbG9yUmFuZ2UuY29sb3JNYXAgaW50byBjb2xvciBicmVha3MgVUkgaW5wdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yTWFwVG9Db2xvckJyZWFrcyhjb2xvck1hcD86IENvbG9yTWFwIHwgbnVsbCk6IENvbG9yQnJlYWtbXSB8IG51bGwge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29sb3JCcmVha3MgPSBjb2xvck1hcC5tYXAoKFt2YWx1ZSwgY29sb3JdLCBpKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPVxuICAgICAgaSA9PT0gMFxuICAgICAgICA/IC8vIGZpcnN0XG4gICAgICAgICAgWy1JbmZpbml0eSwgdmFsdWVdXG4gICAgICAgIDogLy8gbGFzdFxuICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgID8gW2NvbG9yTWFwW2kgLSAxXVswXSwgSW5maW5pdHldXG4gICAgICAgIDogLy8gZWxzZVxuICAgICAgICAgIFtjb2xvck1hcFtpIC0gMV1bMF0sIHZhbHVlXTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogY29sb3IsXG4gICAgICByYW5nZSxcbiAgICAgIGlucHV0czogcmFuZ2UsXG4gICAgICBsYWJlbDpcbiAgICAgICAgLy8gZmlyc3RcbiAgICAgICAgaSA9PT0gMFxuICAgICAgICAgID8gYExlc3MgdGhhbiAke3ZhbHVlfWBcbiAgICAgICAgICA6IC8vIGxhc3RcbiAgICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgICAgPyBgJHtjb2xvck1hcFtpIC0gMV1bMF19IG9yIG1vcmVgXG4gICAgICAgICAgOiBgJHtjb2xvck1hcFtpIC0gMV1bMF19IHRvICR7dmFsdWV9YFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW1wbGVtZW50IGNvbnZlcnNpb24gZm9yIG9yZGluYWxcbiAgcmV0dXJuIGNvbG9yQnJlYWtzO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgY29sb3IgYnJlYWtzIGlzIGZvciBudW1lcmljIGZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNDb2xvckJyZWFrcyhjb2xvckJyZWFrczogdW5rbm93bik6IGNvbG9yQnJlYWtzIGlzIENvbG9yQnJlYWtbXSB7XG4gIHJldHVybiBCb29sZWFuKEFycmF5LmlzQXJyYXkoY29sb3JCcmVha3MpICYmIGNvbG9yQnJlYWtzLmxlbmd0aCAmJiBjb2xvckJyZWFrc1swXS5pbnB1dHMpO1xufVxuXG4vLyByZXR1cm4gZG9tYWluTWluLCBkb21haW5NYXgsIGhpc3RvZ3JhbU1lYW5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b2dyYW1Eb21haW4oe1xuICBhZ2dyZWdhdGVkQmlucyxcbiAgY29sdW1uU3RhdHMsXG4gIGRhdGFzZXQsXG4gIGZpZWxkVmFsdWVBY2Nlc3NvclxufToge1xuICBhZ2dyZWdhdGVkQmlucz86IEFnZ3JlZ2F0ZWRCaW5bXTtcbiAgY29sdW1uU3RhdHM/OiBGaWx0ZXJQcm9wc1snY29sdW1uU3RhdHMnXTtcbiAgZGF0YXNldD86IEtlcGxlclRhYmxlO1xuICBmaWVsZFZhbHVlQWNjZXNzb3I6IChpZHg6IHVua25vd24pID0+IG51bWJlcjtcbn0pIHtcbiAgbGV0IGRvbWFpbk1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgbGV0IGRvbWFpbk1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgbGV0IG5WYWxpZCA9IDA7XG4gIGxldCBkb21haW5TdW0gPSAwO1xuXG4gIGlmIChhZ2dyZWdhdGVkQmlucykge1xuICAgIE9iamVjdC52YWx1ZXMoYWdncmVnYXRlZEJpbnMpLmZvckVhY2goYmluID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGJpbi52YWx1ZTtcbiAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgIGlmICh2YWwgPCBkb21haW5NaW4pIGRvbWFpbk1pbiA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA+IGRvbWFpbk1heCkgZG9tYWluTWF4ID0gdmFsO1xuICAgICAgICBkb21haW5TdW0gKz0gdmFsO1xuICAgICAgICBuVmFsaWQgKz0gMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29sdW1uU3RhdHMgJiYgY29sdW1uU3RhdHMucXVhbnRpbGVzICYmIGNvbHVtblN0YXRzLm1lYW4pIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gcmVjYWxjdWF0ZSBtaW4vbWF4L21lYW4gaWYgaXRzIGFscmVhZHkgaW4gY29sdW1uU3RhdHNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGNvbHVtblN0YXRzLnF1YW50aWxlc1swXS52YWx1ZSxcbiAgICAgICAgY29sdW1uU3RhdHMucXVhbnRpbGVzW2NvbHVtblN0YXRzLnF1YW50aWxlcy5sZW5ndGggLSAxXS52YWx1ZSxcbiAgICAgICAgY29sdW1uU3RhdHMubWVhblxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKGRhdGFzZXQgJiYgZmllbGRWYWx1ZUFjY2Vzc29yKSB7XG4gICAgICBkYXRhc2V0LmFsbEluZGV4ZXMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gZmllbGRWYWx1ZUFjY2Vzc29yKHgpO1xuICAgICAgICBpZiAoaXNOdW1iZXIodmFsKSkge1xuICAgICAgICAgIGlmICh2YWwgPCBkb21haW5NaW4pIGRvbWFpbk1pbiA9IHZhbDtcbiAgICAgICAgICBpZiAodmFsID4gZG9tYWluTWF4KSBkb21haW5NYXggPSB2YWw7XG4gICAgICAgICAgZG9tYWluU3VtICs9IHZhbDtcbiAgICAgICAgICBuVmFsaWQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhpc3RvZ3JhbU1lYW4gPSBuVmFsaWQgPiAwID8gZG9tYWluU3VtIC8gblZhbGlkIDogMDtcbiAgcmV0dXJuIFtuVmFsaWQgPiAwID8gZG9tYWluTWluIDogMCwgblZhbGlkID4gMCA/IGRvbWFpbk1heCA6IDAsIGhpc3RvZ3JhbU1lYW5dO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYXRlZ29yaWNhbENvbG9yTWFwQnlJbmRleChjb2xvck1hcDogQ29sb3JNYXAsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuIFtudWxsLCBjbVsxXV07XG4gICAgfVxuICAgIHJldHVybiBjbTtcbiAgfSk7XG4gIHJldHVybiBuZXdDb2xvck1hcDtcbn1cblxuLyoqXG4gKiBzZWxlY3QgcmVzdCBjYXRlZ29yaWNhbCB2YWx1ZXMgZm9yIGEgY29sb3JNYXAgYnkgaXRzIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RSZXN0Q2F0ZWdvcmljYWxDb2xvck1hcEJ5SW5kZXgoXG4gIGNvbG9yTWFwOiBDb2xvck1hcCB8IG51bGwsXG4gIGluZGV4OiBudW1iZXIsXG4gIHVuaXF1ZVZhbHVlcz86IG51bWJlcltdIHwgc3RyaW5nW11cbik6IENvbG9yTWFwIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gIGlmICghY29sb3JNYXAgfHwgIXVuaXF1ZVZhbHVlcykge1xuICAgIHJldHVybiBjb2xvck1hcDtcbiAgfVxuXG4gIC8vIGZpbmQgdW5pcXVlIHZhbHVlcyB0aGF0IGhhcyBub3QgYmVlbiB1c2VkIGluIGN1cnJlbnQgY29sb3JNYXBcbiAgY29uc3QgdW5pcVZhbHVlRGljdCA9IE9iamVjdC5mcm9tRW50cmllcyh1bmlxdWVWYWx1ZXMubWFwKHZhbCA9PiBbdmFsLCBmYWxzZV0pKTtcbiAgY29sb3JNYXAuZm9yRWFjaChjbSA9PiB7XG4gICAgdG9BcnJheShjbVswXSkuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmICh2KSB1bmlxVmFsdWVEaWN0W3ZdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IHJlc3QgPSBPYmplY3Qua2V5cyh1bmlxVmFsdWVEaWN0KS5maWx0ZXIodiA9PiAhdW5pcVZhbHVlRGljdFt2XSk7XG5cbiAgLy8gdXNlIHRoZSBub3QgdXNlZCB1bmlxdWUgdmFsdWVzIGluIHRoZSBzZWxlY3RlZCBjb2xvciBtYXBcbiAgY29uc3QgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5tYXAoKGNtLCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gW1suLi5yZXN0LCAuLi50b0FycmF5KGNtWzBdKV0sIGNtWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIGNtO1xuICB9KSBhcyBDb2xvck1hcDtcblxuICByZXR1cm4gbmV3Q29sb3JNYXA7XG59XG5cbi8qKlxuICogcmVtb3ZlIGEgY2F0ZWdvcmljYWwgdmFsdWUgZnJvbSBhIGNvbG9yTWFwIGJ5IGl0cyBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2F0ZWdvcmljYWxWYWx1ZUZyb21Db2xvck1hcChcbiAgY29sb3JNYXA6IENvbG9yTWFwIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaXRlbTogbnVtYmVyIHwgc3RyaW5nLFxuICBpbmRleDogbnVtYmVyXG4pOiBDb2xvck1hcCB8IG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgaWYgKCFjbVswXSkge1xuICAgICAgICByZXR1cm4gW251bGwsIGNtWzFdXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRVbmlxdWVWYWx1ZXMgPSB0b0FycmF5KGNtWzBdKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRVbmlxdWVWYWx1ZXMgPSBjdXJyZW50VW5pcXVlVmFsdWVzLmZpbHRlcih2ID0+IHYgIT09IGl0ZW0pO1xuICAgICAgcmV0dXJuIFt1cGRhdGVkVW5pcXVlVmFsdWVzLCBjbVsxXV07XG4gICAgfVxuICAgIHJldHVybiBjbTtcbiAgfSkgYXMgQ29sb3JNYXA7XG5cbiAgcmV0dXJuIG5ld0NvbG9yTWFwO1xufVxuXG4vKipcbiAqIGFkZCBjYXRlZ29yaWNhbCB2YWx1ZXMgKGZyb20gbXVsdGlzZWwgZHJvcGRvd24pIHRvIGEgY29sb3JNYXAgYnkgaXRzIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDYXRlZ29yaWNhbFZhbHVlc1RvQ29sb3JNYXAoXG4gIGNvbG9yTWFwOiBDb2xvck1hcCxcbiAgaXRlbXM6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIGluZGV4OiBudW1iZXJcbik6IENvbG9yTWFwIHtcbiAgaWYgKCFjb2xvck1hcCkge1xuICAgIHJldHVybiBjb2xvck1hcDtcbiAgfVxuXG4gIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAubWFwKChjbSwgaSkgPT4ge1xuICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgaWYgKCFjbVswXSkge1xuICAgICAgICByZXR1cm4gW2l0ZW1zLCBjbVsxXV07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50VW5pcXVlVmFsdWVzID0gdG9BcnJheShjbVswXSk7XG4gICAgICBjb25zdCB1cGRhdGVkVW5pcXVlVmFsdWVzID0gdW5pcShjdXJyZW50VW5pcXVlVmFsdWVzLmNvbmNhdChpdGVtcykpO1xuICAgICAgcmV0dXJuIFt1cGRhdGVkVW5pcXVlVmFsdWVzLCBjbVsxXV07XG4gICAgfVxuICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG90aGVyIGNvbG9yTWFwXG4gICAgY29uc3QgY3VycmVudFVuaXF1ZVZhbHVlcyA9IGNtWzBdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRVbmlxdWVWYWx1ZXMpKSB7XG4gICAgICBjb25zdCB1cGRhdGVkVW5pcXVlVmFsdWVzOiBzdHJpbmdbXSB8IG51bWJlcltdID0gKGN1cnJlbnRVbmlxdWVWYWx1ZXMgYXMgYW55W10pLmZpbHRlcihcbiAgICAgICAgdiA9PiAhaXRlbXMuaW5jbHVkZXModilcbiAgICAgICk7XG4gICAgICByZXR1cm4gW3VwZGF0ZWRVbmlxdWVWYWx1ZXMsIGNtWzFdXTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRVbmlxdWVWYWx1ZXMgJiYgaXRlbXMuaW5jbHVkZXMoY3VycmVudFVuaXF1ZVZhbHVlcykpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgY21bMV1dO1xuICAgIH1cblxuICAgIHJldHVybiBjbTtcbiAgfSkgYXMgQ29sb3JNYXA7XG5cbiAgcmV0dXJuIG5ld0NvbG9yTWFwO1xufVxuXG4vKipcbiAqIGdldCBhIGNvbG9yIHNjYWxlIGZ1bmMgZm9yIGNhdGVnb3JpY2FsIChjdXN0b20gb3JkaW5hbCkgc2NhbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JTY2FsZShcbiAgY29sb3JEb21haW46IG51bWJlcltdIHwgc3RyaW5nW10sXG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2UsXG4gIHVzZVJnYiA9IHRydWVcbik6IChjYXRlZ29yeVZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IFJHQkNvbG9yIHwgUkdCQUNvbG9yIHtcbiAgY29uc3QgY01hcCA9IGNvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICA/IGNvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICA6IGdldENhdGVnb3JpY2FsQ29sb3JNYXAoY29sb3JSYW5nZS5jb2xvcnMsIGNvbG9yRG9tYWluKTtcblxuICBjb25zdCByYW5nZTogbnVtYmVyW11bXSA9IFtdO1xuICBjb25zdCBkb21haW46IHN0cmluZ1tdID0gW107XG4gIGNNYXAuZm9yRWFjaChjbSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY21bMF0pKSB7XG4gICAgICBjbVswXS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGRvbWFpbi5wdXNoKHZhbCk7XG4gICAgICAgIHJhbmdlLnB1c2godXNlUmdiID8gaGV4VG9SZ2IoY21bMV0pIDogY21bMV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbWFpbi5wdXNoKGNtWzBdKTtcbiAgICAgIHJhbmdlLnB1c2godXNlUmdiID8gaGV4VG9SZ2IoY21bMV0pIDogY21bMV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2NhbGUgPSBnZXRTY2FsZUZ1bmN0aW9uKFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsIHJhbmdlLCBkb21haW4sIGZhbHNlKTtcbiAgc2NhbGUudW5rbm93bihOT19WQUxVRV9DT0xPUik7XG4gIHJldHVybiBzY2FsZSBhcyBhbnk7XG59XG5cbi8qKlxuICogaW5pdGlhbGl6ZSBjdXN0b21QYWxldHRlIGJ5IGN1c3RvbSBzY2FsZSBvciBjdXN0b21PcmRpbmFsIHNjYWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICBzY2FsZSxcbiAgZmllbGQsXG4gIG9yZGluYWxEb21haW4sXG4gIHJhbmdlLFxuICBjb2xvckJyZWFrc1xufToge1xuICBzY2FsZTogc3RyaW5nO1xuICBmaWVsZD86IEZpZWxkO1xuICBvcmRpbmFsRG9tYWluPzogbnVtYmVyW10gfCBzdHJpbmdbXTtcbiAgcmFuZ2U6IENvbG9yUmFuZ2U7XG4gIGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrT3JkaW5hbFtdIHwgbnVsbDtcbn0pOiBDb2xvclVJWydjdXN0b21QYWxldHRlJ10ge1xuICBjb25zdCBjdXN0b21QYWxldHRlTmFtZSA9IGBjb2xvci5jdXN0b21QYWxldHRlLiR7c2NhbGV9LiR7ZmllbGQ/Lm5hbWUgfHwgJ3BvaW50LWNvdW50J31gO1xuICAvLyByZXVzZSByYW5nZS5jb2xvck1hcCBpZiB0aGUgZmllbGQgYW5kIHNjYWxlIG5vdCBjaGFuZ2VkXG4gIGNvbnN0IHJldXNlQ29sb3JNYXAgPSByYW5nZS5jb2xvck1hcCAmJiByYW5nZS5uYW1lID09PSBjdXN0b21QYWxldHRlTmFtZSAmJiByYW5nZS50eXBlID09PSBzY2FsZTtcbiAgY29uc3QgY29sb3JNYXAgPSByZXVzZUNvbG9yTWFwXG4gICAgPyByYW5nZS5jb2xvck1hcFxuICAgIDogc2NhbGUgPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiYgb3JkaW5hbERvbWFpblxuICAgID8gZ2V0Q2F0ZWdvcmljYWxDb2xvck1hcChyYW5nZS5jb2xvcnMsIG9yZGluYWxEb21haW4pXG4gICAgOiBjb2xvckJyZWFrcyAmJiBpc051bWVyaWNDb2xvckJyZWFrcyhjb2xvckJyZWFrcylcbiAgICA/IGNvbG9yQnJlYWtzVG9Db2xvck1hcChjb2xvckJyZWFrcylcbiAgICA6IG51bGw7XG4gIGNvbnN0IGNvbG9ycyA9IHJldXNlQ29sb3JNYXAgPyByYW5nZS5jb2xvcnMgOiBjb2xvck1hcCA/IGNvbG9yTWFwLm1hcChjbSA9PiBjbVsxXSkgOiByYW5nZS5jb2xvcnM7XG5cbiAgLy8gdXBkYXRlIGN1c3RvbSBicmVha3NcbiAgY29uc3QgY3VzdG9tUGFsZXR0ZTogQ29sb3JVSVsnY3VzdG9tUGFsZXR0ZSddID0ge1xuICAgIGNhdGVnb3J5OiAnQ3VzdG9tJyxcbiAgICBuYW1lOiBjdXN0b21QYWxldHRlTmFtZSxcbiAgICB0eXBlOiBzY2FsZSxcbiAgICBjb2xvck1hcCxcbiAgICBjb2xvcnM6IGNvbG9ycyB8fCBbXVxuICB9O1xuXG4gIHJldHVybiBjdXN0b21QYWxldHRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQWlCQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxN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
|
package/dist/data-utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TooltipFormat } from '@kepler.gl/constants';
|
|
2
2
|
import { Field, Millisecond, ProtoDatasetField } from '@kepler.gl/types';
|
|
3
|
-
export
|
|
3
|
+
export type FieldFormatter = (value: any, field?: ProtoDatasetField) => string;
|
|
4
4
|
export declare const MAX_LATITUDE = 89.9;
|
|
5
5
|
export declare const MIN_LATITUDE = -89.9;
|
|
6
6
|
export declare const MAX_LONGITUDE = 180;
|
package/dist/dataset-utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ProcessorResult, RGBColor, Field, FieldPair, TimeLabelFormat, TooltipFields, ProtoDataset } from '@kepler.gl/types';
|
|
2
2
|
import { TooltipFormat } from '@kepler.gl/constants';
|
|
3
|
-
export declare const datasetColorMaker: Generator<RGBColor, any,
|
|
3
|
+
export declare const datasetColorMaker: Generator<RGBColor, any, any>;
|
|
4
4
|
/**
|
|
5
5
|
* Choose a field to use as the default color field of a layer.
|
|
6
6
|
*
|
package/dist/effect-utils.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Effect as DeckEffect } from '@deck.gl/core';
|
|
2
2
|
import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
|
|
3
|
-
|
|
4
|
-
export declare function computeDeckEffects({ visState, mapState }: {
|
|
3
|
+
type VisState = any;
|
|
4
|
+
export declare function computeDeckEffects({ visState, mapState, isExport }: {
|
|
5
5
|
visState: VisState;
|
|
6
6
|
mapState: MapState;
|
|
7
|
-
|
|
7
|
+
isExport?: boolean;
|
|
8
|
+
}): DeckEffect[];
|
|
8
9
|
/**
|
|
9
|
-
* Always keep light & shadow effect at the top
|
|
10
|
+
* Always keep light & shadow effect at the top, then distance fog and
|
|
11
|
+
* surface fog right after it (before other post-processing effects).
|
|
12
|
+
* Both fog effects read the depth buffer from renderBuffers[0];
|
|
13
|
+
* subsequent effects clear depth during their render passes, so fog
|
|
14
|
+
* must run before that happens.
|
|
10
15
|
*/
|
|
11
16
|
export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
|
|
12
17
|
export declare function reorderEffectOrder(effectOrder: string[], originEffectId: string, destinationEffectId: string): string[];
|
|
@@ -18,7 +23,5 @@ export declare function reorderEffectOrder(effectOrder: string[], originEffectId
|
|
|
18
23
|
* @param effectDescription Description of an effect.
|
|
19
24
|
* @returns
|
|
20
25
|
*/
|
|
21
|
-
export declare function validateEffectParameters(parameters:
|
|
22
|
-
[key: string]: any;
|
|
23
|
-
} | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];
|
|
26
|
+
export declare function validateEffectParameters(parameters: EffectProps["parameters"] | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];
|
|
24
27
|
export {};
|