@rivet-health/design-system 40.35.2 → 40.37.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/esm2020/lib/layout/setting-row/setting-row.component.mjs +111 -0
- package/esm2020/lib/riv.module.mjs +6 -1
- package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +48 -10
- package/esm2020/lib/table/table/state.mjs +17 -9
- package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +8 -18
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/rivet-health-design-system.mjs +166 -29
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +178 -35
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/layout/setting-row/setting-row.component.d.ts +72 -0
- package/lib/riv.module.d.ts +44 -43
- package/lib/table/table/state-helpers/column-helpers.d.ts +11 -1
- package/lib/table/table/state.d.ts +3 -0
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +3 -9
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -87,7 +87,8 @@ export var RivTable;
|
|
|
87
87
|
const csvExportAllowed = !(options?.getRowSpanForCell || options?.customSummaryRow);
|
|
88
88
|
// Augment state with derived state, and subscribe.
|
|
89
89
|
const state = connectable(coreState.pipe(map(({ state: s }) => {
|
|
90
|
-
const resolvedColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options?.allowSelection);
|
|
90
|
+
const resolvedColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options?.allowSelection, 'enabled');
|
|
91
|
+
const resolvedDisabledColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options?.allowSelection, 'disabled');
|
|
91
92
|
if (TableResultHelpers.isGroupResult(s.result)) {
|
|
92
93
|
return deriveFullStateFromGroupResult({
|
|
93
94
|
s,
|
|
@@ -97,6 +98,7 @@ export var RivTable;
|
|
|
97
98
|
pluralEntityName,
|
|
98
99
|
columnNameMap,
|
|
99
100
|
resolvedColumns,
|
|
101
|
+
resolvedDisabledColumns,
|
|
100
102
|
searchableColumnMap,
|
|
101
103
|
csvExportAllowed,
|
|
102
104
|
options,
|
|
@@ -111,6 +113,7 @@ export var RivTable;
|
|
|
111
113
|
pluralEntityName,
|
|
112
114
|
columnNameMap,
|
|
113
115
|
resolvedColumns,
|
|
116
|
+
resolvedDisabledColumns,
|
|
114
117
|
searchableColumnMap,
|
|
115
118
|
csvExportAllowed,
|
|
116
119
|
options,
|
|
@@ -125,6 +128,7 @@ export var RivTable;
|
|
|
125
128
|
pluralEntityName,
|
|
126
129
|
columnNameMap,
|
|
127
130
|
resolvedColumns,
|
|
131
|
+
resolvedDisabledColumns,
|
|
128
132
|
searchableColumnMap,
|
|
129
133
|
csvExportAllowed,
|
|
130
134
|
options,
|
|
@@ -146,7 +150,7 @@ export var RivTable;
|
|
|
146
150
|
}
|
|
147
151
|
RivTable.createManager = createManager;
|
|
148
152
|
function deriveFullStateFromGroupResult(props) {
|
|
149
|
-
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
153
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, resolvedDisabledColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
150
154
|
if (options?.getRowSpanForCell) {
|
|
151
155
|
// eslint-disable-next-line no-console
|
|
152
156
|
console.warn('Heads up! Custom row spans are not supported for grouped tables.');
|
|
@@ -184,7 +188,7 @@ export var RivTable;
|
|
|
184
188
|
if (!TableResultHelpers.isGroupResult(dataSet)) {
|
|
185
189
|
throw new Error('Returned non-grouped CSV data for grouped table');
|
|
186
190
|
}
|
|
187
|
-
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
191
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection, 'enabled');
|
|
188
192
|
const data = [];
|
|
189
193
|
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
190
194
|
if (groupCellFormatter) {
|
|
@@ -218,6 +222,7 @@ export var RivTable;
|
|
|
218
222
|
pluralEntityName: pluralEntityName,
|
|
219
223
|
columnNameMap: columnNameMap,
|
|
220
224
|
resolvedColumns: resolvedColumns,
|
|
225
|
+
resolvedDisabledColumns: resolvedDisabledColumns,
|
|
221
226
|
searchableColumnMap: searchableColumnMap,
|
|
222
227
|
csvExportAllowed: csvExportAllowed,
|
|
223
228
|
options: options,
|
|
@@ -235,7 +240,7 @@ export var RivTable;
|
|
|
235
240
|
};
|
|
236
241
|
}
|
|
237
242
|
function deriveFullStateFromNestedResult(props) {
|
|
238
|
-
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
243
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, resolvedDisabledColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
239
244
|
if (options?.getRowSpanForCell) {
|
|
240
245
|
// eslint-disable-next-line no-console
|
|
241
246
|
console.warn('Heads up! Custom row spans are not supported for tables with nested data.');
|
|
@@ -271,7 +276,7 @@ export var RivTable;
|
|
|
271
276
|
if (TableResultHelpers.isGroupResult(dataSet)) {
|
|
272
277
|
throw new Error('Returned grouped CSV data for a nested with header result table');
|
|
273
278
|
}
|
|
274
|
-
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
279
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection, 'enabled');
|
|
275
280
|
const data = [];
|
|
276
281
|
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
277
282
|
const allRows = TableResultHelpers.getAllRowsFromResult(dataSet);
|
|
@@ -297,6 +302,7 @@ export var RivTable;
|
|
|
297
302
|
pluralEntityName: pluralEntityName,
|
|
298
303
|
columnNameMap: columnNameMap,
|
|
299
304
|
resolvedColumns: resolvedColumns,
|
|
305
|
+
resolvedDisabledColumns: resolvedDisabledColumns,
|
|
300
306
|
searchableColumnMap: searchableColumnMap,
|
|
301
307
|
csvExportAllowed: csvExportAllowed,
|
|
302
308
|
options: options,
|
|
@@ -314,7 +320,7 @@ export var RivTable;
|
|
|
314
320
|
};
|
|
315
321
|
}
|
|
316
322
|
function deriveFullStateFromRegularResult(props) {
|
|
317
|
-
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
323
|
+
const { s, stateResult, source, columns, pluralEntityName, columnNameMap, resolvedColumns, resolvedDisabledColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
318
324
|
const rows = stateResult.currentPageData.map(row => ({
|
|
319
325
|
...row,
|
|
320
326
|
rowLink: options?.rowLink ? options.rowLink(row) : null,
|
|
@@ -348,7 +354,7 @@ export var RivTable;
|
|
|
348
354
|
if (TableResultHelpers.isNestedResult(dataSet)) {
|
|
349
355
|
throw new Error('Returned nested CSV data for non-nested table');
|
|
350
356
|
}
|
|
351
|
-
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection);
|
|
357
|
+
const fullColumns = TableColumnHelpers.resolveColumns(s, columns, columnNameMap, !!options.allowSelection, 'enabled');
|
|
352
358
|
const data = [];
|
|
353
359
|
data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));
|
|
354
360
|
for (const record of dataSet.currentPageData) {
|
|
@@ -374,6 +380,7 @@ export var RivTable;
|
|
|
374
380
|
pluralEntityName: pluralEntityName,
|
|
375
381
|
columnNameMap: columnNameMap,
|
|
376
382
|
resolvedColumns: resolvedColumns,
|
|
383
|
+
resolvedDisabledColumns: resolvedDisabledColumns,
|
|
377
384
|
searchableColumnMap: searchableColumnMap,
|
|
378
385
|
csvExportAllowed: csvExportAllowed,
|
|
379
386
|
options: options,
|
|
@@ -427,10 +434,11 @@ export var RivTable;
|
|
|
427
434
|
};
|
|
428
435
|
}
|
|
429
436
|
function derivedFullStateDisplay(props, partialDisplay = {}) {
|
|
430
|
-
const { coreState, columns, pluralEntityName, columnNameMap, resolvedColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
437
|
+
const { coreState, columns, pluralEntityName, columnNameMap, resolvedColumns, resolvedDisabledColumns, searchableColumnMap, csvExportAllowed, options, } = props;
|
|
431
438
|
return {
|
|
432
439
|
...coreState.display,
|
|
433
440
|
columns: resolvedColumns,
|
|
441
|
+
disabledColumns: resolvedDisabledColumns,
|
|
434
442
|
allColumns: TableColumnHelpers.getAllColumns(coreState, columns, columnNameMap),
|
|
435
443
|
columnNameMap: columnNameMap,
|
|
436
444
|
searchableColumnMap: searchableColumnMap,
|
|
@@ -1019,4 +1027,4 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
|
|
|
1019
1027
|
break;
|
|
1020
1028
|
}
|
|
1021
1029
|
}
|
|
1022
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQTRsRHhCO0FBNWxERCxXQUFpQixRQUFRO0lBMkNWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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SixLQUFLLEVBQUUsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG9CQUFvQjtZQUN2QixNQUFNO2dCQUNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07S0FDVDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgRnVzZSwgeyBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDb25uZWN0YWJsZSxcbiAgY29ubmVjdGFibGUsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIHNoYXJlLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyB0b1NlbnRlbmNlQ2FzZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zZW50ZW5jZS1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVDb2xsYXBzZUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVEaXNwbGF5SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVOZXN0aW5nSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9uZXN0aW5nLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVPcmRlckhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3BhZ2luYXRpb24taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWxlY3Rpb24taGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuICBleHBvcnQgdHlwZSBHcm91cCA9IHsga2V5OiBzdHJpbmcgfCBudW1iZXIgfTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqIC0gQ29sbGFwc2VTdGF0ZSAoZm9yIHRyYWNraW5nIHRoZSByb3dzL2hlYWRlcnMgdGhhdCBhcmUgY29sbGFwc2VkKVxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGRhdGEgZmxvdyBpcyB1bmlkaXJlY3Rpb25hbDogdGhlIFVJIGlzc3VlcyBhY3Rpb25zLCB3aGljaFxuICAgKiBhZmZlY3QgdGhlIHN0YXRlLCBhbmQgdGhlIHN0YXRlIGdldHMgcGFzc2VkIGJhY2sgdG8gdGhlIFVJIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCICBVSSAg4peE4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUmCAgICAgICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIJcbiAgICog4pSCICBBY3Rpb25zICDilIIgICDilIJcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilJBcbiAgICog4pSCICBTdGF0ZSByZWR1Y2VyICDilIJcbiAgICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqXG4gICAqIEZyb20gdGhlIGNvcmUgc3RhdGUsIGNhbGN1bGF0ZWQgc3RhdGUgaXMgZGVyaXZlZCBhbmQgYWRkZWQgdG8gdGhlIGNvcmVcbiAgICogc3RhdGUgKGUuZy4sIGZyb20gdGhlIHJhdyBzZWxlY3Rpb24gc3RhdGUgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdFxuICAgKiBhbGwgdGhlIHJvd3Mgb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZSBhcmUgc2VsZWN0ZWQsIGV0Yy4pLlxuICAgKi9cblxuICAvLy8vLy8vLy8vL1xuICAvLyBRdWVyeSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8vIFF1ZXJ5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgT3JkZXJEaXJlY3Rpb24gPSAnYXNjJyB8ICdkZXNjJztcbiAgZXhwb3J0IGNvbnN0IHBhZ2VTaXplcyA9IFsyNSwgNTAsIDEwMCwgMjUwXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgUXVlcnk8QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID0ge1xuICAgIG9yZGVyOiB7XG4gICAgICBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uO1xuICAgICAgY29sdW1uOiBDO1xuICAgIH0gfCBudWxsO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIHNlYXJjaENvbHVtbnM6IE1hcDxDLCBib29sZWFuPjtcbiAgICBmaWx0ZXJzOiBGIHwgbnVsbDtcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBudW1iZXI7XG4gICAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIH07XG4gICAgZ3JvdXBpbmc6IHtcbiAgICAgIHZpZXdNb3JlS2V5OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZ3JvdXBzUGVyUGFnZTogbnVtYmVyO1xuICAgICAgY291bnRQZXJHcm91cDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUXVlcnkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFF1ZXJ5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdvcmRlckNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydvcmRlciddO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudSc7XG4gICAgICB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ29sdW1uc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2hDb2x1bW5zJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyQWRkJzsgY29sdW1uS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBpbmdDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZ3JvdXBpbmcnXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdncm91cHNQZXJQYWdlQ2hhbmdlJzsgZ3JvdXBzUGVyUGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOyBjb3VudFBlckdyb3VwOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAndmlld01vcmVLZXlDaGFuZ2UnOyB2aWV3TW9yZUtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnIH07XG5cbiAgLy8vLy8vLy8vL1xuICAvLyBMb2FkIC8vXG4gIC8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBMb2FkID0ge1xuICAgIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBSZXN1bHQgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZURhdGE6IFJbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3ViR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IFJlc3VsdDxSPiAmIHtcbiAgICAvKipcbiAgICAgKiBBbnkgb3RoZXIgcmVsZXZhbnQgZ3JvdXAgZGF0YSwgdXNlZCBmb3IgdGhlIHN1YmhlYWRlclxuICAgICAqL1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgc3BsaXQgaW50byBncm91cHNcbiAgICAgKi9cbiAgICBncm91cFJlc3VsdHM6IFN1Ykdyb3VwUmVzdWx0PFIsIEc+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxHcm91cENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIC8qXG4gICAgTmVzdGVkUmVzdWx0XG4gICAgICBOZXN0ZWRIZWFkZXJSb3dcbiAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBzdWJyb3dzXG4gICAgICAgICAgTmVzdGVkUm93IC0gd2l0aCBubyBzdWJyb3dzXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZEhlYWRlclJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgaGVhZGVyIGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93czogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgdGV4dCB0byBzaG93IG5leHQgdG8gdGhlIHRvZ2dsZWFibGUgY2hldnJvbiwgb3IgbnVsbCBpZiB3ZSBkb24ndCBzaG93IHRoZSBoZWFkZXJcbiAgICBoZWFkZXJUZXh0OiBzdHJpbmcgfCBudWxsO1xuICB9O1xuICBleHBvcnQgdHlwZSBOZXN0ZWRSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLy8gVGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgaGlkZGVuIHdoZW4gdGhlIHRvZ2dsZSBvbiB0aGlzIHJvdyBpcyB0b2dnbGVkLlxuICAgIHN1YlJvd3M/OiBOZXN0ZWRSb3c8Uj5bXTtcblxuICAgIC8vIFRoZSByZWxldmFudCBkYXRhIHVzZWQgdG8gZGlzcGxheSB0aGlzIHJvdy5cbiAgICBkYXRhOiBSO1xuICB9O1xuICAvKlxuICAgIE5lc3RlZCBoZWFkZXIgcm93cyBhcmUgdG9nZ2xlYWJsZSBoZWFkZXJzIGZvciBncm91cHMgb2Ygcm93cy5cbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgbmVzdGVkIGludG8gXCJoZWFkZXJzIHdpdGggc3Vicm93c1wiLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlTmVzdGVkSGVhZGVyczogTmVzdGVkSGVhZGVyUm93PFI+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqXG4gICAgICogT25seSBjb3VudHMgcm93cyBhdCB0aGUgYm90dG9tIGxldmVsIG9mIG5lc3RpbmcuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG5cbiAgICAvKlxuICAgICAgVGhpcyB0eXBlIGFsc28gc3VwcG9ydHMgbmVzdGVkIHJvd3Mgd2l0aG91dCBoZWFkZXIgcm93cywgc28gdGhpcyBwcm9wZXJ0eVxuICAgICAgaGVscHMgdXMgdGVsbCB3aGV0aGVyIHRvIHNob3cgdGhlIGhlYWRlcnMuXG4gICAgKi9cbiAgICBoYXNIZWFkZXJzOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSAoXG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+LFxuICAgIG1vc3RSZWNlbnRBY3Rpb246IEFjdGlvbjxSLCBDLCBGLCBHPixcbiAgKSA9PiBQcm9taXNlPFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+PjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIERpc3BsYXkgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIC8vIERpc3BsYXkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb2x1bW5TZXR0aW5nczxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBrZXk6IEM7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRGlzcGxheTxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBjb2x1bW5TZXR0aW5nczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICBjZWxsUm93U3BhbjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQykgPT4gbnVtYmVyO1xuICB9O1xuXG4gIC8vIERpc3BsYXkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIERpc3BsYXlBY3Rpb248QyBleHRlbmRzIENvbHVtbj4gPVxuICAgIHwgeyB0eXBlOiAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOyBwYXlsb2FkOiBEaXNwbGF5PEM+Wydjb2x1bW5TZXR0aW5ncyddIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcGlubmVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBmcmVlemU6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZnJlZXplRGl2aWRlcic7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZSc7XG4gICAgICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc291cmNlPzogJ3RhYmxlRHJhZycgfCAnbWVudURyYWcnO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uTW92ZVRvQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdkcmFnRHJvcCcgfCAnZXllSWNvbic7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbldpZHRoQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNlbGVjdGlvbiAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICAvLyBTZWxlY3Rpb24gc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb248UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IFJbJ2lkJ10gfCBudWxsO1xuICB9ICYgKFxuICAgIHwge1xuICAgICAgICBtb2RlOiAnaW5jbHVkZSc7XG4gICAgICAgIGluY2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdleGNsdWRlJztcbiAgICAgICAgZXhjbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgKTtcblxuICAvLyBTZWxlY3Rpb24gYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjdGlvbjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfT4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogU2VsZWN0aW9uPFI+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jvd1NlbGVjdGVkQ2hhbmdlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBjb250aWd1b3VzOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2FsbFNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNsZWFyJztcbiAgICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sbGFwc2VTdGF0ZTxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIGRlZmF1bHRUbzogJ2NvbGxhcHNlZCc7XG4gICAgICAgIGV4cGFuZGVkUm93czogU2V0PFJbJ2lkJ10+O1xuICAgICAgICBleHBhbmRlZEhlYWRlcnM6IFNldDxzdHJpbmc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCc7XG4gICAgICAgIGNvbGxhcHNlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICAgICAgY29sbGFwc2VkSGVhZGVyczogU2V0PHN0cmluZz47XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbGxhcHNlQWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZVJvd0NvbGxhcHNlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVBbGxDb2xsYXBzZWQnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gICAgY29sbGFwc2VTdGF0ZTogQ29sbGFwc2VTdGF0ZTxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9XG4gICAgfCBRdWVyeUFjdGlvbjxDLCBGPlxuICAgIHwgRGlzcGxheUFjdGlvbjxDPlxuICAgIHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+XG4gICAgfCBDb2xsYXBzZUFjdGlvbjxSPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdWJSb3dzOiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgbmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICAgIHJvd3NBcmVHcmF5ZWQ6IGJvb2xlYW47XG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiBib29sZWFuO1xuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGVuYWJsZWRDb3VudDogbnVtYmVyO1xuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6IGJvb2xlYW47XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU/OiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIHJvd3NBcmVHcmF5ZWQ/OiBib29sZWFuO1xuICAgIGN1c3RvbVN1bW1hcnlSb3c/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFwiUmVzdWx0cyBwZXIgcGFnZVwiIGxhYmVsIGFuZCBwYWdlLXNpemUgZHJvcGRvd24gYXJlXG4gICAgICogaGlkZGVuLiBQYWdlIG5hdmlnYXRpb24gYXJyb3dzIGFuZCBwYWdlIG51bWJlcnMgcmVtYWluIHZpc2libGUuXG4gICAgICovXG4gICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhcmVudC1jb250cm9sbGVkIHJvdyBzcGFubmluZy5cbiAgICAgKiBSZXR1cm4gMCB0byBzdXBwcmVzcyB0aGUgY2VsbCwgPj0xIGZvciBhIHJlYWwgcm93c3Bhbi5cbiAgICAgKiBJZiBvbWl0dGVkIG9yIGludmFsaWQsIGRlZmF1bHRzIHRvIDEuXG4gICAgICovXG4gICAgZ2V0Um93U3BhbkZvckNlbGw/OiBSb3dTcGFuR2V0dGVyPEM+O1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IE1hbmFnZXI8UiwgQywgRiwgRz4ge1xuICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCB0YWJsZSBzdGF0ZS5cblxuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz4gPSBuZXcgTWFwPEMsIGJvb2xlYW4+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5zZWFyY2hhYmxlID8/IHRydWUsXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHNlYXJjaGFibGVDb2x1bW5NYXAuZ2V0KGtleSkpXG4gICAgICAgICAgICAubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCcsXG4gICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICB0b1NlbnRlbmNlQ2FzZShtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXkpLFxuICAgICAgXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5TdGF0ZSA9XG4gICAgICBvcHRpb25zPy5kZWZhdWx0Q29sdW1uU3RhdGUgPz9cbiAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZS5kaXNwbGF5LmNvbHVtblNldHRpbmdzO1xuXG4gICAgLy8gV2lyZSB1cCByZWR1Y2VkIHN0YXRlIGZyb20gYWN0aW9ucyBhbmQgaW5pdGlhbCBzdGF0ZS5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTx7XG4gICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgZWZmZWN0OiBFZmZlY3QgfCBudWxsO1xuICAgIH0+ID0gYWN0aW9ucy5waXBlKFxuICAgICAgbWVyZ2VTY2FuPFxuICAgICAgICBBY3Rpb248UiwgQywgRiwgRz4sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgPihcbiAgICAgICAgKHsgc3RhdGUgfSwgYWN0aW9uKSA9PlxuICAgICAgICAgIGZyb20oXG4gICAgICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICB7IHN0YXRlOiBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsIGVmZmVjdDogbnVsbCB9LFxuICAgICAgICAxLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkVycm9yOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY3N2RXhwb3J0QWxsb3dlZCA9ICEoXG4gICAgICBvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCB8fCBvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93XG4gICAgKTtcblxuICAgIC8vIEF1Z21lbnQgc3RhdGUgd2l0aCBkZXJpdmVkIHN0YXRlLCBhbmQgc3Vic2NyaWJlLlxuICAgIGNvbnN0IHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgbWFwKCh7IHN0YXRlOiBzIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4gPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICEhb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChzLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNOZXN0ZWRSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbU5lc3RlZFJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21SZWd1bGFyUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNjYW4oKHN0YWJsZSwgbmV3U3RhdGUpID0+IHN0YWJsZVN0YXRlKHN0YWJsZSwgbmV3U3RhdGUpKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICBjb25zdCBlZmZlY3RzOiBDb25uZWN0YWJsZTxFZmZlY3Q+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgIT09IG51bGwpLFxuICAgICAgICBtYXAoKHsgZWZmZWN0IH0pID0+IGVmZmVjdCBhcyBFZmZlY3QpLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIGVmZmVjdHMuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCBpbml0aWFsIHRhYmxlIHJvdyBkYXRhLlxuICAgIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlLCBlZmZlY3RzIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBHcm91cFJlc3VsdDxSLCBHPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdyb3VwZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dHcm91cHM6IFJvd0dyb3VwPFIsIEc+W10gPSBzdGF0ZVJlc3VsdC5ncm91cFJlc3VsdHMubWFwKGdyb3VwID0+ICh7XG4gICAgICByb3dzOiBncm91cC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmtcbiAgICAgICAgICA/IG9wdGlvbnMucm93TGluayhyb3csIGdyb3VwLmdyb3VwRGF0YSlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgICB9KSksXG4gICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzR3JvdXBTZWxlY3RlZChzLCBncm91cCksXG4gICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGdyb3VwLnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIGdyb3VwRGF0YTogZ3JvdXAuZ3JvdXBEYXRhLFxuICAgIH0pKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGU6IENzdk1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgY29uc3QgZ3JvdXBDZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2R3JvdXBDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuY3N2Q2VsbEZvcm1hdHRlciBpcyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCcpO1xuICAgICAgeWllbGQgeyBsb2FkaW5nOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlUmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHR5cGU6ICdsb2FkJyB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKCFUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIG5vbi1ncm91cGVkIENTViBkYXRhIGZvciBncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBpZiAoZ3JvdXBDZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIGRhdGFbMF0ucHVzaCgnJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiBkYXRhU2V0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PlxuICAgICAgICBncm91cHMuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgZ3JvdXA6IGdyb3Vwcy5ncm91cERhdGEsXG4gICAgICAgIH0pKSxcbiAgICAgICkpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcm93SXRlbS5yb3c7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlciAmJiByb3dJdGVtLmdyb3VwKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgZ3JvdXBDZWxsRm9ybWF0dGVyKHJlY29yZCwgcm93SXRlbS5ncm91cCkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IHRydWUsXG4gICAgICAgIHJlc3VsdFR5cGU6ICd0YWJsZS1ncm91cGluZycsXG4gICAgICAgIHJvd0dyb3VwcyxcbiAgICAgICAgcm93czogcm93R3JvdXBzLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAucm93cyksXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbU5lc3RlZFJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4ocHJvcHM6IHtcbiAgICBzOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgc3RhdGVSZXN1bHQ6IE5lc3RlZFJlc3VsdDxSPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAob3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHJvdyBzcGFucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdGFibGVzIHdpdGggbmVzdGVkIGRhdGEuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSBzdW1tYXJ5IHJvd3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxOZXN0ZWRIZWFkZXJSb3dzOiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5lc3RlZFJvdyBvZiBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZU5lc3RlZEhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG5ld0Z1bGxSb3c6IEZ1bGxOZXN0ZWRIZWFkZXJSb3c8Uj4gPVxuICAgICAgICBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvbnZlcnRUb0Z1bGxOZXN0ZWRIZWFkZXJSb3coXG4gICAgICAgICAgbmVzdGVkUm93LFxuICAgICAgICAgIHMsXG4gICAgICAgICAgb3B0aW9ucz8ucm93TGluayxcbiAgICAgICAgKTtcbiAgICAgIGZ1bGxOZXN0ZWRIZWFkZXJSb3dzLnB1c2gobmV3RnVsbFJvdyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgaWYgKCFjc3ZFeHBvcnRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICBpZiAoIWNlbGxGb3JtYXR0ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNSZWd1bGFyUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnUmV0dXJuZWQgbm9uLW5lc3RlZCBDU1YgZGF0YSBmb3IgYSBuZXN0ZWQgd2l0aCBoZWFkZXIgcmVzdWx0IHRhYmxlJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBjb25zdCBhbGxSb3dzOiBSW10gPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21SZXN1bHQoZGF0YVNldCk7XG5cbiAgICAgIGZvciAoY29uc3QgY3VycmVudFJvdyBvZiBhbGxSb3dzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCBjdXJyZW50Um93LmlkKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBmdWxsQ29sdW1ucykge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGNlbGxGb3JtYXR0ZXIoY3VycmVudFJvdywgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBxdWVyeTogZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5KHMpLFxuICAgICAgZGlzcGxheTogZGVyaXZlZEZ1bGxTdGF0ZURpc3BsYXkoe1xuICAgICAgICBjb3JlU3RhdGU6IHMsXG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIHJlc29sdmVkQ29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSksXG4gICAgICBzZWxlY3Rpb246IGRlcml2ZWRGdWxsU3RhdGVTZWxlY3Rpb24ocywgb3B0aW9ucyksXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgLi4uc3RhdGVSZXN1bHQsXG4gICAgICAgIHJvd3M6IFtdLFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbmVzdGVkLXJvd3MnLFxuICAgICAgICBuZXN0ZWRIZWFkZXJSb3dzOiBmdWxsTmVzdGVkSGVhZGVyUm93cyxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgICAgY3N2RmlsZW5hbWU6IFRhYmxlUmVzdWx0SGVscGVycy5nZXRDc3ZGaWxlbmFtZShcbiAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4ocHJvcHM6IHtcbiAgICBzOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgc3RhdGVSZXN1bHQ6IFJlc3VsdDxSPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qgcm93cyA9IHN0YXRlUmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAuLi5yb3csXG4gICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY2VsbFJvd1NwYW5DYWNoZSA9IFRhYmxlRGlzcGxheUhlbHBlcnMubWVtb2l6ZWRDZWxsUm93U3BhbihcbiAgICAgIHMsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgY2VsbFJvd1NwYW46IFZhbGlkUm93U3BhbkdldHRlcjxDPiA9IChyb3dJbmRleCwgY29sdW1uKSA9PlxuICAgICAgY2VsbFJvd1NwYW5DYWNoZT8uZ2V0KGNvbHVtbik/Lltyb3dJbmRleF0gPz8gMTtcbiAgICBjb25zdCBoYXNBbnlSb3dTcGFucyA9IGNlbGxSb3dTcGFuQ2FjaGVcbiAgICAgID8gWy4uLmNlbGxSb3dTcGFuQ2FjaGUudmFsdWVzKCldLnNvbWUoc3BhbnMgPT5cbiAgICAgICAgICBzcGFucy5zb21lKHNwYW4gPT4gc3BhbiA+IDEpLFxuICAgICAgICApXG4gICAgICA6IGZhbHNlO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5LZXlzID0gcmVzb2x2ZWRDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4ga2V5KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuY3N2Q2VsbEZvcm1hdHRlciBpcyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCcpO1xuICAgICAgeWllbGQgeyBsb2FkaW5nOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlUmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHR5cGU6ICdsb2FkJyB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc0dyb3VwUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgZ3JvdXBlZCBDU1YgZGF0YSBmb3Igbm9uLWdyb3VwZWQgdGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNOZXN0ZWRSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBuZXN0ZWQgQ1NWIGRhdGEgZm9yIG5vbi1uZXN0ZWQgdGFibGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnVsbENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgIHMsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICEhb3B0aW9ucy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgIGRhdGEucHVzaChmdWxsQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGNvbHVtbk5hbWVNYXAuZ2V0KGtleSkgPz8ga2V5KSk7XG5cbiAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGRhdGFTZXQuY3VycmVudFBhZ2VEYXRhKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBxdWVyeTogZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5KHMsIHtcbiAgICAgICAgb3JkZXI6IGhhc0FueVJvd1NwYW5zID8gbnVsbCA6IHMucXVlcnkub3JkZXIsXG4gICAgICB9KSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KFxuICAgICAgICB7XG4gICAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIHJlc29sdmVkQ29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICAgIGhhc0FueVJvd1NwYW5zID8geyAuLi5jb2x1bW4sIG9yZGVyYWJsZTogZmFsc2UgfSA6IGNvbHVtbixcbiAgICAgICAgICApLFxuICAgICAgICAgIGNlbGxSb3dTcGFuOiBjZWxsUm93U3BhbixcbiAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpID0gcmVzb2x2ZWRDb2x1bW5LZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPT09IHJlc29sdmVkQ29sdW1uS2V5cy5sZW5ndGggLSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sS2V5ID0gcmVzb2x2ZWRDb2x1bW5LZXlzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5PblJpZ2h0ID0gY2VsbFJvd1NwYW4ocm93SW5kZXgsIHJpZ2h0Q29sS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzcGFuT25SaWdodCA+IDEgfHwgc3Bhbk9uUmlnaHQgPT09IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBzZWxlY3Rpb246IGRlcml2ZWRGdWxsU3RhdGVTZWxlY3Rpb24ocywgb3B0aW9ucyksXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgLi4uc3RhdGVSZXN1bHQsXG4gICAgICAgIGlzR3JvdXBlZDogZmFsc2UsXG4gICAgICAgIHJlc3VsdFR5cGU6ICdub3JtYWwtcm93cycsXG4gICAgICAgIHJvd3MsXG4gICAgICAgIHJvd3NBc0dyb3VwOiB7XG4gICAgICAgICAgcm93cyxcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiByb3dzLmxlbmd0aCxcbiAgICAgICAgICBncm91cERhdGE6IHsga2V5OiAnJyB9IGFzIEcsXG4gICAgICAgIH0sXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVF1ZXJ5PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBwYXJ0aWFsUXVlcnk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddPiA9IHt9LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUucXVlcnksXG4gICAgICBwYWdpbmF0aW9uOiBkZXJpdmVkRnVsbFN0YXRlUGFnaW5hdGlvbihjb3JlU3RhdGUpLFxuICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IFRhYmxlU2VhcmNoSGVscGVycy5nZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICAnbm9uZScsXG4gICAgICApLFxuICAgICAgLi4ucGFydGlhbFF1ZXJ5LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlUGFnaW5hdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXVsncGFnaW5hdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICBwcmV2aW91czogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2UoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VzKGNvcmVTdGF0ZSksXG4gICAgICBuZXh0OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldE5leHRQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlQ291bnQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZUNvdW50KGNvcmVTdGF0ZSksXG4gICAgICBzaG93Q29udHJvbHM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhjb3JlU3RhdGUpLFxuICAgICAgcGFnZVJvd1N0YXJ0OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VSb3dTdGFydChjb3JlU3RhdGUpLFxuICAgICAgcGFnZVJvd0VuZDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93RW5kKGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBwcm9wczoge1xuICAgICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nO1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gICAgfSxcbiAgICBwYXJ0aWFsRGlzcGxheTogUGFydGlhbDxGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ2Rpc3BsYXknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvcmVTdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICBhbGxDb2x1bW5zOiBUYWJsZUNvbHVtbkhlbHBlcnMuZ2V0QWxsQ29sdW1ucyhcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgemVyb1N0YXRlTWVzc2FnZTogVGFibGVEaXNwbGF5SGVscGVycy5nZXRaZXJvU3RhdGVNZXNzYWdlKFxuICAgICAgICBjb3JlU3RhdGUsXG4gICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICApLFxuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlRnJlZXphYmxlLFxuICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiAhIW9wdGlvbnM/LmNvbHVtbnNBcmVIaWRlYWJsZSxcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICByb3dzQXJlR3JheWVkOiAhIW9wdGlvbnM/LnJvd3NBcmVHcmF5ZWQsXG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiAhIW9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3csXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgZW5hYmxlZENvdW50OiByZXNvbHZlZENvbHVtbnMubGVuZ3RoLFxuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6ICEhb3B0aW9ucz8uaGlkZVBhZ2VTaXplU2VsZWN0b3IsXG4gICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAoKSA9PiBmYWxzZSxcbiAgICAgIC4uLnBhcnRpYWxEaXNwbGF5LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnc2VsZWN0aW9uJ10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUuc2VsZWN0aW9uLFxuICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgaXNBbGxTZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQWxsU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDpcbiAgICAgICAgVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQ3VycmVudFBhZ2VTZWxlY3RlZChjb3JlU3RhdGUpLFxuICAgICAgc2VsZWN0ZWRDb3VudDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNlbGVjdGVkQ291bnQoY29yZVN0YXRlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbWUgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IG1vc3QgdGFibGVzIHVzZSBhblxuICAgKiBpbi1tZW1vcnkgc291cmNlLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNtYWxsIGRhdGFzZXRzLCB3aGVuIFJpdlRhYmxlIGZlYXR1cmVzIGxpa2VcbiAgICogb3JkZXJpbmcgYW5kIHBhZ2luYXRpb24gYXJlIGRlc2lyZWQuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8UiBleHRlbmRzIFJvdz4gPSBPbWl0PFxuICAgIENvbHVtbk1ldGFkYXRhLFxuICAgICdvcmRlcmFibGUnXG4gID4gJiB7IG9yZGVyS2V5Pzoga2V5b2YgUiB9O1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4gJiB7XG4gICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Uj47XG4gICAgZmlsdGVyPzogKGZpbHRlcnM6IEYgfCBudWxsLCByb3c6IFIpID0+IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hlbiBgcXVlcnkub3JkZXJgIGlzIG51bGwgYW5kIHRoZXJlIGlzIG5vIGFjdGl2ZSBzZWFyY2gsIHJvd3MgYXJlIG9yZGVyZWRcbiAgICAgKiBieSB0aGlzIGNvbHVtbi4gSWYgb21pdHRlZCwgdGhlIGZpcnN0IGNvbHVtbiB3aXRoIGFuIGBvcmRlcktleWAgaXMgdXNlZFxuICAgICAqIChhc2NlbmRpbmcpLlxuICAgICAqL1xuICAgIGRlZmF1bHRTb3J0PzogeyBjb2x1bW46IEM7IGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gfTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBhIG5lc3RlZCB0YWJsZSdzIHBhZ2Ugc2l6ZSBhbmQgdG90YWwgY291bnQgY291bnQ6IGV2ZXJ5IGJvdHRvbS1sZXZlbFxuICAgKiByb3csIHdoaWNoIGNhbiBzcGxpdCBhIHJvdydzIHN1YnJvd3MgYWNyb3NzIHBhZ2VzLCBvciBlYWNoIHRvcC1sZXZlbCByb3dcbiAgICogdG9nZXRoZXIgd2l0aCBhbGwgb2YgaXRzIHN1YnJvd3MuXG4gICAqL1xuICBleHBvcnQgY29uc3QgTmVzdGVkUGFnaW5hdGVCeU9wdGlvbnMgPSBbJ2JvdHRvbVJvd3MnLCAndG9wUm93cyddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBOZXN0ZWRQYWdpbmF0ZUJ5ID0gKHR5cGVvZiBOZXN0ZWRQYWdpbmF0ZUJ5T3B0aW9ucylbbnVtYmVyXTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPiA9IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4gJiB7XG4gICAgLyoqIERlZmF1bHRzIHRvICdib3R0b21Sb3dzJy4gKi9cbiAgICBwYWdpbmF0ZUJ5PzogTmVzdGVkUGFnaW5hdGVCeTtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8UltdPiB8IFJbXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgbGV0IG9yZGVyZWQ6IFJbXTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5LnNlYXJjaCkubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbSk7XG4gICAgICAgIG9yZGVyZWQgPVxuICAgICAgICAgIGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlclxuICAgICAgICAgICAgPyBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICAgICAgICBtYXRjaGVzLFxuICAgICAgICAgICAgICAgIG9yZGVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBtYXRjaGVzO1xuICAgICAgfSBlbHNlIGlmIChoYXNFeHBsaWNpdFNvcnQgJiYgcXVlcnkub3JkZXIpIHtcbiAgICAgICAgb3JkZXJlZCA9IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMua2V5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmRlcmVkID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyXG4gICAgICAgID8gb3JkZXJlZC5maWx0ZXIocm93ID0+IGZpbHRlcihxdWVyeS5maWx0ZXJzLCByb3cpKVxuICAgICAgICA6IG9yZGVyZWQ7XG4gICAgICBjb25zdCBzdGFydElkeCA9IHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKiBxdWVyeS5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgICBjb25zdCBlbmRJZHggPSBzdGFydElkeCArIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBwYWdpbmF0ZWQgPSBmaWx0ZXJlZC5zbGljZShzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogcGFnaW5hdGVkLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXJOZXN0ZWQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxOZXN0ZWRIZWFkZXJSb3c8Uj5bXT4gfCBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgIGxldCByb3dzRnJvbURhdGE6IFJbXTtcbiAgICAvLyBUaGUgZnVzZSB3aWxsIHNlYXJjaCB0aGUgaW5kaXZpZHVhbCByb3dzXG4gICAgbGV0IGZ1c2U6IEZ1c2U8Uj47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgcm93c0Zyb21EYXRhID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tTmVzdGVkSGVhZGVycyhkYXRhKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKFxuICAgICAgICAgIHJvd3NGcm9tRGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8gU2VhcmNoLCB0aGVuIGZpbHRlciwgdGhlbiBzb3J0XG4gICAgICBsZXQgZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdTZWFyY2g6IFJbXSA9IHJvd3NGcm9tRGF0YTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgcm93c01hdGNoaW5nU2VhcmNoID0gZnVzZVxuICAgICAgICAgIC5zZWFyY2gocXVlcnkuc2VhcmNoKVxuICAgICAgICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm93c01hdGNoaW5nRmlsdGVyczogUltdID0gcm93c01hdGNoaW5nU2VhcmNoO1xuICAgICAgY29uc3QgZmlsdGVyVG9BcHBseSA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGlmIChmaWx0ZXJUb0FwcGx5KSB7XG4gICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMgPSByb3dzTWF0Y2hpbmdTZWFyY2guZmlsdGVyKHJvdyA9PlxuICAgICAgICAgIGZpbHRlclRvQXBwbHkocXVlcnkuZmlsdGVycywgcm93KSxcbiAgICAgICAgKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWRSb3dzVG9EaXNwbGF5OiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9IGRpZFJlc3RyaWN0RGlzcGxheWVkUm93c1xuICAgICAgICA/IFRhYmxlTmVzdGluZ0hlbHBlcnMuZmluZE5lc3RlZFJvd3NXaXRoSGVhZGVyc1RvS2VlcChcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICByb3dzTWF0Y2hpbmdGaWx0ZXJzLFxuICAgICAgICAgIClcbiAgICAgICAgOiBkYXRhO1xuICAgICAgY29uc3QgbWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyID0gVGFibGVOZXN0aW5nSGVscGVycy5jb3VudE5lc3RlZFJvd3MoXG4gICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgKTtcblxuICAgICAgbGV0IHNvcnRlZE5lc3RlZFJvd3M6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICAvLyBFeHBsaWNpdCBzb3J0IG92ZXJyaWRlIGhhcyBwcmlvcml0eSBvdmVyIGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gVGFibGVPcmRlckhlbHBlcnMuc29ydExvd0xldmVsTmVzdGVkUm93c1dpdGhIZWFkZXJzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgLy8gU29ydCBvbiB0aGUgRnVzZSByZWxldmFuY2Ugb3JkZXJcbiAgICAgICAgY29uc3QgaWRUb1NlYXJjaEluZGV4TWFwOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+ID1cbiAgICAgICAgICBUYWJsZU9yZGVySGVscGVycy5jcmVhdGVJZFRvU2VhcmNoSW5kZXhNYXAocm93c01hdGNoaW5nU2VhcmNoKTtcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9XG4gICAgICAgICAgVGFibGVPcmRlckhlbHBlcnMuc29ydE5lc3RlZFJvd3NXaXRoSGVhZGVyc0Jhc2VkT25TZWFyY2hNYXRjaGVzKFxuICAgICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICAgIGlkVG9TZWFyY2hJbmRleE1hcCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgc29ydCwgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNvcnRMb3dMZXZlbE5lc3RlZFJvd3NXaXRoSGVhZGVycyhcbiAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERvbid0IHNvcnQgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiB0byB1c2UgdG8gc29ydFxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gbmVzdGVkUm93c1RvRGlzcGxheTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnaW5hdGVkSGVhZGVyUm93czogTmVzdGVkSGVhZGVyUm93PFI+W10gPVxuICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLnBhZ2luYXRlTmVzdGVkSGVhZGVyUm93cyhcbiAgICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzLFxuICAgICAgICAgIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZSxcbiAgICAgICAgICBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgICApO1xuICAgICAgY29uc3QgaGFzSGVhZGVyczogYm9vbGVhbiA9IHBhZ2luYXRlZEhlYWRlclJvd3Muc29tZShcbiAgICAgICAgaGVhZGVyID0+IGhlYWRlci5oZWFkZXJUZXh0ICE9IG51bGwsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnM6IHBhZ2luYXRlZEhlYWRlclJvd3MsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgaGFzSGVhZGVyczogaGFzSGVhZGVycyxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgdGhlIHN0YXRlIG9iamVjdCByZWZlcmVuY2VzIGFzIHN0YWJsZSBhcyBwb3NzaWJsZSwgd2hpY2hcbiAqIGhlbHBzIEFuZ3VsYXIgcmVkdWNlIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuIEZvciBub3csIHNpbXBsZSBpc0VxdWFsKClcbiAqIGNoZWNrcyBhdCB0aGUgc3RhdGUncyB0b3AtbGV2ZWwga2V5cyBhcmUgc3VmZmljaWVudCB0byBkcmFtYXRpY2FsbHkgc3BlZWQgdXBcbiAqIHJlbmRlcmluZywgYnV0IGlmIG90aGVyIHBlcmZvcm1hbmNlIGlzc3VlcyBhcmlzZSwgd2UgY291bGQgaW1wbGVtZW50IG1vcmVcbiAqIGdyYW51bGFyIGNoZWNrcy9zdXJnaWNhbCB1cGRhdGVzIGFzIG5lZWRlZCAodGhlIHN0YXRlLnJlc3VsdCBiZWluZyB0aGUgbW9zdFxuICogbGlrZWx5IGNhbmRpZGF0ZSwgc2luY2UgbWFueSB0eXBlcyBvZiBzdGF0ZSB1cGRhdGVzIGFmZmVjdCBwYXJ0cyBvZiB0aGVcbiAqIHJlc3VsdCByb3dzKS5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICB0YXJnZXQ6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4pOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnF1ZXJ5LCBzb3VyY2UucXVlcnkpKSB7XG4gICAgdGFyZ2V0LnF1ZXJ5ID0gc291cmNlLnF1ZXJ5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQubG9hZCwgc291cmNlLmxvYWQpKSB7XG4gICAgdGFyZ2V0LmxvYWQgPSBzb3VyY2UubG9hZDtcbiAgfVxuXG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkRhdGEsIHNvdXJjZS5yZXN1bHQuY3N2RGF0YSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkRhdGEgPSBzb3VyY2UucmVzdWx0LmNzdkRhdGE7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUsIHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWUpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSA9IHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWU7XG4gIH1cbiAgaWYgKFxuICAgICFpc0VxdWFsKFxuICAgICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICApXG4gICkge1xuICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID0gc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQsIHNvdXJjZS5yZXN1bHQpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdCA9IHNvdXJjZS5yZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5kaXNwbGF5LCBzb3VyY2UuZGlzcGxheSkpIHtcbiAgICB0YXJnZXQuZGlzcGxheSA9IHNvdXJjZS5kaXNwbGF5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuc2VsZWN0aW9uLCBzb3VyY2Uuc2VsZWN0aW9uKSkge1xuICAgIHRhcmdldC5zZWxlY3Rpb24gPSBzb3VyY2Uuc2VsZWN0aW9uO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuY29sbGFwc2VTdGF0ZSwgc291cmNlLmNvbGxhcHNlU3RhdGUpKSB7XG4gICAgdGFyZ2V0LmNvbGxhcHNlU3RhdGUgPSBzb3VyY2UuY29sbGFwc2VTdGF0ZTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVmcmVzaFJlc3VsdFdpdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHlpZWxkIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVmZmVjdDogbnVsbCxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb3VyY2Uoc3RhdGUucXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pO1xuICAgIGlmIChUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmlzUGFnZU91dE9mQm91bmRzKHN0YXRlLCByZXN1bHQpKSB7XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPSAwO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVPcmRlckhlbHBlcnMudG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOlxuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJBZGQnOlxuICAgICAgLy8gUGFyZW50IGNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3Igc3Vic2NyaWJpbmcgYW5kIGFkZGluZyB0aGUgZmlsdGVyXG4gICAgICB5aWVsZCB7IHN0YXRlOiB7IC4uLnN0YXRlIH0sIGVmZmVjdDogbnVsbCB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG8gbm90IG91dHB1dCBjaGFuZ2VzIHdoZW4gdHJpZ2dlcmVkIGZyb20gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgICBhY3Rpb24ubmV3SW5kZXgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uTW92ZVRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5tb3ZlQ29sdW1uVG8oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuZW5hYmxlQWxsQ29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbldpZHRoKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLnJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5jbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy50b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlUm93Q29sbGFwc2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2xsYXBzZUhlbHBlcnMudG9nZ2xlUm93Q29sbGFwc2Uoc3RhdGUsIGFjdGlvbi5pZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVIZWFkZXJDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUFsbENvbGxhcHNlZCc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVBbGxDb2xsYXBzZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbiJdfQ==
|
|
1030
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXluRHhCO0FBem5ERCxXQUFpQixRQUFRO0lBMkNWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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cUJBQ2hDO2lCQUNGO2FBQ0YsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyx3QkFBd0I7WUFDM0IsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUNoRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxtQkFBbUI7WUFDdEIsTUFBTTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9ELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHNCQUFzQjtZQUN6QixNQUFNO2dCQUNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssb0JBQW9CO1lBQ3ZCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztnQkFDckQsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1lBQ0YsTUFBTTtLQUNUO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBGdXNlLCB7IElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdHNEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENvbm5lY3RhYmxlLFxuICBjb25uZWN0YWJsZSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlU2NhbixcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgc2hhcmUsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IHRvU2VudGVuY2VDYXNlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3NlbnRlbmNlLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBUYWJsZUNvbGxhcHNlSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9jb2xsYXBzZS1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9jb2x1bW4taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZURpc3BsYXlIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL2Rpc3BsYXktaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZU5lc3RpbmdIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL25lc3RpbmctaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZU9yZGVySGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9vcmRlci1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcGFnaW5hdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlUmVzdWx0SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9yZXN1bHQtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVNlYXJjaEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvc2VhcmNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWxlY3Rpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlbGVjdGlvbi1oZWxwZXJzJztcblxuZXhwb3J0IG5hbWVzcGFjZSBSaXZUYWJsZSB7XG4gIGV4cG9ydCB0eXBlIFJvdyA9IHsgaWQ6IHN0cmluZyB8IG51bWJlciB9O1xuICBleHBvcnQgdHlwZSBDb2x1bW4gPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIEZpbHRlcnMgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIEdyb3VwID0geyBrZXk6IHN0cmluZyB8IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBSaXZUYWJsZSdzIHN0YXRlIGFuZCB1c2VyIGFjdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczpcbiAgICpcbiAgICogLSBRdWVyeSAoZm9yIHRoaW5ncyBsaWtlIGZpbHRlcnMsIHBhZ2luYXRpb24sIHNlYXJjaCwgZXRjLilcbiAgICogLSBMb2FkaW5nIChmb3Igd2hldGhlciBvciBub3QgdGhlIHRhYmxlIGlzIGxvYWRpbmcgcm93IGRhdGEpXG4gICAqIC0gUmVzdWx0IChmb3IgdGhlIHJvdyBkYXRhIGl0c2VsZilcbiAgICogLSBEaXNwbGF5IChmb3IgdGhpbmdzIGxpa2UgY29sdW1uIGNvbmZpZ3VyYXRpb24pXG4gICAqIC0gU2VsZWN0aW9uIChmb3IgdHJhY2tpbmcgdGhlIHVzZXIncyByb3cgc2VsZWN0aW9ucylcbiAgICogLSBDb2xsYXBzZVN0YXRlIChmb3IgdHJhY2tpbmcgdGhlIHJvd3MvaGVhZGVycyB0aGF0IGFyZSBjb2xsYXBzZWQpXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZGF0YSBmbG93IGlzIHVuaWRpcmVjdGlvbmFsOiB0aGUgVUkgaXNzdWVzIGFjdGlvbnMsIHdoaWNoXG4gICAqIGFmZmVjdCB0aGUgc3RhdGUsIGFuZCB0aGUgc3RhdGUgZ2V0cyBwYXNzZWQgYmFjayB0byB0aGUgVUkgZm9yIGRpc3BsYXkuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogRnJvbSB0aGUgY29yZSBzdGF0ZSwgY2FsY3VsYXRlZCBzdGF0ZSBpcyBkZXJpdmVkIGFuZCBhZGRlZCB0byB0aGUgY29yZVxuICAgKiBzdGF0ZSAoZS5nLiwgZnJvbSB0aGUgcmF3IHNlbGVjdGlvbiBzdGF0ZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIGFsbCB0aGUgcm93cyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIGFyZSBzZWxlY3RlZCwgZXRjLikuXG4gICAqL1xuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5IC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLy8gUXVlcnkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBPcmRlckRpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuICBleHBvcnQgY29uc3QgcGFnZVNpemVzID0gWzI1LCA1MCwgMTAwLCAyNTBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBRdWVyeTxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPSB7XG4gICAgb3JkZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb247XG4gICAgICBjb2x1bW46IEM7XG4gICAgfSB8IG51bGw7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc2VhcmNoQ29sdW1uczogTWFwPEMsIGJvb2xlYW4+O1xuICAgIGZpbHRlcnM6IEYgfCBudWxsO1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgfTtcbiAgICBncm91cGluZzoge1xuICAgICAgdmlld01vcmVLZXk6IHN0cmluZyB8IG51bGw7XG4gICAgICBncm91cHNQZXJQYWdlOiBudW1iZXI7XG4gICAgICBjb3VudFBlckdyb3VwOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvLyBRdWVyeSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgUXVlcnlBY3Rpb248QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ29yZGVyQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUXVlcnk8QywgRj5bJ29yZGVyJ107XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JztcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJzsgY29sdW1uOiBDIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2gnXSB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaENvbHVtbnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJzQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2ZpbHRlcnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJBZGQnOyBjb2x1bW5LZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICdwYWdpbmF0aW9uQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3BhZ2luYXRpb24nXSB9XG4gICAgfCB7IHR5cGU6ICdncm91cGluZ0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+Wydncm91cGluZyddIH1cbiAgICB8IHsgdHlwZTogJ25leHRQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwYWdlQ2hhbmdlJzsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VTaXplQ2hhbmdlJzsgc2l6ZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOyBncm91cHNQZXJQYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnY291bnRQZXJHcm91cENoYW5nZSc7IGNvdW50UGVyR3JvdXA6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICd2aWV3TW9yZUtleUNoYW5nZSc7IHZpZXdNb3JlS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucycgfTtcblxuICAvLy8vLy8vLy8vXG4gIC8vIExvYWQgLy9cbiAgLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIExvYWQgPSB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogdW5rbm93biB8IG51bGw7XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vXG4gIC8vIFJlc3VsdCAvL1xuICAvLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlRGF0YTogUltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdWJHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gUmVzdWx0PFI+ICYge1xuICAgIC8qKlxuICAgICAqIEFueSBvdGhlciByZWxldmFudCBncm91cCBkYXRhLCB1c2VkIGZvciB0aGUgc3ViaGVhZGVyXG4gICAgICovXG4gICAgZ3JvdXBEYXRhOiBHO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBzcGxpdCBpbnRvIGdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwUmVzdWx0czogU3ViR3JvdXBSZXN1bHQ8UiwgRz5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGdyb3VwcyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbEdyb3VwQ291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgLypcbiAgICBOZXN0ZWRSZXN1bHRcbiAgICAgIE5lc3RlZEhlYWRlclJvd1xuICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIHN1YnJvd3NcbiAgICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIG5vIHN1YnJvd3NcbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyBoZWFkZXIgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzOiBOZXN0ZWRSb3c8Uj5bXTtcblxuICAgIC8vIFRoZSB0ZXh0IHRvIHNob3cgbmV4dCB0byB0aGUgdG9nZ2xlYWJsZSBjaGV2cm9uLCBvciBudWxsIGlmIHdlIGRvbid0IHNob3cgdGhlIGhlYWRlclxuICAgIGhlYWRlclRleHQ6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgcm93IGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93cz86IE5lc3RlZFJvdzxSPltdO1xuXG4gICAgLy8gVGhlIHJlbGV2YW50IGRhdGEgdXNlZCB0byBkaXNwbGF5IHRoaXMgcm93LlxuICAgIGRhdGE6IFI7XG4gIH07XG4gIC8qXG4gICAgTmVzdGVkIGhlYWRlciByb3dzIGFyZSB0b2dnbGVhYmxlIGhlYWRlcnMgZm9yIGdyb3VwcyBvZiByb3dzLlxuICAqL1xuICBleHBvcnQgdHlwZSBOZXN0ZWRSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBuZXN0ZWQgaW50byBcImhlYWRlcnMgd2l0aCBzdWJyb3dzXCIuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICpcbiAgICAgKiBPbmx5IGNvdW50cyByb3dzIGF0IHRoZSBib3R0b20gbGV2ZWwgb2YgbmVzdGluZy5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICBUaGlzIHR5cGUgYWxzbyBzdXBwb3J0cyBuZXN0ZWQgcm93cyB3aXRob3V0IGhlYWRlciByb3dzLCBzbyB0aGlzIHByb3BlcnR5XG4gICAgICBoZWxwcyB1cyB0ZWxsIHdoZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVycy5cbiAgICAqL1xuICAgIGhhc0hlYWRlcnM6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU291cmNlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IChcbiAgICBxdWVyeTogUXVlcnk8QywgRj4sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPFIsIEMsIEYsIEc+LFxuICApID0+IFByb21pc2U8UmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz4gfCBOZXN0ZWRSZXN1bHQ8Uj4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gRGlzcGxheSAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLy8gRGlzcGxheSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtblNldHRpbmdzPEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGtleTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIGNlbGxSb3dTcGFuOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBudW1iZXI7XG4gIH07XG5cbiAgLy8gRGlzcGxheSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgRGlzcGxheUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uPiA9XG4gICAgfCB7IHR5cGU6ICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc7IHBheWxvYWQ6IERpc3BsYXk8Qz5bJ2NvbHVtblNldHRpbmdzJ10gfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGZyZWV6ZTogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdmcmVlemVEaXZpZGVyJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgICAgICBuZXdJbmRleDogbnVtYmVyO1xuICAgICAgICBzb3VyY2U/OiAndGFibGVEcmFnJyB8ICdtZW51RHJhZyc7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2RyYWdEcm9wJyB8ICdleWVJY29uJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyZXNldFRvRGVmYXVsdENvbHVtbnMnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gU2VsZWN0aW9uIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbjxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogUlsnaWQnXSB8IG51bGw7XG4gIH0gJiAoXG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJztcbiAgICAgICAgaW5jbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnO1xuICAgICAgICBleGNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICApO1xuXG4gIC8vIFNlbGVjdGlvbiBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQWN0aW9uPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBTZWxlY3Rpb248Uj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdncm91cFNlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGNvbnRpZ3VvdXM6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdwYWdlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYWxsU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2xlYXInO1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZVN0YXRlPFIgZXh0ZW5kcyBSb3c+ID1cbiAgICB8IHtcbiAgICAgICAgZGVmYXVsdFRvOiAnY29sbGFwc2VkJztcbiAgICAgICAgZXhwYW5kZWRSb3dzOiBTZXQ8UlsnaWQnXT47XG4gICAgICAgIGV4cGFuZGVkSGVhZGVyczogU2V0PHN0cmluZz47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJztcbiAgICAgICAgY29sbGFwc2VkUm93czogU2V0PFJbJ2lkJ10+O1xuICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBTZXQ8c3RyaW5nPjtcbiAgICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sbGFwc2VBY3Rpb248UiBleHRlbmRzIFJvdz4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlUm93Q29sbGFwc2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZUhlYWRlckNvbGxhcHNlJztcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZUFsbENvbGxhcHNlZCc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIC8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gQ29tYmluZWQgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPjtcbiAgICBsb2FkOiBMb2FkO1xuICAgIHJlc3VsdDogUmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz4gfCBOZXN0ZWRSZXN1bHQ8Uj47XG4gICAgZGlzcGxheTogRGlzcGxheTxDPjtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjxSPjtcbiAgICBjb2xsYXBzZVN0YXRlOiBDb2xsYXBzZVN0YXRlPFI+O1xuICB9O1xuXG4gIC8vIENvbWJpbmVkIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID1cbiAgICB8IFF1ZXJ5QWN0aW9uPEMsIEY+XG4gICAgfCBEaXNwbGF5QWN0aW9uPEM+XG4gICAgfCBTZWxlY3Rpb25BY3Rpb248UiwgRz5cbiAgICB8IENvbGxhcHNlQWN0aW9uPFI+O1xuXG4gIGV4cG9ydCB0eXBlIEVmZmVjdCA9ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnO1xuXG4gIC8vIEZ1bGwgc3RhdGUgKGNvcmUgc3RhdGUgcGx1cyBwdXJlIGRlcml2YXRpb25zKSAvL1xuICBleHBvcnQgY29uc3QgQ29sdW1uc01heFNob3duOiBudW1iZXIgPSA1MDtcbiAgZXhwb3J0IGNvbnN0IENvbHVtbkRhdGFUeXBlcyA9IFtcbiAgICAnYWR2YW5jZWQnLFxuICAgICdjdXJyZW5jeScsXG4gICAgJ2RhdGUnLFxuICAgICdpY29uJyxcbiAgICAnbG9uZ1RleHQnLFxuICAgICdudW1iZXInLFxuICAgICdzaG9ydFRleHQnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBDb2x1bW5EYXRhVHlwZSA9ICh0eXBlb2YgQ29sdW1uRGF0YVR5cGVzKVtudW1iZXJdO1xuICBleHBvcnQgdHlwZSBDb2x1bW5BbGlnbm1lbnQgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gIGV4cG9ydCB0eXBlIENvbHVtbk1ldGFkYXRhID0ge1xuICAgIG9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbiAgICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgICBtaW5XaWR0aDogbnVtYmVyO1xuICAgIGRhdGFUeXBlOiBDb2x1bW5EYXRhVHlwZTtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBkZWZhdWx0UGlubmVkPzogYm9vbGVhbjtcbiAgICBjbGlja1ByZXZlbnREZWZhdWx0PzogYm9vbGVhbjtcbiAgICBjbGlja1N0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW47XG4gICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgYWx3YXlzVmlzaWJsZT86IGJvb2xlYW47XG4gICAgdG9vbHRpcEZvckhpZGVJY29uPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdWJSb3dzOiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgbmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBkaXNhYmxlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIGFsbENvbHVtbnM6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBjb2x1bW5zQXJlRnJlZXphYmxlOiBib29sZWFuO1xuICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiBib29sZWFuO1xuICAgICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlOiBib29sZWFuO1xuICAgICAgcm93c0FyZUdyYXllZDogYm9vbGVhbjtcbiAgICAgIGN1c3RvbVN1bW1hcnlSb3c6IGJvb2xlYW47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgZW5hYmxlZENvdW50OiBudW1iZXI7XG4gICAgICBoaWRlUGFnZVNpemVTZWxlY3RvcjogYm9vbGVhbjtcbiAgICAgIG5lZWRzUmlnaHRCb3JkZXI6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpID0+IGJvb2xlYW47XG4gICAgfTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgICAgaXNBbGxTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuYWdlciBpcyB3aGF0IHNldHMgdXAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIHRyYW5zbGF0ZXMgdXNlciBhY3Rpb25zXG4gICAqIChsaWtlIHBhZ2luYXRpb24gb3IgZmlsdGVyIGNoYW5nZXMsIGV0Yy4pIGludG8gbmV3IHJvdyBkYXRhIGJ5IGNhbGxpbmcgdGhlXG4gICAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IGFsc28gYXVnbWVudHMgdGhlIGNvcmUgc3RhdGUgd2l0aCBhZGRpdGlvbmFsIGRlcml2ZWRcbiAgICogc3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICBlZmZlY3RzOiBDb25uZWN0YWJsZTxFZmZlY3Q+O1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBpbml0aWFsU3RhdGU/OiBEZWVwUGFydGlhbDxDb3JlU3RhdGU8UiwgQywgRiwgRz4+O1xuICAgIHJvd0xpbms/OiAocm93OiBSLCBncm91cD86IEcpID0+IFJvd0xpbms7XG4gICAgY3N2Q2VsbEZvcm1hdHRlcj86IENzdkNlbGxGb3JtYXR0ZXI8UiwgQz47XG4gICAgY3N2R3JvdXBDZWxsRm9ybWF0dGVyPzogQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIsIEc+O1xuICAgIGNzdkZpbGVCYXNlbmFtZT86IHN0cmluZztcbiAgICBhbGxvd1NlbGVjdGlvbj86IFNlbGVjdGlvbkNvbmZpZ3VyYXRpb247XG4gICAgY29sdW1uc0FyZUZyZWV6YWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZUhpZGVhYmxlPzogYm9vbGVhbjtcbiAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU/OiBib29sZWFuO1xuICAgIGRlZmF1bHRDb2x1bW5TdGF0ZT86IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgcm93c0FyZUdyYXllZD86IGJvb2xlYW47XG4gICAgY3VzdG9tU3VtbWFyeVJvdz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCB0aGUgXCJSZXN1bHRzIHBlciBwYWdlXCIgbGFiZWwgYW5kIHBhZ2Utc2l6ZSBkcm9wZG93biBhcmVcbiAgICAgKiBoaWRkZW4uIFBhZ2UgbmF2aWdhdGlvbiBhcnJvd3MgYW5kIHBhZ2UgbnVtYmVycyByZW1haW4gdmlzaWJsZS5cbiAgICAgKi9cbiAgICBoaWRlUGFnZVNpemVTZWxlY3Rvcj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGFyZW50LWNvbnRyb2xsZWQgcm93IHNwYW5uaW5nLlxuICAgICAqIFJldHVybiAwIHRvIHN1cHByZXNzIHRoZSBjZWxsLCA+PTEgZm9yIGEgcmVhbCByb3dzcGFuLlxuICAgICAqIElmIG9taXR0ZWQgb3IgaW52YWxpZCwgZGVmYXVsdHMgdG8gMS5cbiAgICAgKi9cbiAgICBnZXRSb3dTcGFuRm9yQ2VsbD86IFJvd1NwYW5HZXR0ZXI8Qz47XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGLCBHPiB7XG4gICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHRhYmxlIHN0YXRlLlxuXG4gICAgY29uc3Qgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPiA9IG5ldyBNYXA8QywgYm9vbGVhbj4oXG4gICAgICBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKS5tYXAoKFtrZXksIG1ldGFkYXRhXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIG1ldGFkYXRhLnNlYXJjaGFibGUgPz8gdHJ1ZSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgY29uc3QgZGVmYXVsdFN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4gPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICBvcmRlcjogbnVsbCxcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgc2VhcmNoQ29sdW1uczogbmV3IE1hcChcbiAgICAgICAgICBBcnJheS5mcm9tKGNvbHVtbnMua2V5cygpKVxuICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gc2VhcmNoYWJsZUNvbHVtbk1hcC5nZXQoa2V5KSlcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IFtrZXksIHRydWVdKSxcbiAgICAgICAgKSxcbiAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgICAgICB9LFxuICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgIHZpZXdNb3JlS2V5OiBudWxsLFxuICAgICAgICAgIGdyb3Vwc1BlclBhZ2U6IDUsXG4gICAgICAgICAgY291bnRQZXJHcm91cDogMTAsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICB9LFxuICAgICAgbG9hZDogeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IG51bGwgfSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBjdXJyZW50UGFnZURhdGE6IFtdLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IDAsXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBjb2x1bW5TZXR0aW5nczogW10sXG4gICAgICAgIGNlbGxSb3dTcGFuOiAoX2k6IG51bWJlciwgX2NvbHVtbjogQykgPT4gMSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdGVkSW5pdGlhbFN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4gPSBkZWZhdWx0c0RlZXAoXG4gICAgICB7fSxcbiAgICAgIG9wdGlvbnM/LmluaXRpYWxTdGF0ZSxcbiAgICAgIGRlZmF1bHRTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPiA9IG5ldyBNYXA8QywgQyB8IHN0cmluZz4oXG4gICAgICBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKS5tYXAoKFtrZXksIG1ldGFkYXRhXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIHRvU2VudGVuY2VDYXNlKG1ldGFkYXRhLmRpc3BsYXlOYW1lID8/IGtleSksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtblN0YXRlID1cbiAgICAgIG9wdGlvbnM/LmRlZmF1bHRDb2x1bW5TdGF0ZSA/P1xuICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3M7XG5cbiAgICAvLyBXaXJlIHVwIHJlZHVjZWQgc3RhdGUgZnJvbSBhY3Rpb25zIGFuZCBpbml0aWFsIHN0YXRlLlxuICAgIGNvbnN0IGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgY29yZVN0YXRlOiBPYnNlcnZhYmxlPHtcbiAgICAgIHN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgfT4gPSBhY3Rpb25zLnBpcGUoXG4gICAgICBtZXJnZVNjYW48XG4gICAgICAgIEFjdGlvbjxSLCBDLCBGLCBHPixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QgfCBudWxsO1xuICAgICAgICB9XG4gICAgICA+KFxuICAgICAgICAoeyBzdGF0ZSB9LCBhY3Rpb24pID0+XG4gICAgICAgICAgZnJvbShcbiAgICAgICAgICAgIHJlZHVjZShcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1uU3RhdGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgIHsgc3RhdGU6IGRlZmF1bHRlZEluaXRpYWxTdGF0ZSwgZWZmZWN0OiBudWxsIH0sXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICAgc2hhcmUoe1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRXJyb3I6IGZhbHNlLFxuICAgICAgICByZXNldE9uQ29tcGxldGU6IGZhbHNlLFxuICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBjc3ZFeHBvcnRBbGxvd2VkID0gIShcbiAgICAgIG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsIHx8IG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3dcbiAgICApO1xuXG4gICAgLy8gQXVnbWVudCBzdGF0ZSB3aXRoIGRlcml2ZWQgc3RhdGUsIGFuZCBzdWJzY3JpYmUuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZS5waXBlKFxuICAgICAgICBtYXAoKHsgc3RhdGU6IHMgfSk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICAgICAgICdlbmFibGVkJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChzLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNjYW4oKHN0YWJsZSwgbmV3U3RhdGUpID0+IHN0YWJsZVN0YXRlKHN0YWJsZSwgbmV3U3RhdGUpKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICBjb25zdCBlZmZlY3RzOiBDb25uZWN0YWJsZTxFZmZlY3Q+ID0gY29ubmVjdGFibGUoXG4gICAgICBjb3JlU3RhdGUucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgIT09IG51bGwpLFxuICAgICAgICBtYXAoKHsgZWZmZWN0IH0pID0+IGVmZmVjdCBhcyBFZmZlY3QpLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIGVmZmVjdHMuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCBpbml0aWFsIHRhYmxlIHJvdyBkYXRhLlxuICAgIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlLCBlZmZlY3RzIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tR3JvdXBSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBHcm91cFJlc3VsdDxSLCBHPjtcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPjtcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+O1xuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgIHJlc29sdmVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPjtcbiAgfSk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3Qge1xuICAgICAgcyxcbiAgICAgIHN0YXRlUmVzdWx0LFxuICAgICAgc291cmNlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgcmVzb2x2ZWREaXNhYmxlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdID0gc3RhdGVSZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgcm93czogZ3JvdXAuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgPyBvcHRpb25zLnJvd0xpbmsocm93LCBncm91cC5ncm91cERhdGEpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICB9KSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAnZW5hYmxlZCcsXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBpZiAoZ3JvdXBDZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIGRhdGFbMF0ucHVzaCgnJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiBkYXRhU2V0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PlxuICAgICAgICBncm91cHMuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgZ3JvdXA6IGdyb3Vwcy5ncm91cERhdGEsXG4gICAgICAgIH0pKSxcbiAgICAgICkpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcm93SXRlbS5yb3c7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSAnc2VsZWN0aW9uJyAmJlxuICAgICAgICAgICFUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpXG4gICAgICAgIClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlciAmJiByb3dJdGVtLmdyb3VwKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgZ3JvdXBDZWxsRm9ybWF0dGVyKHJlY29yZCwgcm93SXRlbS5ncm91cCkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgcmVzb2x2ZWREaXNhYmxlZENvbHVtbnM6IHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSksXG4gICAgICBzZWxlY3Rpb246IGRlcml2ZWRGdWxsU3RhdGVTZWxlY3Rpb24ocywgb3B0aW9ucyksXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgLi4uc3RhdGVSZXN1bHQsXG4gICAgICAgIGlzR3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ3RhYmxlLWdyb3VwaW5nJyxcbiAgICAgICAgcm93R3JvdXBzLFxuICAgICAgICByb3dzOiByb3dHcm91cHMuZmxhdE1hcChncm91cCA9PiBncm91cC5yb3dzKSxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgICAgY3N2RmlsZW5hbWU6IFRhYmxlUmVzdWx0SGVscGVycy5nZXRDc3ZGaWxlbmFtZShcbiAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVGdWxsU3RhdGVGcm9tTmVzdGVkUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihwcm9wczoge1xuICAgIHM6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICBzdGF0ZVJlc3VsdDogTmVzdGVkUmVzdWx0PFI+O1xuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEYsIEc+O1xuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT47XG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgcmVzb2x2ZWRDb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgcmVzb2x2ZWREaXNhYmxlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1ucyxcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgb3B0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAob3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHJvdyBzcGFucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdGFibGVzIHdpdGggbmVzdGVkIGRhdGEuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSBzdW1tYXJ5IHJvd3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxOZXN0ZWRIZWFkZXJSb3dzOiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5lc3RlZFJvdyBvZiBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZU5lc3RlZEhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG5ld0Z1bGxSb3c6IEZ1bGxOZXN0ZWRIZWFkZXJSb3c8Uj4gPVxuICAgICAgICBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvbnZlcnRUb0Z1bGxOZXN0ZWRIZWFkZXJSb3coXG4gICAgICAgICAgbmVzdGVkUm93LFxuICAgICAgICAgIHMsXG4gICAgICAgICAgb3B0aW9ucz8ucm93TGluayxcbiAgICAgICAgKTtcbiAgICAgIGZ1bGxOZXN0ZWRIZWFkZXJSb3dzLnB1c2gobmV3RnVsbFJvdyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgaWYgKCFjc3ZFeHBvcnRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICBpZiAoIWNlbGxGb3JtYXR0ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNSZWd1bGFyUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnUmV0dXJuZWQgbm9uLW5lc3RlZCBDU1YgZGF0YSBmb3IgYSBuZXN0ZWQgd2l0aCBoZWFkZXIgcmVzdWx0IHRhYmxlJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICdlbmFibGVkJyxcbiAgICAgICk7XG4gICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgIGRhdGEucHVzaChmdWxsQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGNvbHVtbk5hbWVNYXAuZ2V0KGtleSkgPz8ga2V5KSk7XG5cbiAgICAgIGNvbnN0IGFsbFJvd3M6IFJbXSA9IFRhYmxlUmVzdWx0SGVscGVycy5nZXRBbGxSb3dzRnJvbVJlc3VsdChkYXRhU2V0KTtcblxuICAgICAgZm9yIChjb25zdCBjdXJyZW50Um93IG9mIGFsbFJvd3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1vZGUgPT09ICdzZWxlY3Rpb24nICYmXG4gICAgICAgICAgIVRhYmxlU2VsZWN0aW9uSGVscGVycy5pc1Jvd1NlbGVjdGVkKHMsIGN1cnJlbnRSb3cuaWQpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihjdXJyZW50Um93LCBjb2x1bW4pKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucyxcbiAgICAgIHF1ZXJ5OiBkZXJpdmVkRnVsbFN0YXRlUXVlcnkocyksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheSh7XG4gICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgcmVzb2x2ZWRDb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgIHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zOiByZXNvbHZlZERpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJyxcbiAgICAgICAgbmVzdGVkSGVhZGVyUm93czogZnVsbE5lc3RlZEhlYWRlclJvd3MsXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICByZXNvbHZlZERpc2FibGVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gIH0pOiBGdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHMsXG4gICAgICBzdGF0ZVJlc3VsdCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICBvcHRpb25zLFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCByb3dzID0gc3RhdGVSZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmsgPyBvcHRpb25zLnJvd0xpbmsocm93KSA6IG51bGwsXG4gICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgIGlzQ29sbGFwc2VkOiBmYWxzZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBjZWxsUm93U3BhbkNhY2hlID0gVGFibGVEaXNwbGF5SGVscGVycy5tZW1vaXplZENlbGxSb3dTcGFuKFxuICAgICAgcyxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgICBjb25zdCBjZWxsUm93U3BhbjogVmFsaWRSb3dTcGFuR2V0dGVyPEM+ID0gKHJvd0luZGV4LCBjb2x1bW4pID0+XG4gICAgICBjZWxsUm93U3BhbkNhY2hlPy5nZXQoY29sdW1uKT8uW3Jvd0luZGV4XSA/PyAxO1xuICAgIGNvbnN0IGhhc0FueVJvd1NwYW5zID0gY2VsbFJvd1NwYW5DYWNoZVxuICAgICAgPyBbLi4uY2VsbFJvd1NwYW5DYWNoZS52YWx1ZXMoKV0uc29tZShzcGFucyA9PlxuICAgICAgICAgIHNwYW5zLnNvbWUoc3BhbiA9PiBzcGFuID4gMSksXG4gICAgICAgIClcbiAgICAgIDogZmFsc2U7XG5cbiAgICBjb25zdCByZXNvbHZlZENvbHVtbktleXMgPSByZXNvbHZlZENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBrZXkpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgaWYgKCFjc3ZFeHBvcnRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICBpZiAoIWNlbGxGb3JtYXR0ZXIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0Jyk7XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGVSZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBub24tZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKFRhYmxlUmVzdWx0SGVscGVycy5pc05lc3RlZFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIG5lc3RlZCBDU1YgZGF0YSBmb3Igbm9uLW5lc3RlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAnZW5hYmxlZCcsXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhU2V0LmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzLCB7XG4gICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheShcbiAgICAgICAge1xuICAgICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1uczogcmVzb2x2ZWREaXNhYmxlZENvbHVtbnMsXG4gICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb2x1bW5zOiByZXNvbHZlZENvbHVtbnMubWFwKGNvbHVtbiA9PlxuICAgICAgICAgICAgaGFzQW55Um93U3BhbnMgPyB7IC4uLmNvbHVtbiwgb3JkZXJhYmxlOiBmYWxzZSB9IDogY29sdW1uLFxuICAgICAgICAgICksXG4gICAgICAgICAgY2VsbFJvd1NwYW46IGNlbGxSb3dTcGFuLFxuICAgICAgICAgIG5lZWRzUmlnaHRCb3JkZXI6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSByZXNvbHZlZENvbHVtbktleXMuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA9PT0gcmVzb2x2ZWRDb2x1bW5LZXlzLmxlbmd0aCAtIDEpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgcmlnaHRDb2xLZXkgPSByZXNvbHZlZENvbHVtbktleXNbaSArIDFdO1xuICAgICAgICAgICAgY29uc3Qgc3Bhbk9uUmlnaHQgPSBjZWxsUm93U3Bhbihyb3dJbmRleCwgcmlnaHRDb2xLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHNwYW5PblJpZ2h0ID4gMSB8fCBzcGFuT25SaWdodCA9PT0gMDtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIHNlbGVjdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbihzLCBvcHRpb25zKSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAuLi5zdGF0ZVJlc3VsdCxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25vcm1hbC1yb3dzJyxcbiAgICAgICAgcm93cyxcbiAgICAgICAgcm93c0FzR3JvdXA6IHtcbiAgICAgICAgICByb3dzLFxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICAgIGdyb3VwRGF0YTogeyBrZXk6ICcnIH0gYXMgRyxcbiAgICAgICAgfSxcbiAgICAgICAgY3N2RmlsZW5hbWU6IFRhYmxlUmVzdWx0SGVscGVycy5nZXRDc3ZGaWxlbmFtZShcbiAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlUXVlcnk8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHBhcnRpYWxRdWVyeTogUGFydGlhbDxGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J10+ID0ge30sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5xdWVyeSxcbiAgICAgIHBhZ2luYXRpb246IGRlcml2ZWRGdWxsU3RhdGVQYWdpbmF0aW9uKGNvcmVTdGF0ZSksXG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogVGFibGVTZWFyY2hIZWxwZXJzLmdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKFxuICAgICAgICBjb3JlU3RhdGUsXG4gICAgICAgICdub25lJyxcbiAgICAgICksXG4gICAgICAuLi5wYXJ0aWFsUXVlcnksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVQYWdpbmF0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddWydwYWdpbmF0aW9uJ10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgIHByZXZpb3VzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFByZXZpb3VzUGFnZShjb3JlU3RhdGUpLFxuICAgICAgcGFnZXM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZXMoY29yZVN0YXRlKSxcbiAgICAgIG5leHQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2UoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VDb3VudDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoY29yZVN0YXRlKSxcbiAgICAgIHNob3dDb250cm9sczogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlUm93U3RhcnQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZVJvd1N0YXJ0KGNvcmVTdGF0ZSksXG4gICAgICBwYWdlUm93RW5kOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VSb3dFbmQoY29yZVN0YXRlKSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZURpc3BsYXk8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIHByb3BzOiB7XG4gICAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT47XG4gICAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgICAgcmVzb2x2ZWRDb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICByZXNvbHZlZERpc2FibGVkQ29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz47XG4gICAgfSxcbiAgICBwYXJ0aWFsRGlzcGxheTogUGFydGlhbDxGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ2Rpc3BsYXknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvcmVTdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIHJlc29sdmVkRGlzYWJsZWRDb2x1bW5zLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICBvcHRpb25zLFxuICAgIH0gPSBwcm9wcztcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgIGRpc2FibGVkQ29sdW1uczogcmVzb2x2ZWREaXNhYmxlZENvbHVtbnMsXG4gICAgICBhbGxDb2x1bW5zOiBUYWJsZUNvbHVtbkhlbHBlcnMuZ2V0QWxsQ29sdW1ucyhcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgemVyb1N0YXRlTWVzc2FnZTogVGFibGVEaXNwbGF5SGVscGVycy5nZXRaZXJvU3RhdGVNZXNzYWdlKFxuICAgICAgICBjb3JlU3RhdGUsXG4gICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICApLFxuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlRnJlZXphYmxlLFxuICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiAhIW9wdGlvbnM/LmNvbHVtbnNBcmVIaWRlYWJsZSxcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICByb3dzQXJlR3JheWVkOiAhIW9wdGlvbnM/LnJvd3NBcmVHcmF5ZWQsXG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiAhIW9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3csXG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgZW5hYmxlZENvdW50OiByZXNvbHZlZENvbHVtbnMubGVuZ3RoLFxuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6ICEhb3B0aW9ucz8uaGlkZVBhZ2VTaXplU2VsZWN0b3IsXG4gICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAoKSA9PiBmYWxzZSxcbiAgICAgIC4uLnBhcnRpYWxEaXNwbGF5LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBjb3JlU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnc2VsZWN0aW9uJ10ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb3JlU3RhdGUuc2VsZWN0aW9uLFxuICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgaXNBbGxTZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQWxsU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDpcbiAgICAgICAgVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzQ3VycmVudFBhZ2VTZWxlY3RlZChjb3JlU3RhdGUpLFxuICAgICAgc2VsZWN0ZWRDb3VudDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNlbGVjdGVkQ291bnQoY29yZVN0YXRlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbWUgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IG1vc3QgdGFibGVzIHVzZSBhblxuICAgKiBpbi1tZW1vcnkgc291cmNlLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNtYWxsIGRhdGFzZXRzLCB3aGVuIFJpdlRhYmxlIGZlYXR1cmVzIGxpa2VcbiAgICogb3JkZXJpbmcgYW5kIHBhZ2luYXRpb24gYXJlIGRlc2lyZWQuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8UiBleHRlbmRzIFJvdz4gPSBPbWl0PFxuICAgIENvbHVtbk1ldGFkYXRhLFxuICAgICdvcmRlcmFibGUnXG4gID4gJiB7IG9yZGVyS2V5Pzoga2V5b2YgUiB9O1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4gJiB7XG4gICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Uj47XG4gICAgZmlsdGVyPzogKGZpbHRlcnM6IEYgfCBudWxsLCByb3c6IFIpID0+IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hlbiBgcXVlcnkub3JkZXJgIGlzIG51bGwgYW5kIHRoZXJlIGlzIG5vIGFjdGl2ZSBzZWFyY2gsIHJvd3MgYXJlIG9yZGVyZWRcbiAgICAgKiBieSB0aGlzIGNvbHVtbi4gSWYgb21pdHRlZCwgdGhlIGZpcnN0IGNvbHVtbiB3aXRoIGFuIGBvcmRlcktleWAgaXMgdXNlZFxuICAgICAqIChhc2NlbmRpbmcpLlxuICAgICAqL1xuICAgIGRlZmF1bHRTb3J0PzogeyBjb2x1bW46IEM7IGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gfTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBhIG5lc3RlZCB0YWJsZSdzIHBhZ2Ugc2l6ZSBhbmQgdG90YWwgY291bnQgY291bnQ6IGV2ZXJ5IGJvdHRvbS1sZXZlbFxuICAgKiByb3csIHdoaWNoIGNhbiBzcGxpdCBhIHJvdydzIHN1YnJvd3MgYWNyb3NzIHBhZ2VzLCBvciBlYWNoIHRvcC1sZXZlbCByb3dcbiAgICogdG9nZXRoZXIgd2l0aCBhbGwgb2YgaXRzIHN1YnJvd3MuXG4gICAqL1xuICBleHBvcnQgY29uc3QgTmVzdGVkUGFnaW5hdGVCeU9wdGlvbnMgPSBbJ2JvdHRvbVJvd3MnLCAndG9wUm93cyddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBOZXN0ZWRQYWdpbmF0ZUJ5ID0gKHR5cGVvZiBOZXN0ZWRQYWdpbmF0ZUJ5T3B0aW9ucylbbnVtYmVyXTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPiA9IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4gJiB7XG4gICAgLyoqIERlZmF1bHRzIHRvICdib3R0b21Sb3dzJy4gKi9cbiAgICBwYWdpbmF0ZUJ5PzogTmVzdGVkUGFnaW5hdGVCeTtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8UltdPiB8IFJbXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgbGV0IG9yZGVyZWQ6IFJbXTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5LnNlYXJjaCkubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbSk7XG4gICAgICAgIG9yZGVyZWQgPVxuICAgICAgICAgIGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlclxuICAgICAgICAgICAgPyBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICAgICAgICBtYXRjaGVzLFxuICAgICAgICAgICAgICAgIG9yZGVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBtYXRjaGVzO1xuICAgICAgfSBlbHNlIGlmIChoYXNFeHBsaWNpdFNvcnQgJiYgcXVlcnkub3JkZXIpIHtcbiAgICAgICAgb3JkZXJlZCA9IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMua2V5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmRlcmVkID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyXG4gICAgICAgID8gb3JkZXJlZC5maWx0ZXIocm93ID0+IGZpbHRlcihxdWVyeS5maWx0ZXJzLCByb3cpKVxuICAgICAgICA6IG9yZGVyZWQ7XG4gICAgICBjb25zdCBzdGFydElkeCA9IHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKiBxdWVyeS5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgICBjb25zdCBlbmRJZHggPSBzdGFydElkeCArIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBwYWdpbmF0ZWQgPSBmaWx0ZXJlZC5zbGljZShzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogcGFnaW5hdGVkLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXJOZXN0ZWQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxOZXN0ZWRIZWFkZXJSb3c8Uj5bXT4gfCBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU5lc3RlZE1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBjb2x1bW5zID0gVGFibGVTZWFyY2hIZWxwZXJzLm1hcmtDb2x1bW5zT3V0c2lkZUZ1c2VLZXlzVW5zZWFyY2hhYmxlKFxuICAgICAgY29sdW1ucyxcbiAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICk7XG4gICAgbGV0IGRhdGE6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgIGxldCByb3dzRnJvbURhdGE6IFJbXTtcbiAgICAvLyBUaGUgZnVzZSB3aWxsIHNlYXJjaCB0aGUgaW5kaXZpZHVhbCByb3dzXG4gICAgbGV0IGZ1c2U6IEZ1c2U8Uj47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgcm93c0Zyb21EYXRhID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tTmVzdGVkSGVhZGVycyhkYXRhKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKFxuICAgICAgICAgIHJvd3NGcm9tRGF0YSxcbiAgICAgICAgICBUYWJsZVNlYXJjaEhlbHBlcnMuZnVzZU9wdGlvbnNGb3JTZWFyY2hDb2x1bW5zKFxuICAgICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0U29ydCA9IHF1ZXJ5Lm9yZGVyICE9IG51bGwgJiYgb3JkZXJDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0U3BlYyA9ICgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5kZWZhdWx0U29ydCkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMuZ2V0KG9wdGlvbnMuZGVmYXVsdFNvcnQuY29sdW1uKT8ub3JkZXJLZXk7XG4gICAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXksIGRpcmVjdGlvbjogb3B0aW9ucy5kZWZhdWx0U29ydC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RPcmRlcmFibGUgPSBbLi4uY29sdW1ucy5lbnRyaWVzKCldLmZpbmQoXG4gICAgICAgICAgKFssIG1ldGFdKSA9PiBtZXRhLm9yZGVyS2V5ICE9IG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpcnN0T3JkZXJhYmxlPy5bMV0ub3JkZXJLZXk7XG4gICAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHsga2V5LCBkaXJlY3Rpb246ICdhc2MnIGFzIGNvbnN0IH0gOiBudWxsO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8gU2VhcmNoLCB0aGVuIGZpbHRlciwgdGhlbiBzb3J0XG4gICAgICBsZXQgZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdTZWFyY2g6IFJbXSA9IHJvd3NGcm9tRGF0YTtcbiAgICAgIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgcm93c01hdGNoaW5nU2VhcmNoID0gZnVzZVxuICAgICAgICAgIC5zZWFyY2gocXVlcnkuc2VhcmNoKVxuICAgICAgICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm93c01hdGNoaW5nRmlsdGVyczogUltdID0gcm93c01hdGNoaW5nU2VhcmNoO1xuICAgICAgY29uc3QgZmlsdGVyVG9BcHBseSA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGlmIChmaWx0ZXJUb0FwcGx5KSB7XG4gICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMgPSByb3dzTWF0Y2hpbmdTZWFyY2guZmlsdGVyKHJvdyA9PlxuICAgICAgICAgIGZpbHRlclRvQXBwbHkocXVlcnkuZmlsdGVycywgcm93KSxcbiAgICAgICAgKTtcblxuICAgICAgICBkaWRSZXN0cmljdERpc3BsYXllZFJvd3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWRSb3dzVG9EaXNwbGF5OiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9IGRpZFJlc3RyaWN0RGlzcGxheWVkUm93c1xuICAgICAgICA/IFRhYmxlTmVzdGluZ0hlbHBlcnMuZmluZE5lc3RlZFJvd3NXaXRoSGVhZGVyc1RvS2VlcChcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICByb3dzTWF0Y2hpbmdGaWx0ZXJzLFxuICAgICAgICAgIClcbiAgICAgICAgOiBkYXRhO1xuICAgICAgY29uc3QgbWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyID0gVGFibGVOZXN0aW5nSGVscGVycy5jb3VudE5lc3RlZFJvd3MoXG4gICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgKTtcblxuICAgICAgbGV0IHNvcnRlZE5lc3RlZFJvd3M6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICAvLyBFeHBsaWNpdCBzb3J0IG92ZXJyaWRlIGhhcyBwcmlvcml0eSBvdmVyIGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gVGFibGVPcmRlckhlbHBlcnMuc29ydExvd0xldmVsTmVzdGVkUm93c1dpdGhIZWFkZXJzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5zZWFyY2gpIHtcbiAgICAgICAgLy8gU29ydCBvbiB0aGUgRnVzZSByZWxldmFuY2Ugb3JkZXJcbiAgICAgICAgY29uc3QgaWRUb1NlYXJjaEluZGV4TWFwOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+ID1cbiAgICAgICAgICBUYWJsZU9yZGVySGVscGVycy5jcmVhdGVJZFRvU2VhcmNoSW5kZXhNYXAocm93c01hdGNoaW5nU2VhcmNoKTtcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9XG4gICAgICAgICAgVGFibGVPcmRlckhlbHBlcnMuc29ydE5lc3RlZFJvd3NXaXRoSGVhZGVyc0Jhc2VkT25TZWFyY2hNYXRjaGVzKFxuICAgICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICAgIGlkVG9TZWFyY2hJbmRleE1hcCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgc29ydCwgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNvcnRMb3dMZXZlbE5lc3RlZFJvd3NXaXRoSGVhZGVycyhcbiAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERvbid0IHNvcnQgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiB0byB1c2UgdG8gc29ydFxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gbmVzdGVkUm93c1RvRGlzcGxheTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnaW5hdGVkSGVhZGVyUm93czogTmVzdGVkSGVhZGVyUm93PFI+W10gPVxuICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLnBhZ2luYXRlTmVzdGVkSGVhZGVyUm93cyhcbiAgICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzLFxuICAgICAgICAgIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZSxcbiAgICAgICAgICBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgICAgIG9wdGlvbnM/LnBhZ2luYXRlQnkgPz8gJ2JvdHRvbVJvd3MnLFxuICAgICAgICApO1xuICAgICAgY29uc3QgaGFzSGVhZGVyczogYm9vbGVhbiA9IHBhZ2luYXRlZEhlYWRlclJvd3Muc29tZShcbiAgICAgICAgaGVhZGVyID0+IGhlYWRlci5oZWFkZXJUZXh0ICE9IG51bGwsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnM6IHBhZ2luYXRlZEhlYWRlclJvd3MsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgaGFzSGVhZGVyczogaGFzSGVhZGVycyxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID1cbiAgICAgIFRhYmxlQ29sdW1uSGVscGVycy5jcmVhdGVDb2x1bW5NZXRhZGF0YU1hcChjb2x1bW5zKTtcblxuICAgIC8qXG4gICAgICBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgICAgdGFibGUgaGVhZGVyIHNob3dzIHRoZSBzb3J0IGluZGljYXRvciBmcm9tIHRoZSBzdGFydC5cbiAgICAqL1xuICAgIG9wdGlvbnMgPSBUYWJsZU9yZGVySGVscGVycy5zZWVkRGVmYXVsdFNvcnRPcHRpb24ob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgdGhlIHN0YXRlIG9iamVjdCByZWZlcmVuY2VzIGFzIHN0YWJsZSBhcyBwb3NzaWJsZSwgd2hpY2hcbiAqIGhlbHBzIEFuZ3VsYXIgcmVkdWNlIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuIEZvciBub3csIHNpbXBsZSBpc0VxdWFsKClcbiAqIGNoZWNrcyBhdCB0aGUgc3RhdGUncyB0b3AtbGV2ZWwga2V5cyBhcmUgc3VmZmljaWVudCB0byBkcmFtYXRpY2FsbHkgc3BlZWQgdXBcbiAqIHJlbmRlcmluZywgYnV0IGlmIG90aGVyIHBlcmZvcm1hbmNlIGlzc3VlcyBhcmlzZSwgd2UgY291bGQgaW1wbGVtZW50IG1vcmVcbiAqIGdyYW51bGFyIGNoZWNrcy9zdXJnaWNhbCB1cGRhdGVzIGFzIG5lZWRlZCAodGhlIHN0YXRlLnJlc3VsdCBiZWluZyB0aGUgbW9zdFxuICogbGlrZWx5IGNhbmRpZGF0ZSwgc2luY2UgbWFueSB0eXBlcyBvZiBzdGF0ZSB1cGRhdGVzIGFmZmVjdCBwYXJ0cyBvZiB0aGVcbiAqIHJlc3VsdCByb3dzKS5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICB0YXJnZXQ6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4pOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnF1ZXJ5LCBzb3VyY2UucXVlcnkpKSB7XG4gICAgdGFyZ2V0LnF1ZXJ5ID0gc291cmNlLnF1ZXJ5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQubG9hZCwgc291cmNlLmxvYWQpKSB7XG4gICAgdGFyZ2V0LmxvYWQgPSBzb3VyY2UubG9hZDtcbiAgfVxuXG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkRhdGEsIHNvdXJjZS5yZXN1bHQuY3N2RGF0YSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkRhdGEgPSBzb3VyY2UucmVzdWx0LmNzdkRhdGE7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUsIHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWUpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSA9IHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWU7XG4gIH1cbiAgaWYgKFxuICAgICFpc0VxdWFsKFxuICAgICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICApXG4gICkge1xuICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID0gc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQsIHNvdXJjZS5yZXN1bHQpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdCA9IHNvdXJjZS5yZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5kaXNwbGF5LCBzb3VyY2UuZGlzcGxheSkpIHtcbiAgICB0YXJnZXQuZGlzcGxheSA9IHNvdXJjZS5kaXNwbGF5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuc2VsZWN0aW9uLCBzb3VyY2Uuc2VsZWN0aW9uKSkge1xuICAgIHRhcmdldC5zZWxlY3Rpb24gPSBzb3VyY2Uuc2VsZWN0aW9uO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuY29sbGFwc2VTdGF0ZSwgc291cmNlLmNvbGxhcHNlU3RhdGUpKSB7XG4gICAgdGFyZ2V0LmNvbGxhcHNlU3RhdGUgPSBzb3VyY2UuY29sbGFwc2VTdGF0ZTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVmcmVzaFJlc3VsdFdpdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHlpZWxkIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVmZmVjdDogbnVsbCxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb3VyY2Uoc3RhdGUucXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pO1xuICAgIGlmIChUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmlzUGFnZU91dE9mQm91bmRzKHN0YXRlLCByZXN1bHQpKSB7XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPSAwO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVPcmRlckhlbHBlcnMudG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOlxuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHRUbzogJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJBZGQnOlxuICAgICAgLy8gUGFyZW50IGNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3Igc3Vic2NyaWJpbmcgYW5kIGFkZGluZyB0aGUgZmlsdGVyXG4gICAgICB5aWVsZCB7IHN0YXRlOiB7IC4uLnN0YXRlIH0sIGVmZmVjdDogbnVsbCB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG8gbm90IG91dHB1dCBjaGFuZ2VzIHdoZW4gdHJpZ2dlcmVkIGZyb20gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgICBhY3Rpb24ubmV3SW5kZXgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uTW92ZVRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5tb3ZlQ29sdW1uVG8oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuZW5hYmxlQWxsQ29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbldpZHRoKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLnJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5jbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy50b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlUm93Q29sbGFwc2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2xsYXBzZUhlbHBlcnMudG9nZ2xlUm93Q29sbGFwc2Uoc3RhdGUsIGFjdGlvbi5pZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVIZWFkZXJDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUFsbENvbGxhcHNlZCc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVBbGxDb2xsYXBzZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbiJdfQ==
|