@datagrok-libraries/statistics 1.2.10 → 1.2.12
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/CHANGELOG.md +12 -0
- package/package.json +6 -6
- package/src/fit/fit-curve.d.ts +7 -4
- package/src/fit/fit-curve.d.ts.map +1 -1
- package/src/fit/fit-curve.js +33 -32
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# statistics changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.12 (2024-03-14)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* [#2105](https://github.com/datagrok-ai/public/issues/2105): Added outlier color property.
|
|
8
|
+
|
|
9
|
+
## 1.2.11 (2023-11-17)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Added allowXZeroes property for logarithmic data.
|
|
14
|
+
|
|
3
15
|
## 1.2.10 (2023-11-09)
|
|
4
16
|
|
|
5
17
|
### Bug Fixes
|
package/package.json
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "statistics",
|
|
7
|
-
"version": "1.2.
|
|
8
|
-
"description": "",
|
|
7
|
+
"version": "1.2.12",
|
|
8
|
+
"description": "Statistics utilities",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"datagrok-api": "^1.
|
|
11
|
-
"@datagrok-libraries/utils": "^4.1.
|
|
12
|
-
"cash-dom": "
|
|
13
|
-
"jstat": "
|
|
10
|
+
"datagrok-api": "^1.18.0",
|
|
11
|
+
"@datagrok-libraries/utils": "^4.1.45",
|
|
12
|
+
"cash-dom": "^8.0.0",
|
|
13
|
+
"jstat": "^1.9.6",
|
|
14
14
|
"dayjs": "^1.11.7"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
package/src/fit/fit-curve.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
2
|
export declare const FitErrorModel: {
|
|
3
3
|
CONSTANT: string;
|
|
4
4
|
PROPORTIONAL: string;
|
|
@@ -77,6 +77,7 @@ export interface IFitPoint {
|
|
|
77
77
|
y: number;
|
|
78
78
|
outlier?: boolean;
|
|
79
79
|
color?: string;
|
|
80
|
+
outlierColor?: string;
|
|
80
81
|
marker?: FitMarkerType;
|
|
81
82
|
size?: number;
|
|
82
83
|
stdev?: number;
|
|
@@ -103,6 +104,7 @@ export interface IFitChartOptions {
|
|
|
103
104
|
yAxisName?: string;
|
|
104
105
|
logX?: boolean;
|
|
105
106
|
logY?: boolean;
|
|
107
|
+
allowXZeroes?: boolean;
|
|
106
108
|
showStatistics?: string[];
|
|
107
109
|
labelOptions?: IFitChartLabelOptions[];
|
|
108
110
|
}
|
|
@@ -129,6 +131,7 @@ export interface IFitSeriesOptions {
|
|
|
129
131
|
pointColor?: string;
|
|
130
132
|
fitLineColor?: string;
|
|
131
133
|
confidenceIntervalColor?: string;
|
|
134
|
+
outlierColor?: string;
|
|
132
135
|
showFitLine?: boolean;
|
|
133
136
|
showPoints?: string;
|
|
134
137
|
showCurveConfidenceInterval?: boolean;
|
|
@@ -140,11 +143,11 @@ export interface IFitSeriesOptions {
|
|
|
140
143
|
droplines?: string[];
|
|
141
144
|
}
|
|
142
145
|
/** Properties that describe {@link FitStatistics}. Useful for editing, initialization, transformations, etc. */
|
|
143
|
-
export declare const statisticsProperties: Property[];
|
|
146
|
+
export declare const statisticsProperties: DG.Property[];
|
|
144
147
|
/** Properties that describe {@link IFitChartOptions}. Useful for editing, initialization, transformations, etc. */
|
|
145
|
-
export declare const fitChartDataProperties: Property[];
|
|
148
|
+
export declare const fitChartDataProperties: DG.Property[];
|
|
146
149
|
/** Properties that describe {@link IFitSeriesOptions}. Useful for editing, initialization, transformations, etc. */
|
|
147
|
-
export declare const fitSeriesProperties: Property[];
|
|
150
|
+
export declare const fitSeriesProperties: DG.Property[];
|
|
148
151
|
export declare const FIT_FUNCTION_SIGMOID = "sigmoid";
|
|
149
152
|
export declare const FIT_FUNCTION_LINEAR = "linear";
|
|
150
153
|
export declare const FIT_STATS_RSQUARED = "rSquared";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
|
package/src/fit/fit-curve.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-len */
|
|
2
2
|
/* eslint-disable no-multi-spaces */
|
|
3
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
|
-
import { Property } from 'datagrok-api/src/entities';
|
|
5
|
-
import { TYPE } from 'datagrok-api/src/const';
|
|
6
4
|
import { limitedMemoryBFGS } from '../../lbfgs/lbfgs';
|
|
7
5
|
//@ts-ignore: no types
|
|
8
6
|
import * as jStat from 'jstat';
|
|
@@ -52,49 +50,52 @@ export class FitChartData {
|
|
|
52
50
|
// TODO: show labels in property panel if present, color by default from series
|
|
53
51
|
/** Properties that describe {@link FitStatistics}. Useful for editing, initialization, transformations, etc. */
|
|
54
52
|
export const statisticsProperties = [
|
|
55
|
-
Property.js('rSquared', TYPE.FLOAT, { userEditable: false }),
|
|
56
|
-
Property.js('auc', TYPE.FLOAT, { userEditable: false }),
|
|
57
|
-
Property.js('interceptY', TYPE.FLOAT, { userEditable: false }),
|
|
58
|
-
Property.js('interceptX', TYPE.FLOAT, { userEditable: false }),
|
|
59
|
-
Property.js('slope', TYPE.FLOAT, { userEditable: false }),
|
|
60
|
-
Property.js('top', TYPE.FLOAT, { userEditable: false }),
|
|
61
|
-
Property.js('bottom', TYPE.FLOAT, { userEditable: false }),
|
|
53
|
+
DG.Property.js('rSquared', DG.TYPE.FLOAT, { userEditable: false }),
|
|
54
|
+
DG.Property.js('auc', DG.TYPE.FLOAT, { userEditable: false }),
|
|
55
|
+
DG.Property.js('interceptY', DG.TYPE.FLOAT, { userEditable: false }),
|
|
56
|
+
DG.Property.js('interceptX', DG.TYPE.FLOAT, { userEditable: false }),
|
|
57
|
+
DG.Property.js('slope', DG.TYPE.FLOAT, { userEditable: false }),
|
|
58
|
+
DG.Property.js('top', DG.TYPE.FLOAT, { userEditable: false }),
|
|
59
|
+
DG.Property.js('bottom', DG.TYPE.FLOAT, { userEditable: false }),
|
|
62
60
|
];
|
|
63
61
|
/** Properties that describe {@link IFitChartOptions}. Useful for editing, initialization, transformations, etc. */
|
|
64
62
|
export const fitChartDataProperties = [
|
|
65
63
|
// Style and zoom
|
|
66
|
-
Property.js('minX', TYPE.FLOAT, { description: 'Minimum value of the X axis', nullable: true }),
|
|
67
|
-
Property.js('minY', TYPE.FLOAT, { description: 'Minimum value of the Y axis', nullable: true }),
|
|
68
|
-
Property.js('maxX', TYPE.FLOAT, { description: 'Maximum value of the X axis', nullable: true }),
|
|
69
|
-
Property.js('maxY', TYPE.FLOAT, { description: 'Maximum value of the Y axis', nullable: true }),
|
|
70
|
-
Property.js('title', TYPE.STRING, { nullable: true }),
|
|
71
|
-
Property.js('xAxisName', TYPE.STRING, { description: 'Label to show on the X axis. If not specified, corresponding data column name is used', nullable: true }),
|
|
72
|
-
Property.js('yAxisName', TYPE.STRING, { description: 'Label to show on the Y axis. If not specified, corresponding data column name is used', nullable: true }),
|
|
73
|
-
Property.js('logX', TYPE.BOOL, { description: 'Whether the X axis should be logarithmic', defaultValue: false }),
|
|
74
|
-
Property.js('logY', TYPE.BOOL, { description: 'Whether the Y axis should be logarithmic', defaultValue: false }),
|
|
75
|
-
Property.js('
|
|
64
|
+
DG.Property.js('minX', DG.TYPE.FLOAT, { description: 'Minimum value of the X axis', nullable: true }),
|
|
65
|
+
DG.Property.js('minY', DG.TYPE.FLOAT, { description: 'Minimum value of the Y axis', nullable: true }),
|
|
66
|
+
DG.Property.js('maxX', DG.TYPE.FLOAT, { description: 'Maximum value of the X axis', nullable: true }),
|
|
67
|
+
DG.Property.js('maxY', DG.TYPE.FLOAT, { description: 'Maximum value of the Y axis', nullable: true }),
|
|
68
|
+
DG.Property.js('title', DG.TYPE.STRING, { nullable: true }),
|
|
69
|
+
DG.Property.js('xAxisName', DG.TYPE.STRING, { description: 'Label to show on the X axis. If not specified, corresponding data column name is used', nullable: true }),
|
|
70
|
+
DG.Property.js('yAxisName', DG.TYPE.STRING, { description: 'Label to show on the Y axis. If not specified, corresponding data column name is used', nullable: true }),
|
|
71
|
+
DG.Property.js('logX', DG.TYPE.BOOL, { description: 'Whether the X axis should be logarithmic', defaultValue: false }),
|
|
72
|
+
DG.Property.js('logY', DG.TYPE.BOOL, { description: 'Whether the Y axis should be logarithmic', defaultValue: false }),
|
|
73
|
+
DG.Property.js('allowXZeroes', DG.TYPE.BOOL, { description: 'Whether x zeroes allowed for logarithmic data or not', defaultValue: true }),
|
|
74
|
+
DG.Property.js('showStatistics', DG.TYPE.STRING_LIST, { description: 'Whether specific statistics should be rendered',
|
|
76
75
|
choices: statisticsProperties.map((frp) => frp.name), inputType: 'MultiChoice' }),
|
|
77
76
|
];
|
|
78
77
|
/** Properties that describe {@link IFitSeriesOptions}. Useful for editing, initialization, transformations, etc. */
|
|
79
78
|
export const fitSeriesProperties = [
|
|
80
|
-
Property.js('fitFunction', TYPE.STRING, { category: 'Fitting', choices: ['sigmoid', 'linear'], defaultValue: 'sigmoid' }),
|
|
81
|
-
Property.js('pointColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
82
|
-
Property.js('fitLineColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
83
|
-
Property.js('
|
|
79
|
+
DG.Property.js('fitFunction', DG.TYPE.STRING, { category: 'Fitting', choices: ['sigmoid', 'linear'], defaultValue: 'sigmoid' }),
|
|
80
|
+
DG.Property.js('pointColor', DG.TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
81
|
+
DG.Property.js('fitLineColor', DG.TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
82
|
+
DG.Property.js('outlierColor', DG.TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
83
|
+
DG.Property.js('errorModel', DG.TYPE.STRING, { category: 'Fitting', defaultValue: 'constant',
|
|
84
84
|
choices: ['constant', 'proportional'], nullable: false }),
|
|
85
|
-
Property.js('clickToToggle', TYPE.BOOL, { category: 'Fitting', description: 'Click on a point to mark it as outlier and refit', nullable: true, defaultValue: false }),
|
|
86
|
-
Property.js('showFitLine', TYPE.BOOL, { category: 'Fitting', defaultValue: true }),
|
|
87
|
-
Property.js('showPoints', TYPE.STRING, // rewrite description
|
|
85
|
+
DG.Property.js('clickToToggle', DG.TYPE.BOOL, { category: 'Fitting', description: 'Click on a point to mark it as outlier and refit', nullable: true, defaultValue: false }),
|
|
86
|
+
DG.Property.js('showFitLine', DG.TYPE.BOOL, { category: 'Fitting', defaultValue: true }),
|
|
87
|
+
DG.Property.js('showPoints', DG.TYPE.STRING, // rewrite description
|
|
88
88
|
{ category: 'Fitting', description: 'Whether points/candlesticks/none should be rendered',
|
|
89
89
|
defaultValue: 'points', choices: ['points', 'candlesticks', 'both'] }),
|
|
90
|
-
Property.js('showCurveConfidenceInterval', TYPE.BOOL, { category: 'Fitting', description: 'Whether confidence intervals should be rendered', defaultValue: false,
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
DG.Property.js('showCurveConfidenceInterval', DG.TYPE.BOOL, { category: 'Fitting', description: 'Whether confidence intervals should be rendered', defaultValue: false,
|
|
91
|
+
//@ts-ignore
|
|
92
|
+
friendlyName: 'Confidence interval' }),
|
|
93
|
+
DG.Property.js('markerType', DG.TYPE.STRING, { category: 'Rendering', defaultValue: 'circle',
|
|
93
94
|
choices: ['asterisk', 'circle', 'cross border', 'diamond', 'square', 'star',
|
|
94
95
|
'triangle bottom', 'triangle left', 'triangle right', 'triangle top'], nullable: false }),
|
|
95
|
-
Property.js('lineStyle', TYPE.STRING, { category: 'Rendering', defaultValue: 'solid',
|
|
96
|
+
DG.Property.js('lineStyle', DG.TYPE.STRING, { category: 'Rendering', defaultValue: 'solid',
|
|
96
97
|
choices: ['solid', 'dotted', 'dashed', 'dashdotted'], nullable: false }),
|
|
97
|
-
Property.js('droplines', TYPE.STRING_LIST, { description: 'Whether specific droplines should be rendered',
|
|
98
|
+
DG.Property.js('droplines', DG.TYPE.STRING_LIST, { description: 'Whether specific droplines should be rendered',
|
|
98
99
|
choices: DROPLINES, inputType: 'MultiChoice' }),
|
|
99
100
|
];
|
|
100
101
|
export const FIT_FUNCTION_SIGMOID = 'sigmoid';
|
|
@@ -441,4 +442,4 @@ function objectiveNormalProportional(targetFunc, data, params) {
|
|
|
441
442
|
likelihood += residuesSquares[i] / sigmaSq + Math.log(2 * pi * sigmaSq);
|
|
442
443
|
return { value: -likelihood, const: 0, mult: sigma };
|
|
443
444
|
}
|
|
444
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlCL0IsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsc0JBQXNCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsdUJBQXVCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUc7SUFDOUMsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUE0RGxDLDREQUE0RDtBQUM1RCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNFLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFzQixFQUFFLENB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QUU7UUFDN0MsVUFBVSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBRTFFLE9BQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gJ2RhdGFncm9rLWFwaS9zcmMvZW50aXRpZXMnO1xuaW1wb3J0IHtUWVBFfSBmcm9tICdkYXRhZ3Jvay1hcGkvc3JjL2NvbnN0JztcblxuaW1wb3J0IHtsaW1pdGVkTWVtb3J5QkZHU30gZnJvbSAnLi4vLi4vbGJmZ3MvbGJmZ3MnO1xuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuXG5cbnR5cGUgT3B0aW1pemFibGUgPSB7XG4gIGdldFZhbHVlOiAocGFyYW1ldGVyczogbnVtYmVyW10pID0+IG51bWJlcixcbiAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiBudW1iZXJbXSxcbn1cblxudHlwZSBMaWtlbGlob29kID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBjb25zdDogbnVtYmVyLFxuICBtdWx0OiBudW1iZXJcbn07XG5cbnR5cGUgT2JqZWN0aXZlRnVuY3Rpb24gPSAodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSkgPT4gTGlrZWxpaG9vZDtcblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxufTtcblxuZXhwb3J0IHR5cGUgRml0UGFyYW1Cb3VuZHMgPSB7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufTtcblxuLyoqIEZpdCBmdW5jdGlvbiBkZXNjcmlwdGlvbi4gQXBwbGllcyB0byBjdXN0b20gdXNlciBmaXQgZnVuY3Rpb25zLlxuICogUmVxdWlyZXMgSlMgYXJyb3cgZnVuY3Rpb25zIGZvciB0aGUgZml0IGZ1bmN0aW9ucyBhbmQgaW5pdGlhbCBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb246IHN0cmluZztcbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnM6IHN0cmluZztcbiAgcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBGaXRDdXJ2ZSA9IHtcbiAgZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgcGFyYW1ldGVyczogbnVtYmVyW107XG59O1xuXG5leHBvcnQgdHlwZSBGaXRDb25maWRlbmNlSW50ZXJ2YWxzID0ge1xuICBjb25maWRlbmNlVG9wOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIGNvbmZpZGVuY2VCb3R0b206ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFN0YXRpc3RpY3MgPSB7XG4gIHJTcXVhcmVkPzogbnVtYmVyLFxuICBhdWM/OiBudW1iZXIsXG4gIGludGVyY2VwdFg6IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZOiBudW1iZXIsIC8vIGZpdHRlZEN1cnZlW3BhcmFtZXRlcnNbMl1dXG4gIHNsb3BlOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMV1cbiAgdG9wOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbM11cbn07XG5cbmV4cG9ydCB0eXBlIEZpdEludmVydGVkRnVuY3Rpb25zID0ge1xuICBpbnZlcnRlZDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZFRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZEJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxufTtcblxuLyoqXG4gKiAgRGF0YWdyb2sgY3VydmUgZml0dGluZ1xuICpcbiAqIC0gRml0dGluZzogY29tcHV0aW5nIHBhcmFtZXRlcnMgb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0byBiZXN0IGZpdCB0aGUgZGF0YVxuICogICAtIFVzZXMgQkZHUyBvcHRpbWl6YXRpb24gYWxnb3JpdGhtIChtdWx0aS10aHJlYWRpbmcgZm9yIHBlcmZvcm1hbmNlKS5cbiAqICAgICBGb3IgZG9zZS1yZXNwb25zZSBjdXJ2ZXMsIHdlIGFyZSB0eXBpY2FsbHkgZml0dGluZyB0aGUgc2lnbW9pZCBmdW5jdGlvblxuICogICAtIEFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVnaXN0ZXIgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgICAgLSBBdXRvbWF0aWMgZml0IGZ1bmN0aW9uIGRldGVybWluYXRpb25cbiAqICAgICAtIENhY2hpbmcgb2YgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgIC0gQWJpbGl0eSB0byBnZXQgZml0dGluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgKHItc3F1YXJlZCwgY2xhc3NpZmljYXRpb24sIGV0YylcbiAqIC0gRGVlcCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBEYXRhZ3JvayBncmlkXG4gKiAgIC0gRWl0aGVyIGZpdHRpbmcgb24gdGhlIGZseSwgb3IgdXNpbmcgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uICsgcGFyYW1ldGVyc1xuICogICAtIE11bHRpcGxlIHNlcmllcyBpbiBvbmUgY2VsbFxuICogICAtIENhbmRsZXN0aWNrcywgY29uZmlkZW5jZSBpbnRlcnZhbHMsIGFuZCBkcm9wbGluZXMgZHJhd2luZ1xuICogICAtIEFiaWxpdHkgdG8gZGVmaW5lIGNoYXJ0LCBtYXJrZXIsIG9yIGZpdHRpbmcgb3B0aW9ucyAoc3VjaCBhcyBmaXQgZnVuY3Rpb24gb3IgbWFya2VyIGNvbG9yKVxuICogICAgIG9uIHRoZSBjb2x1bW4gbGV2ZWwsIHdpdGggdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgaXQgb24gYSBncmlkIGNlbGwgb3IgcG9pbnQgbGV2ZWxcbiAqICAgLSBDbGlja2luZyBhIHBvaW50IGluIGEgY2hhcnQgd2l0aGluIGEgZ3JpZCBtYWtlcyBpdCBhbiBvdXRsaWVyIC0+IGN1cnZlIGlzIHJlLWZpdHRlZCBvbiB0aGUgZmx5XG4gKiAgIC0gQWJpbGl0eSB0byBzcGVjaWZ5IGEgY2hhcnQgYXMgXCJyZWZlcmVuY2VcIiBzbyB0aGF0IGl0IGlzIHNob3duIG9uIGV2ZXJ5IG90aGVyIGNoYXJ0IGZvciBjb21wYXJpc29uXG4gKiAtIEFiaWxpdHkgdG8gb3ZlcmxheSBjdXJ2ZXMgZnJvbSBtdWx0aXBsZSBncmlkIGNlbGxzIChzcGVjaWFsIHZpZXdlcilcbiAqIC0gV29yayB3aXRoIHNlcmllcyBzdG9yZWQgaW4gbXVsdGlwbGUgZm9ybWF0cyAoYmluYXJ5IGZvciBwZXJmb3JtYW5jZSwganNvbiBmb3IgZmxleGliaWxpdHksIGV0YylcbiovXG5cbmV4cG9ydCBjb25zdCBGSVRfU0VNX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBGSVRfQ0VMTF9UWVBFID0gJ2ZpdCc7XG5leHBvcnQgY29uc3QgVEFHX0ZJVCA9ICcuZml0JztcblxuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfU1RST0tFX0NPTE9SID0gJ3JnYmEoMjU1LDE5MSw2MywwLjQpJztcbmV4cG9ydCBjb25zdCBDT05GSURFTkNFX0lOVEVSVkFMX0ZJTExfQ09MT1IgPSAncmdiYSgyNTUsMjM4LDIwNCwwLjMpJztcblxuZXhwb3J0IGNvbnN0IENVUlZFX0NPTkZJREVOQ0VfSU5URVJWQUxfQk9VTkRTID0ge1xuICBUT1A6ICd0b3AnLFxuICBCT1RUT006ICdib3R0b20nLFxufTtcblxuZXhwb3J0IGNvbnN0IERST1BMSU5FUyA9IFsnSUM1MCddO1xuXG5leHBvcnQgdHlwZSBGaXRNYXJrZXJUeXBlID0gJ2FzdGVyaXNrJyB8ICdjaXJjbGUnIHwgJ2Nyb3NzIGJvcmRlcicgfCAnZGlhbW9uZCcgfCAnc3F1YXJlJyB8ICdzdGFyJyB8ICd0cmlhbmdsZSBib3R0b20nIHxcbiAgJ3RyaWFuZ2xlIGxlZnQnIHwgJ3RyaWFuZ2xlIHJpZ2h0JyB8ICd0cmlhbmdsZSB0b3AnO1xuXG5leHBvcnQgdHlwZSBGaXRMaW5lU3R5bGUgPSAnc29saWQnIHwgJ2RvdHRlZCcgfCAnZGFzaGVkJyB8ICdkYXNoZG90dGVkJztcblxuZXhwb3J0IHR5cGUgRml0RXJyb3JNb2RlbFR5cGUgPSAnY29uc3RhbnQnIHwgJ3Byb3BvcnRpb25hbCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG1hcmtlcj86IEZpdE1hcmtlclR5cGU7ICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBzaG93U3RhdGlzdGljcz86IHN0cmluZ1tdOyAvLyBkZWZpbmVzIHRoZSBzdGF0aXN0aWNzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3RcbiAgbGFiZWxPcHRpb25zPzogSUZpdENoYXJ0TGFiZWxPcHRpb25zW107IC8vIGNvbnRyb2xzIHRoZSBwbG90IGxhYmVsc1xufVxuXG4vKiogRGF0YSBmb3IgdGhlIGZpdCBjaGFydC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0RGF0YSB7XG4gIGNoYXJ0T3B0aW9ucz86IElGaXRDaGFydE9wdGlvbnM7XG4gIHNlcmllc09wdGlvbnM/OiBJRml0U2VyaWVzT3B0aW9uczsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzPzogSUZpdFNlcmllc1tdO1xufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBJRml0Q2hhcnREYXRhfSBpbnRlcmZhY2UgKi9cbmV4cG9ydCBjbGFzcyBGaXRDaGFydERhdGEgaW1wbGVtZW50cyBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zOiBJRml0Q2hhcnRPcHRpb25zID0ge307XG4gIHNlcmllc09wdGlvbnM6IElGaXRTZXJpZXNPcHRpb25zID0ge307ICAvLyBEZWZhdWx0IHNlcmllcyBvcHRpb25zLiBJbmRpdmlkdWFsIHNlcmllcyBjYW4gb3ZlcnJpZGUgaXQuXG4gIHNlcmllczogSUZpdFNlcmllc1tdID0gW107XG59XG5cbi8qKiBTZXJpZXMgb3B0aW9ucyBjYW4gYmUgZWl0aGVyIGFwcGxpZWQgZ2xvYmFsbHkgb24gYSBjb2x1bW4gbGV2ZWwsIG9yIHBhcnRpYWxseSBvdmVycmlkZGVuIGluIHBhcnRpY3VsYXIgc2VyaWVzICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXNPcHRpb25zIHtcbiAgbmFtZT86IHN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9scyB0aGUgc2VyaWVzIG5hbWVcbiAgZml0RnVuY3Rpb24/OiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbjsgLy8gY29udHJvbHMgdGhlIHNlcmllcyBmaXQgZnVuY3Rpb25cbiAgcGFyYW1ldGVycz86IG51bWJlcltdOyAgICAgICAgICAgICAgICAvLyBjb250cm9scyB0aGUgc2VyaWVzIHBhcmFtZXRlcnMsIGF1dG8tZml0dGluZyB3aGVuIG5vdCBkZWZpbmVkXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW107ICAgLy8gZGVmaW5lcyB0aGUgYWNjZXB0YWJsZSByYW5nZSBvZiBlYWNoIHBhcmFtZXRlciwgd2hpY2ggaXMgdGFrZW4gaW50byBhY2NvdW50IGR1cmluZyB0aGUgZml0dGluZy4gU2VlIGFsc28gYHBhcmFtZXRlcnNgLlxuICBtYXJrZXJUeXBlPzogRml0TWFya2VyVHlwZTsgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBtYXJrZXIgdHlwZVxuICBsaW5lU3R5bGU/OiBGaXRMaW5lU3R5bGU7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBsaW5lIHN0eWxlXG4gIHBvaW50Q29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY29sb3JcbiAgc2hvd0ZpdExpbmU/OiBib29sZWFuOyAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZml0IGxpbmUgb3Igbm90XG4gIHNob3dQb2ludHM/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZGF0YSBkaXNwbGF5IG1vZGVcbiAgc2hvd0N1cnZlQ29uZmlkZW5jZUludGVydmFsPzogYm9vbGVhbjsgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9yIG5vdFxuICBlcnJvck1vZGVsPzogRml0RXJyb3JNb2RlbFR5cGU7ICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBlcnJvciBtb2RlbFxuICBjbGlja1RvVG9nZ2xlPzogYm9vbGVhbjsgICAgLy8gaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIHBvaW50IHRvZ2dsZXMgaXRzIG91dGxpZXIgc3RhdHVzIGFuZCBjYXVzZXMgY3VydmUgcmVmaXR0aW5nXG4gIGxhYmVscz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufTsgLy8gY29udHJvbGxlZCBieSBJRml0Q2hhcnREYXRhIGxhYmVsT3B0aW9ucywgc2hvd3MgbGFiZWxzXG4gIGRyb3BsaW5lcz86IHN0cmluZ1tdOyAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZHJvcGxpbmVzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3QgKElDNTApXG59XG4vLyBUT0RPOiBzaG93IGxhYmVscyBpbiBwcm9wZXJ0eSBwYW5lbCBpZiBwcmVzZW50LCBjb2xvciBieSBkZWZhdWx0IGZyb20gc2VyaWVzXG5cblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgRml0U3RhdGlzdGljc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpc3RpY3NQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICBQcm9wZXJ0eS5qcygnclNxdWFyZWQnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYXVjJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFknLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnaW50ZXJjZXB0WCcsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzbG9wZScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCd0b3AnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYm90dG9tJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbl07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIElGaXRDaGFydE9wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRDaGFydERhdGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICAvLyBTdHlsZSBhbmQgem9vbVxuICBQcm9wZXJ0eS5qcygnbWluWCcsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFggYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdtaW5ZJywgVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWluaW11bSB2YWx1ZSBvZiB0aGUgWSBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ21heFgnLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbWF4WScsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01heGltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCd0aXRsZScsIFRZUEUuU1RSSU5HLCB7bnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3hBeGlzTmFtZScsIFRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFggYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygneUF4aXNOYW1lJywgVFlQRS5TVFJJTkcsIHtkZXNjcmlwdGlvbjpcbiAgICAnTGFiZWwgdG8gc2hvdyBvbiB0aGUgWSBheGlzLiBJZiBub3Qgc3BlY2lmaWVkLCBjb3JyZXNwb25kaW5nIGRhdGEgY29sdW1uIG5hbWUgaXMgdXNlZCcsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdsb2dYJywgVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRoZSBYIGF4aXMgc2hvdWxkIGJlIGxvZ2FyaXRobWljJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnbG9nWScsIFRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWSBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXG4gIFByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIFRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBbJ3NpZ21vaWQnLCAnbGluZWFyJ10sIGRlZmF1bHRWYWx1ZTogJ3NpZ21vaWQnfSksXG4gIFByb3BlcnR5LmpzKCdwb2ludENvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnZml0TGluZUNvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnZXJyb3JNb2RlbCcsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiAnY29uc3RhbnQnLFxuICAgIGNob2ljZXM6IFsnY29uc3RhbnQnLCAncHJvcG9ydGlvbmFsJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIFRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBUWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBUWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBUWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgY2FwdGlvbjogJ0NvbmZpZGVuY2UgaW50ZXJ2YWwnfSksXG4gIFByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBUWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBsaW5lYXIocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIHJldHVybiBbQSwgQl07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaWdtb2lkKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgZGF0YUJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHgsIHkpO1xuICAgIGNvbnN0IG1lZFkgPSAoZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcCkgLyAyICsgZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG1heFlJbnRlcnZhbCA9IGRhdGFCb3VuZHMuYm90dG9tIC0gZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG5lYXJlc3RYSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEludGVydmFsID0gTWF0aC5hYnMoeVtpXSAtIG1lZFkpO1xuICAgICAgaWYgKGN1cnJlbnRJbnRlcnZhbCA8IG1heFlJbnRlcnZhbCkge1xuICAgICAgICBtYXhZSW50ZXJ2YWwgPSBjdXJyZW50SW50ZXJ2YWw7XG4gICAgICAgIG5lYXJlc3RYSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4QXRNZWRZID0geFtuZWFyZXN0WEluZGV4XTtcbiAgICBjb25zdCBzbG9wZSA9IHlbMF0gPiB5W3kubGVuZ3RoIC0gMV0gPyAxIDogLTE7XG5cbiAgICAvLyBwYXJhbXMgYXJlOiBbbWF4LCB0YW4sIElDNTAsIG1pbl1cbiAgICByZXR1cm4gW2RhdGFCb3VuZHMuYm90dG9tLCBzbG9wZSwgeEF0TWVkWSwgZGF0YUJvdW5kcy50b3BdO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdXNlciBKUyBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBKc0Z1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHlGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZ2V0SW5pdFBhcmFtc0Z1bmM6ICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IG51bWJlcltdLCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLy8gT2JqZWN0IHdpdGggZml0IGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGZpdEZ1bmN0aW9uczoge1tpbmRleDogc3RyaW5nXTogRml0RnVuY3Rpb259ID0ge1xuICAnbGluZWFyJzogbmV3IExpbmVhckZ1bmN0aW9uKCksXG4gICdzaWdtb2lkJzogbmV3IFNpZ21vaWRGdW5jdGlvbigpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJRml0T3B0aW9ucyB7XG4gIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlO1xuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlcjtcbiAgc3RhdGlzdGljczogYm9vbGVhbjtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6IE9iamVjdGl2ZUZ1bmN0aW9uIHtcbiAgbGV0IG9mOiBPYmplY3RpdmVGdW5jdGlvbjtcblxuICBzd2l0Y2ggKGVycm9yTW9kZWwpIHtcbiAgY2FzZSBGaXRFcnJvck1vZGVsLkNPTlNUQU5UOlxuICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQ7XG4gICAgYnJlYWs7XG4gIGNhc2UgRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUw6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWw7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvZjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3B0aW1pemFibGUoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBmaXhlZDogbnVtYmVyW10pOiBPcHRpbWl6YWJsZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgcmV0dXJuIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMpLnZhbHVlO1xuICAgIH0sXG4gICAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGdyYWRpZW50W2ldID0gZml4ZWQuaW5jbHVkZXMoaSkgPyAwIDogZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZiwgY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycywgaSk7XG5cbiAgICAgIHJldHVybiBncmFkaWVudDtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyKSxcbiAgICAgIChnZXRJbml0UGFyYW1zRnVuYyBhcyAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBudW1iZXJbXSksIHBhcmFtTmFtZXMpO1xuICAgIGZpdEZ1bmN0aW9uc1tuYW1lXSA9IGZpdEZ1bmM7XG4gIH1cblxuICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXREYXRhKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBmaXRGdW5jdGlvbjogRml0RnVuY3Rpb24sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlLFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdKTogRml0Q3VydmUge1xuICBjb25zdCBjdXJ2ZUZ1bmN0aW9uID0gZml0RnVuY3Rpb24ueTtcbiAgY29uc3QgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsKTtcbiAgY29uc3QgZml4ZWQ6IG51bWJlcltdID0gW107XG4gIGxldCBvdmVyTGltaXRzID0gdHJ1ZTtcblxuICB3aGlsZSAob3ZlckxpbWl0cykge1xuICAgIGNvbnN0IG9wdGltaXphYmxlID0gY3JlYXRlT3B0aW1pemFibGUoZGF0YSwgY3VydmVGdW5jdGlvbiwgb2YsIGZpeGVkKTtcbiAgICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG5cbiAgICBvdmVyTGltaXRzID0gZmFsc2U7XG4gICAgaWYgKCFwYXJhbWV0ZXJCb3VuZHMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldPy5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJhbVZhbHVlc1tpXSA+IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghKSB7XG4gICAgICAgIG92ZXJMaW1pdHMgPSB0cnVlO1xuICAgICAgICBmaXhlZC5wdXNoKGkpO1xuICAgICAgICBwYXJhbVZhbHVlc1tpXSA9IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldIDwgcGFyYW1ldGVyQm91bmRzW2ldLm1pbiEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1pbiE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZml0dGVkQ3VydmU6IGZpdHRlZEN1cnZlLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtVmFsdWVzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogbnVtYmVyW10pOlxuICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiAoeDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuXG4gIGNvbnN0IGVycm9yID0gZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUwgP1xuICAgIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5tdWx0IDpcbiAgICBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbVZhbHVlcykuY29uc3Q7XG5cbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgKyBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgY29uc3QgYm90dG9tID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgcmV0dXJuIHtjb25maWRlbmNlVG9wOiB0b3AsIGNvbmZpZGVuY2VCb3R0b206IGJvdHRvbX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aXN0aWNzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICByU3F1YXJlZDogc3RhdGlzdGljcyA/IGdldERldENvZWZmKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBhdWM6IHN0YXRpc3RpY3MgPyBnZXRBdWMoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdFg6IHBhcmFtVmFsdWVzWzJdLFxuICAgIGludGVyY2VwdFk6IGZpdHRlZEN1cnZlKHBhcmFtVmFsdWVzWzJdKSxcbiAgICBzbG9wZTogcGFyYW1WYWx1ZXNbMV0sXG4gICAgdG9wOiBwYXJhbVZhbHVlc1swXSxcbiAgICBib3R0b206IHBhcmFtVmFsdWVzWzNdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJ0ZWRGdW5jdGlvbnMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdEludmVydGVkRnVuY3Rpb25zIHwgbnVsbCB7XG4gIGNvbnN0IHN0dWRlbnRRID0galN0YXQuc3R1ZGVudHQuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwgLyAyLCBkYXRhLngubGVuZ3RoIC0gcGFyYW1WYWx1ZXMubGVuZ3RoKTtcblxuICBsZXQgaW52OiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgbGV0IGludkJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIGlmIChzdGF0aXN0aWNzKSB7XG4gICAgaW52ID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgLy9zaG91bGQgY2hlY2sgaWYgbW9yZSB0aGFuIGJvdHRvbSBhbmQgbGVzcyB0aGFuIHRvcFxuICAgICAgcmV0dXJuIHBhcmFtVmFsdWVzWzJdIC8gTWF0aC5wb3coKHBhcmFtVmFsdWVzWzBdIC0geSkgLyAoeSAtIHBhcmFtVmFsdWVzWzNdKSwgMSAvIHBhcmFtVmFsdWVzWzFdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3IgPSBnZXRJbnZFcnJvcihpbnYsIGRhdGEpO1xuXG4gICAgaW52VG9wID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgKyBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICBpbnZCb3R0b20gPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiB2YWx1ZSAtIHN0dWRlbnRRICogZXJyb3IgLyBNYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnZlcnRlZDogaW52LFxuICAgICAgaW52ZXJ0ZWRUb3A6IGludlRvcCxcbiAgICAgIGludmVydGVkQm90dG9tOiBpbnZCb3R0b20sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbW9pZChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBBID0gcGFyYW1zWzBdO1xuICBjb25zdCBCID0gcGFyYW1zWzFdO1xuICBjb25zdCBDID0gcGFyYW1zWzJdO1xuICBjb25zdCBEID0gcGFyYW1zWzNdO1xuICByZXR1cm4gKEQgKyAoQSAtIEQpIC8gKDEgKyBNYXRoLnBvdygxMCwgKHggLSBDKSAqIEIpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXIocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogeCArIEI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdWMoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgYXVjID0gMDtcblxuICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5kYXRhLngpO1xuICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5kYXRhLngpO1xuICBjb25zdCBpbnRlZ3JhdGlvblN0ZXAgPSAobWF4IC0gbWluKSAvIDEwMDA7XG5cbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcblxuICBjb25zdCB5TWVhbiA9IGpTdGF0Lm1lYW4oZGF0YS55KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIHNzUmVzICs9IE1hdGgucG93KGRhdGEueVtpXSAtIGZpdHRlZEN1cnZlKGRhdGEueFtpXSksIDIpO1xuICAgIHNzVG90ICs9IE1hdGgucG93KGRhdGEueVtpXSAtIHlNZWFuLCAyKTtcbiAgfVxuXG4gIHJldHVybiAxIC0gc3NSZXMgLyBzc1RvdDtcbn1cblxuZnVuY3Rpb24gZ2V0SW52RXJyb3IodGFyZ2V0RnVuYzogKHk6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdGl2ZURlcml2YXRpdmUob2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdLCBzZWxlY3RlZFBhcmFtOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzdGVwID0gKHBhcmFtc1tzZWxlY3RlZFBhcmFtXSAqIDAuMDAwMSkgPT09IDAgPyAwLjAwMSA6IChwYXJhbXNbc2VsZWN0ZWRQYXJhbV0gKiAwLjAwMDEpO1xuICBjb25zdCBwYXJhbXNUb3A6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHBhcmFtc0JvdHRvbTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gc2VsZWN0ZWRQYXJhbSkge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldICsgc3RlcCk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0gLSBzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRydlRvcCA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc1RvcCkudmFsdWU7XG4gIGNvbnN0IGRydkJvdHRvbSA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc0JvdHRvbSkudmFsdWU7XG5cbiAgcmV0dXJuIChkcnZUb3AgLSBkcnZCb3R0b20pIC8gKDIgKiBzdGVwKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSk6IExpa2VsaWhvb2Qge1xuICAvL2Fzc3VyZSBvYnNlcnZlZCBhbmQgYXJncyBzYW1lIGxlbmd0aFxuICBjb25zdCBwaSA9IE1hdGguUEk7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcbiAgbGV0IGxpa2VsaWhvb2QgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS55W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKHBhcmFtcywgZGF0YS54W2ldKTtcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuXG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyBzaWdtYVNxICsgTWF0aC5sb2coMiAqIHBpICogc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHt2YWx1ZTogLWxpa2VsaWhvb2QsIGNvbnN0OiBzaWdtYSwgbXVsdDogMH07XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbCh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IDAsIG11bHQ6IHNpZ21hfTtcbn1cbiJdfQ==
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFpQi9CLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixRQUFRLEVBQUUsVUFBVTtJQUNwQixZQUFZLEVBQUUsY0FBYztDQUM3QixDQUFDO0FBMENGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CRTtBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLHNCQUFzQixDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLHVCQUF1QixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHO0lBQzlDLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBK0RsQyw0REFBNEQ7QUFDNUQsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFDRSxpQkFBWSxHQUFxQixFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBc0IsRUFBRSxDQUFDLENBQUUsNkRBQTZEO1FBQ3JHLFdBQU0sR0FBaUIsRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0FBQTtBQXNCRCwrRUFBK0U7QUFHL0UsZ0hBQWdIO0FB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QyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtsaW1pdGVkTWVtb3J5QkZHU30gZnJvbSAnLi4vLi4vbGJmZ3MvbGJmZ3MnO1xuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuXG5cbnR5cGUgT3B0aW1pemFibGUgPSB7XG4gIGdldFZhbHVlOiAocGFyYW1ldGVyczogbnVtYmVyW10pID0+IG51bWJlcixcbiAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiBudW1iZXJbXSxcbn1cblxudHlwZSBMaWtlbGlob29kID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBjb25zdDogbnVtYmVyLFxuICBtdWx0OiBudW1iZXJcbn07XG5cbnR5cGUgT2JqZWN0aXZlRnVuY3Rpb24gPSAodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSkgPT4gTGlrZWxpaG9vZDtcblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxufTtcblxuZXhwb3J0IHR5cGUgRml0UGFyYW1Cb3VuZHMgPSB7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufTtcblxuLyoqIEZpdCBmdW5jdGlvbiBkZXNjcmlwdGlvbi4gQXBwbGllcyB0byBjdXN0b20gdXNlciBmaXQgZnVuY3Rpb25zLlxuICogUmVxdWlyZXMgSlMgYXJyb3cgZnVuY3Rpb25zIGZvciB0aGUgZml0IGZ1bmN0aW9ucyBhbmQgaW5pdGlhbCBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb246IHN0cmluZztcbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnM6IHN0cmluZztcbiAgcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBGaXRDdXJ2ZSA9IHtcbiAgZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgcGFyYW1ldGVyczogbnVtYmVyW107XG59O1xuXG5leHBvcnQgdHlwZSBGaXRDb25maWRlbmNlSW50ZXJ2YWxzID0ge1xuICBjb25maWRlbmNlVG9wOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIGNvbmZpZGVuY2VCb3R0b206ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFN0YXRpc3RpY3MgPSB7XG4gIHJTcXVhcmVkPzogbnVtYmVyLFxuICBhdWM/OiBudW1iZXIsXG4gIGludGVyY2VwdFg6IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZOiBudW1iZXIsIC8vIGZpdHRlZEN1cnZlW3BhcmFtZXRlcnNbMl1dXG4gIHNsb3BlOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMV1cbiAgdG9wOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbM11cbn07XG5cbmV4cG9ydCB0eXBlIEZpdEludmVydGVkRnVuY3Rpb25zID0ge1xuICBpbnZlcnRlZDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZFRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZEJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxufTtcblxuLyoqXG4gKiAgRGF0YWdyb2sgY3VydmUgZml0dGluZ1xuICpcbiAqIC0gRml0dGluZzogY29tcHV0aW5nIHBhcmFtZXRlcnMgb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0byBiZXN0IGZpdCB0aGUgZGF0YVxuICogICAtIFVzZXMgQkZHUyBvcHRpbWl6YXRpb24gYWxnb3JpdGhtIChtdWx0aS10aHJlYWRpbmcgZm9yIHBlcmZvcm1hbmNlKS5cbiAqICAgICBGb3IgZG9zZS1yZXNwb25zZSBjdXJ2ZXMsIHdlIGFyZSB0eXBpY2FsbHkgZml0dGluZyB0aGUgc2lnbW9pZCBmdW5jdGlvblxuICogICAtIEFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVnaXN0ZXIgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgICAgLSBBdXRvbWF0aWMgZml0IGZ1bmN0aW9uIGRldGVybWluYXRpb25cbiAqICAgICAtIENhY2hpbmcgb2YgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgIC0gQWJpbGl0eSB0byBnZXQgZml0dGluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgKHItc3F1YXJlZCwgY2xhc3NpZmljYXRpb24sIGV0YylcbiAqIC0gRGVlcCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBEYXRhZ3JvayBncmlkXG4gKiAgIC0gRWl0aGVyIGZpdHRpbmcgb24gdGhlIGZseSwgb3IgdXNpbmcgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uICsgcGFyYW1ldGVyc1xuICogICAtIE11bHRpcGxlIHNlcmllcyBpbiBvbmUgY2VsbFxuICogICAtIENhbmRsZXN0aWNrcywgY29uZmlkZW5jZSBpbnRlcnZhbHMsIGFuZCBkcm9wbGluZXMgZHJhd2luZ1xuICogICAtIEFiaWxpdHkgdG8gZGVmaW5lIGNoYXJ0LCBtYXJrZXIsIG9yIGZpdHRpbmcgb3B0aW9ucyAoc3VjaCBhcyBmaXQgZnVuY3Rpb24gb3IgbWFya2VyIGNvbG9yKVxuICogICAgIG9uIHRoZSBjb2x1bW4gbGV2ZWwsIHdpdGggdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgaXQgb24gYSBncmlkIGNlbGwgb3IgcG9pbnQgbGV2ZWxcbiAqICAgLSBDbGlja2luZyBhIHBvaW50IGluIGEgY2hhcnQgd2l0aGluIGEgZ3JpZCBtYWtlcyBpdCBhbiBvdXRsaWVyIC0+IGN1cnZlIGlzIHJlLWZpdHRlZCBvbiB0aGUgZmx5XG4gKiAgIC0gQWJpbGl0eSB0byBzcGVjaWZ5IGEgY2hhcnQgYXMgXCJyZWZlcmVuY2VcIiBzbyB0aGF0IGl0IGlzIHNob3duIG9uIGV2ZXJ5IG90aGVyIGNoYXJ0IGZvciBjb21wYXJpc29uXG4gKiAtIEFiaWxpdHkgdG8gb3ZlcmxheSBjdXJ2ZXMgZnJvbSBtdWx0aXBsZSBncmlkIGNlbGxzIChzcGVjaWFsIHZpZXdlcilcbiAqIC0gV29yayB3aXRoIHNlcmllcyBzdG9yZWQgaW4gbXVsdGlwbGUgZm9ybWF0cyAoYmluYXJ5IGZvciBwZXJmb3JtYW5jZSwganNvbiBmb3IgZmxleGliaWxpdHksIGV0YylcbiovXG5cbmV4cG9ydCBjb25zdCBGSVRfU0VNX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBGSVRfQ0VMTF9UWVBFID0gJ2ZpdCc7XG5leHBvcnQgY29uc3QgVEFHX0ZJVCA9ICcuZml0JztcblxuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfU1RST0tFX0NPTE9SID0gJ3JnYmEoMjU1LDE5MSw2MywwLjQpJztcbmV4cG9ydCBjb25zdCBDT05GSURFTkNFX0lOVEVSVkFMX0ZJTExfQ09MT1IgPSAncmdiYSgyNTUsMjM4LDIwNCwwLjMpJztcblxuZXhwb3J0IGNvbnN0IENVUlZFX0NPTkZJREVOQ0VfSU5URVJWQUxfQk9VTkRTID0ge1xuICBUT1A6ICd0b3AnLFxuICBCT1RUT006ICdib3R0b20nLFxufTtcblxuZXhwb3J0IGNvbnN0IERST1BMSU5FUyA9IFsnSUM1MCddO1xuXG5leHBvcnQgdHlwZSBGaXRNYXJrZXJUeXBlID0gJ2FzdGVyaXNrJyB8ICdjaXJjbGUnIHwgJ2Nyb3NzIGJvcmRlcicgfCAnZGlhbW9uZCcgfCAnc3F1YXJlJyB8ICdzdGFyJyB8ICd0cmlhbmdsZSBib3R0b20nIHxcbiAgJ3RyaWFuZ2xlIGxlZnQnIHwgJ3RyaWFuZ2xlIHJpZ2h0JyB8ICd0cmlhbmdsZSB0b3AnO1xuXG5leHBvcnQgdHlwZSBGaXRMaW5lU3R5bGUgPSAnc29saWQnIHwgJ2RvdHRlZCcgfCAnZGFzaGVkJyB8ICdkYXNoZG90dGVkJztcblxuZXhwb3J0IHR5cGUgRml0RXJyb3JNb2RlbFR5cGUgPSAnY29uc3RhbnQnIHwgJ3Byb3BvcnRpb25hbCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAvLyBvdmVycmlkZXMgdGhlIG91dGxpZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIHNpemU/OiBudW1iZXI7ICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgbWFya2VyIHNpemVcbiAgc3RkZXY/OiBudW1iZXI7ICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgcmVuZGVycyBhbiBlcnJvciBiYXIgY2FuZGxlc3RpY2tcbiAgLy8gbWluWT86IG51bWJlcjsgICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgdGhlIG1hcmtlciByZW5kZXJzIGFzIGEgY2FuZGxlc3RpY2sgd2l0aCB3aGlza2VycyBbbWluWSwgbWF4WV1cbiAgLy8gbWF4WT86IG51bWJlcjsgICAgICAgICAgIC8vIHdoZW4gZGVmaW5lZCwgdGhlIG1hcmtlciByZW5kZXJzIGFzIGEgY2FuZGxlc3RpY2sgd2l0aCB3aGlza2VycyBbbWluWSwgbWF4WV1cbn1cblxuLyoqIEEgc2VyaWVzIGNvbnNpc3RzIG9mIHBvaW50cywgaGFzIGEgbmFtZSwgYW5kIG9wdGlvbnMuXG4gKiBJZiBkZWZpbmVkLCBzZXJpZXNPcHRpb25zIGFyZSBtZXJnZWQgd2l0aCB7QGxpbmsgSUZpdENoYXJ0RGF0YS5zZXJpZXNPcHRpb25zfSAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0U2VyaWVzIGV4dGVuZHMgSUZpdFNlcmllc09wdGlvbnMge1xuICBwb2ludHM6IElGaXRQb2ludFtdO1xufVxuXG4vKiogQ2hhcnQgbGFiZWxzIG9wdGlvbnMuIENvbnRyb2xzIHRoZSBjaGFydCBsYWJlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydExhYmVsT3B0aW9ucyB7XG4gIHZpc2libGU6IGJvb2xlYW47ICAgICAgICAgLy8gaWYgdHJ1ZSwgcmVuZGVycyB0aGUgbGFiZWwgb24gdGhlIHBsb3RcbiAgY29sb3I6IHN0cmluZzsgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBsYWJlbCBjb2xvclxuICBuYW1lOiBzdHJpbmc7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIG5hbWVcbn1cblxuLyoqIENoYXJ0IG9wdGlvbnMuIEZvciBmaXR0ZWQgY3VydmVzLCB0aGlzIG9iamVjdCBpcyBzdG9yZWQgaW4gdGhlIGdyaWQgY29sdW1uIHRhZ3MgYW5kIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnRPcHRpb25zIHtcbiAgbWluWD86IG51bWJlcjtcbiAgbWluWT86IG51bWJlcjtcbiAgbWF4WD86IG51bWJlcjtcbiAgbWF4WT86IG51bWJlcjtcblxuICB0aXRsZT86IHN0cmluZzsgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBwbG90IHRpdGxlLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG4gIHhBeGlzTmFtZT86IHN0cmluZzsgICAgICAgIC8vIGRlZmluZXMgdGhlIHggYXhpcyBuYW1lLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG4gIHlBeGlzTmFtZT86IHN0cmluZzsgICAgICAgIC8vIGRlZmluZXMgdGhlIFkgYXhpcyBuYW1lLiBJZiB0aGUgcGxvdCBzaXplIGlzIGVub3VnaCwgd2lsbCByZW5kZXIgaXQuXG5cbiAgbG9nWD86IGJvb2xlYW47ICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRoZSB4IGRhdGEgc2hvdWxkIGJlIGxvZ2FyaXRobWljIG9yIG5vdFxuICBsb2dZPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHkgZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG5cbiAgYWxsb3dYWmVyb2VzPzogYm9vbGVhbjsgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHggemVyb2VzIGFsbG93ZWQgZm9yIGxvZ2FyaXRobWljIGRhdGEgb3Igbm90XG5cbiAgc2hvd1N0YXRpc3RpY3M/OiBzdHJpbmdbXTsgLy8gZGVmaW5lcyB0aGUgc3RhdGlzdGljcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90XG4gIGxhYmVsT3B0aW9ucz86IElGaXRDaGFydExhYmVsT3B0aW9uc1tdOyAvLyBjb250cm9scyB0aGUgcGxvdCBsYWJlbHNcbn1cblxuLyoqIERhdGEgZm9yIHRoZSBmaXQgY2hhcnQuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM/OiBJRml0Q2hhcnRPcHRpb25zO1xuICBzZXJpZXNPcHRpb25zPzogSUZpdFNlcmllc09wdGlvbnM7ICAvLyBEZWZhdWx0IHNlcmllcyBvcHRpb25zLiBJbmRpdmlkdWFsIHNlcmllcyBjYW4gb3ZlcnJpZGUgaXQuXG4gIHNlcmllcz86IElGaXRTZXJpZXNbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gaW50ZXJmYWNlICovXG5leHBvcnQgY2xhc3MgRml0Q2hhcnREYXRhIGltcGxlbWVudHMgSUZpdENoYXJ0RGF0YSB7XG4gIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyA9IHt9O1xuICBzZXJpZXNPcHRpb25zOiBJRml0U2VyaWVzT3B0aW9ucyA9IHt9OyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM6IElGaXRTZXJpZXNbXSA9IFtdO1xufVxuXG4vKiogU2VyaWVzIG9wdGlvbnMgY2FuIGJlIGVpdGhlciBhcHBsaWVkIGdsb2JhbGx5IG9uIGEgY29sdW1uIGxldmVsLCBvciBwYXJ0aWFsbHkgb3ZlcnJpZGRlbiBpbiBwYXJ0aWN1bGFyIHNlcmllcyAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBuYW1lXG4gIGZpdEZ1bmN0aW9uPzogc3RyaW5nIHwgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb247IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgZml0IGZ1bmN0aW9uXG4gIHBhcmFtZXRlcnM/OiBudW1iZXJbXTsgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBwYXJhbWV0ZXJzLCBhdXRvLWZpdHRpbmcgd2hlbiBub3QgZGVmaW5lZFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdOyAgIC8vIGRlZmluZXMgdGhlIGFjY2VwdGFibGUgcmFuZ2Ugb2YgZWFjaCBwYXJhbWV0ZXIsIHdoaWNoIGlzIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgdGhlIGZpdHRpbmcuIFNlZSBhbHNvIGBwYXJhbWV0ZXJzYC5cbiAgbWFya2VyVHlwZT86IEZpdE1hcmtlclR5cGU7ICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbWFya2VyIHR5cGVcbiAgbGluZVN0eWxlPzogRml0TGluZVN0eWxlOyAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbGluZSBzdHlsZVxuICBwb2ludENvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBwb2ludCBjb2xvclxuICBmaXRMaW5lQ29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBmaXQgbGluZSBjb2xvclxuICBjb25maWRlbmNlSW50ZXJ2YWxDb2xvcj86IHN0cmluZzsgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGNvbG9yXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIG91dGxpZXIgY29sb3JcbiAgc2hvd0ZpdExpbmU/OiBib29sZWFuOyAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZml0IGxpbmUgb3Igbm90XG4gIHNob3dQb2ludHM/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZGF0YSBkaXNwbGF5IG1vZGVcbiAgc2hvd0N1cnZlQ29uZmlkZW5jZUludGVydmFsPzogYm9vbGVhbjsgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9yIG5vdFxuICBlcnJvck1vZGVsPzogRml0RXJyb3JNb2RlbFR5cGU7ICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBlcnJvciBtb2RlbFxuICBjbGlja1RvVG9nZ2xlPzogYm9vbGVhbjsgICAgLy8gaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIHBvaW50IHRvZ2dsZXMgaXRzIG91dGxpZXIgc3RhdHVzIGFuZCBjYXVzZXMgY3VydmUgcmVmaXR0aW5nXG4gIGxhYmVscz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufTsgLy8gY29udHJvbGxlZCBieSBJRml0Q2hhcnREYXRhIGxhYmVsT3B0aW9ucywgc2hvd3MgbGFiZWxzXG4gIGRyb3BsaW5lcz86IHN0cmluZ1tdOyAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZHJvcGxpbmVzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3QgKElDNTApXG59XG4vLyBUT0RPOiBzaG93IGxhYmVscyBpbiBwcm9wZXJ0eSBwYW5lbCBpZiBwcmVzZW50LCBjb2xvciBieSBkZWZhdWx0IGZyb20gc2VyaWVzXG5cblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgRml0U3RhdGlzdGljc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpc3RpY3NQcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdID0gW1xuICBERy5Qcm9wZXJ0eS5qcygnclNxdWFyZWQnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnYXVjJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ludGVyY2VwdFknLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnaW50ZXJjZXB0WCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdzbG9wZScsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCd0b3AnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnYm90dG9tJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbl07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIElGaXRDaGFydE9wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRDaGFydERhdGFQcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdID0gW1xuICAvLyBTdHlsZSBhbmQgem9vbVxuICBERy5Qcm9wZXJ0eS5qcygnbWluWCcsIERHLlRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFggYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCdtaW5ZJywgREcuVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWluaW11bSB2YWx1ZSBvZiB0aGUgWSBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ21heFgnLCBERy5UWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WScsIERHLlRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01heGltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCd0aXRsZScsIERHLlRZUEUuU1RSSU5HLCB7bnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3hBeGlzTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFggYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygneUF4aXNOYW1lJywgREcuVFlQRS5TVFJJTkcsIHtkZXNjcmlwdGlvbjpcbiAgICAnTGFiZWwgdG8gc2hvdyBvbiB0aGUgWSBheGlzLiBJZiBub3Qgc3BlY2lmaWVkLCBjb3JyZXNwb25kaW5nIGRhdGEgY29sdW1uIG5hbWUgaXMgdXNlZCcsIG51bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCdsb2dYJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRoZSBYIGF4aXMgc2hvdWxkIGJlIGxvZ2FyaXRobWljJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbG9nWScsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWSBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2FsbG93WFplcm9lcycsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB4IHplcm9lcyBhbGxvd2VkIGZvciBsb2dhcml0aG1pYyBkYXRhIG9yIG5vdCcsIGRlZmF1bHRWYWx1ZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd1N0YXRpc3RpY3MnLCBERy5UWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIHN0YXRpc3RpY3Mgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBzdGF0aXN0aWNzUHJvcGVydGllcy5tYXAoKGZycCkgPT4gZnJwLm5hbWUpLCBpbnB1dFR5cGU6ICdNdWx0aUNob2ljZSd9KSxcbl07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIElGaXRTZXJpZXNPcHRpb25zfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3QgZml0U2VyaWVzUHJvcGVydGllczogREcuUHJvcGVydHlbXSA9IFtcbiAgREcuUHJvcGVydHkuanMoJ2ZpdEZ1bmN0aW9uJywgREcuVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGNob2ljZXM6IFsnc2lnbW9pZCcsICdsaW5lYXInXSwgZGVmYXVsdFZhbHVlOiAnc2lnbW9pZCd9KSxcbiAgREcuUHJvcGVydHkuanMoJ3BvaW50Q29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdmaXRMaW5lQ29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdvdXRsaWVyQ29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdlcnJvck1vZGVsJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6ICdjb25zdGFudCcsXG4gICAgY2hvaWNlczogWydjb25zdGFudCcsICdwcm9wb3J0aW9uYWwnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdjbGlja1RvVG9nZ2xlJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246XG4gICAgJ0NsaWNrIG9uIGEgcG9pbnQgdG8gbWFyayBpdCBhcyBvdXRsaWVyIGFuZCByZWZpdCcsIG51bGxhYmxlOiB0cnVlLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Rml0TGluZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd1BvaW50cycsIERHLlRZUEUuU1RSSU5HLCAvLyByZXdyaXRlIGRlc2NyaXB0aW9uXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBwb2ludHMvY2FuZGxlc3RpY2tzL25vbmUgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ3BvaW50cycsIGNob2ljZXM6IFsncG9pbnRzJywgJ2NhbmRsZXN0aWNrcycsICdib3RoJ119KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbCcsIERHLlRZUEUuQk9PTCxcbiAgICB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246ICdXaGV0aGVyIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHNob3VsZCBiZSByZW5kZXJlZCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGZyaWVuZGx5TmFtZTogJ0NvbmZpZGVuY2UgaW50ZXJ2YWwnfSksXG4gIERHLlByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBERy5UWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBsaW5lYXIocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIHJldHVybiBbQSwgQl07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaWdtb2lkKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgZGF0YUJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHgsIHkpO1xuICAgIGNvbnN0IG1lZFkgPSAoZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcCkgLyAyICsgZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG1heFlJbnRlcnZhbCA9IGRhdGFCb3VuZHMuYm90dG9tIC0gZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG5lYXJlc3RYSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEludGVydmFsID0gTWF0aC5hYnMoeVtpXSAtIG1lZFkpO1xuICAgICAgaWYgKGN1cnJlbnRJbnRlcnZhbCA8IG1heFlJbnRlcnZhbCkge1xuICAgICAgICBtYXhZSW50ZXJ2YWwgPSBjdXJyZW50SW50ZXJ2YWw7XG4gICAgICAgIG5lYXJlc3RYSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4QXRNZWRZID0geFtuZWFyZXN0WEluZGV4XTtcbiAgICBjb25zdCBzbG9wZSA9IHlbMF0gPiB5W3kubGVuZ3RoIC0gMV0gPyAxIDogLTE7XG5cbiAgICAvLyBwYXJhbXMgYXJlOiBbbWF4LCB0YW4sIElDNTAsIG1pbl1cbiAgICByZXR1cm4gW2RhdGFCb3VuZHMuYm90dG9tLCBzbG9wZSwgeEF0TWVkWSwgZGF0YUJvdW5kcy50b3BdO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdXNlciBKUyBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBKc0Z1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHlGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZ2V0SW5pdFBhcmFtc0Z1bmM6ICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IG51bWJlcltdLCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLy8gT2JqZWN0IHdpdGggZml0IGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGZpdEZ1bmN0aW9uczoge1tpbmRleDogc3RyaW5nXTogRml0RnVuY3Rpb259ID0ge1xuICAnbGluZWFyJzogbmV3IExpbmVhckZ1bmN0aW9uKCksXG4gICdzaWdtb2lkJzogbmV3IFNpZ21vaWRGdW5jdGlvbigpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJRml0T3B0aW9ucyB7XG4gIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlO1xuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlcjtcbiAgc3RhdGlzdGljczogYm9vbGVhbjtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6IE9iamVjdGl2ZUZ1bmN0aW9uIHtcbiAgbGV0IG9mOiBPYmplY3RpdmVGdW5jdGlvbjtcblxuICBzd2l0Y2ggKGVycm9yTW9kZWwpIHtcbiAgY2FzZSBGaXRFcnJvck1vZGVsLkNPTlNUQU5UOlxuICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQ7XG4gICAgYnJlYWs7XG4gIGNhc2UgRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUw6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWw7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvZjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3B0aW1pemFibGUoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBmaXhlZDogbnVtYmVyW10pOiBPcHRpbWl6YWJsZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgcmV0dXJuIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMpLnZhbHVlO1xuICAgIH0sXG4gICAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGdyYWRpZW50W2ldID0gZml4ZWQuaW5jbHVkZXMoaSkgPyAwIDogZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZiwgY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycywgaSk7XG5cbiAgICAgIHJldHVybiBncmFkaWVudDtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyKSxcbiAgICAgIChnZXRJbml0UGFyYW1zRnVuYyBhcyAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBudW1iZXJbXSksIHBhcmFtTmFtZXMpO1xuICAgIGZpdEZ1bmN0aW9uc1tuYW1lXSA9IGZpdEZ1bmM7XG4gIH1cblxuICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXREYXRhKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBmaXRGdW5jdGlvbjogRml0RnVuY3Rpb24sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlLFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdKTogRml0Q3VydmUge1xuICBjb25zdCBjdXJ2ZUZ1bmN0aW9uID0gZml0RnVuY3Rpb24ueTtcbiAgY29uc3QgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsKTtcbiAgY29uc3QgZml4ZWQ6IG51bWJlcltdID0gW107XG4gIGxldCBvdmVyTGltaXRzID0gdHJ1ZTtcblxuICB3aGlsZSAob3ZlckxpbWl0cykge1xuICAgIGNvbnN0IG9wdGltaXphYmxlID0gY3JlYXRlT3B0aW1pemFibGUoZGF0YSwgY3VydmVGdW5jdGlvbiwgb2YsIGZpeGVkKTtcbiAgICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG5cbiAgICBvdmVyTGltaXRzID0gZmFsc2U7XG4gICAgaWYgKCFwYXJhbWV0ZXJCb3VuZHMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldPy5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJhbVZhbHVlc1tpXSA+IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghKSB7XG4gICAgICAgIG92ZXJMaW1pdHMgPSB0cnVlO1xuICAgICAgICBmaXhlZC5wdXNoKGkpO1xuICAgICAgICBwYXJhbVZhbHVlc1tpXSA9IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldIDwgcGFyYW1ldGVyQm91bmRzW2ldLm1pbiEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1pbiE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZml0dGVkQ3VydmU6IGZpdHRlZEN1cnZlLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtVmFsdWVzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogbnVtYmVyW10pOlxuICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiAoeDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuXG4gIGNvbnN0IGVycm9yID0gZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUwgP1xuICAgIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5tdWx0IDpcbiAgICBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbVZhbHVlcykuY29uc3Q7XG5cbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgKyBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgY29uc3QgYm90dG9tID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgcmV0dXJuIHtjb25maWRlbmNlVG9wOiB0b3AsIGNvbmZpZGVuY2VCb3R0b206IGJvdHRvbX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aXN0aWNzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICByU3F1YXJlZDogc3RhdGlzdGljcyA/IGdldERldENvZWZmKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBhdWM6IHN0YXRpc3RpY3MgPyBnZXRBdWMoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdFg6IHBhcmFtVmFsdWVzWzJdLFxuICAgIGludGVyY2VwdFk6IGZpdHRlZEN1cnZlKHBhcmFtVmFsdWVzWzJdKSxcbiAgICBzbG9wZTogcGFyYW1WYWx1ZXNbMV0sXG4gICAgdG9wOiBwYXJhbVZhbHVlc1swXSxcbiAgICBib3R0b206IHBhcmFtVmFsdWVzWzNdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJ0ZWRGdW5jdGlvbnMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdEludmVydGVkRnVuY3Rpb25zIHwgbnVsbCB7XG4gIGNvbnN0IHN0dWRlbnRRID0galN0YXQuc3R1ZGVudHQuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwgLyAyLCBkYXRhLngubGVuZ3RoIC0gcGFyYW1WYWx1ZXMubGVuZ3RoKTtcblxuICBsZXQgaW52OiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgbGV0IGludkJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIGlmIChzdGF0aXN0aWNzKSB7XG4gICAgaW52ID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgLy9zaG91bGQgY2hlY2sgaWYgbW9yZSB0aGFuIGJvdHRvbSBhbmQgbGVzcyB0aGFuIHRvcFxuICAgICAgcmV0dXJuIHBhcmFtVmFsdWVzWzJdIC8gTWF0aC5wb3coKHBhcmFtVmFsdWVzWzBdIC0geSkgLyAoeSAtIHBhcmFtVmFsdWVzWzNdKSwgMSAvIHBhcmFtVmFsdWVzWzFdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3IgPSBnZXRJbnZFcnJvcihpbnYsIGRhdGEpO1xuXG4gICAgaW52VG9wID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgKyBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICBpbnZCb3R0b20gPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiB2YWx1ZSAtIHN0dWRlbnRRICogZXJyb3IgLyBNYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnZlcnRlZDogaW52LFxuICAgICAgaW52ZXJ0ZWRUb3A6IGludlRvcCxcbiAgICAgIGludmVydGVkQm90dG9tOiBpbnZCb3R0b20sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbW9pZChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBBID0gcGFyYW1zWzBdO1xuICBjb25zdCBCID0gcGFyYW1zWzFdO1xuICBjb25zdCBDID0gcGFyYW1zWzJdO1xuICBjb25zdCBEID0gcGFyYW1zWzNdO1xuICByZXR1cm4gKEQgKyAoQSAtIEQpIC8gKDEgKyBNYXRoLnBvdygxMCwgKHggLSBDKSAqIEIpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXIocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogeCArIEI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdWMoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgYXVjID0gMDtcblxuICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5kYXRhLngpO1xuICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5kYXRhLngpO1xuICBjb25zdCBpbnRlZ3JhdGlvblN0ZXAgPSAobWF4IC0gbWluKSAvIDEwMDA7XG5cbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcblxuICBjb25zdCB5TWVhbiA9IGpTdGF0Lm1lYW4oZGF0YS55KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIHNzUmVzICs9IE1hdGgucG93KGRhdGEueVtpXSAtIGZpdHRlZEN1cnZlKGRhdGEueFtpXSksIDIpO1xuICAgIHNzVG90ICs9IE1hdGgucG93KGRhdGEueVtpXSAtIHlNZWFuLCAyKTtcbiAgfVxuXG4gIHJldHVybiAxIC0gc3NSZXMgLyBzc1RvdDtcbn1cblxuZnVuY3Rpb24gZ2V0SW52RXJyb3IodGFyZ2V0RnVuYzogKHk6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdGl2ZURlcml2YXRpdmUob2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdLCBzZWxlY3RlZFBhcmFtOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzdGVwID0gKHBhcmFtc1tzZWxlY3RlZFBhcmFtXSAqIDAuMDAwMSkgPT09IDAgPyAwLjAwMSA6IChwYXJhbXNbc2VsZWN0ZWRQYXJhbV0gKiAwLjAwMDEpO1xuICBjb25zdCBwYXJhbXNUb3A6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHBhcmFtc0JvdHRvbTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gc2VsZWN0ZWRQYXJhbSkge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldICsgc3RlcCk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0gLSBzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRydlRvcCA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc1RvcCkudmFsdWU7XG4gIGNvbnN0IGRydkJvdHRvbSA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc0JvdHRvbSkudmFsdWU7XG5cbiAgcmV0dXJuIChkcnZUb3AgLSBkcnZCb3R0b20pIC8gKDIgKiBzdGVwKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSk6IExpa2VsaWhvb2Qge1xuICAvL2Fzc3VyZSBvYnNlcnZlZCBhbmQgYXJncyBzYW1lIGxlbmd0aFxuICBjb25zdCBwaSA9IE1hdGguUEk7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcbiAgbGV0IGxpa2VsaWhvb2QgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS55W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKHBhcmFtcywgZGF0YS54W2ldKTtcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuXG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyBzaWdtYVNxICsgTWF0aC5sb2coMiAqIHBpICogc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHt2YWx1ZTogLWxpa2VsaWhvb2QsIGNvbnN0OiBzaWdtYSwgbXVsdDogMH07XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbCh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IDAsIG11bHQ6IHNpZ21hfTtcbn1cbiJdfQ==
|