igniteui-angular 15.1.0 → 15.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/grids/filtering/base/grid-filtering-row.component.mjs +5 -5
- package/esm2020/lib/services/excel/excel-files.mjs +2 -2
- package/esm2020/lib/services/exporter-common/base-export-service.mjs +6 -3
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +2 -8
- package/fesm2015/igniteui-angular.mjs +11 -14
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +11 -14
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -274,7 +274,7 @@ export class IgxBaseExporter {
|
|
|
274
274
|
const ownerCols = this._ownersMap.get(owner).columns;
|
|
275
275
|
if (record.type !== ExportRecordType.HeaderRecord) {
|
|
276
276
|
const columns = ownerCols
|
|
277
|
-
.filter(c => c.headerType
|
|
277
|
+
.filter(c => c.headerType === HeaderType.ColumnHeader && !c.skip)
|
|
278
278
|
.sort((a, b) => a.startIndex - b.startIndex)
|
|
279
279
|
.sort((a, b) => a.pinnedIndex - b.pinnedIndex);
|
|
280
280
|
record.data = columns.reduce((a, e) => {
|
|
@@ -749,7 +749,10 @@ export class IgxBaseExporter {
|
|
|
749
749
|
return;
|
|
750
750
|
}
|
|
751
751
|
let previousKey = '';
|
|
752
|
-
const firstCol = this._ownersMap.get(DEFAULT_OWNER).columns
|
|
752
|
+
const firstCol = this._ownersMap.get(DEFAULT_OWNER).columns
|
|
753
|
+
.filter(c => c.headerType === HeaderType.ColumnHeader && !c.skip)
|
|
754
|
+
.sort((a, b) => a.startIndex - b.startIndex)
|
|
755
|
+
.sort((a, b) => a.pinnedIndex - b.pinnedIndex)[0].field;
|
|
753
756
|
for (const record of records) {
|
|
754
757
|
let recordVal = record.value;
|
|
755
758
|
const hierarchicalOwner = setGridParent ? GRID_PARENT : `${GRID_CHILD}${++this.rowIslandCounter}`;
|
|
@@ -1050,4 +1053,4 @@ export class IgxBaseExporter {
|
|
|
1050
1053
|
this.rowIslandCounter = 0;
|
|
1051
1054
|
}
|
|
1052
1055
|
}
|
|
1053
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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QyxZQUFZO29CQUNuQyxVQUFVLEVBQUUsQ0FBQztvQkFDYixLQUFLLEVBQUUsQ0FBQztpQkFDWCxDQUFDO2dCQUVGLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDekQsS0FBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFDO2dCQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUU7b0JBQzVJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDcEM7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUE0QixDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lVmFsdWUsIElCYXNlRXZlbnRBcmdzLCByZXNvbHZlTmVzdGVkUGF0aCwgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuL2V4cG9ydC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSB9IGZyb20gJy4vZXhwb3J0ZXItb3B0aW9ucy1iYXNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uLy4uL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0SGllcmFyY2h5LCBpc0hpZXJhcmNoeU1hdGNoIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL29wZXJhdGlvbnMnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIEZvcm1hdFdpZHRoLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldExvY2FsZURhdGVGb3JtYXQsIGdldExvY2FsZURhdGVUaW1lRm9ybWF0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSVBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuLi8uLi9ncmlkcy9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2VudW1zJztcblxuZXhwb3J0IGVudW0gRXhwb3J0UmVjb3JkVHlwZSB7XG4gICAgR3JvdXBlZFJlY29yZCA9ICdHcm91cGVkUmVjb3JkJyxcbiAgICBUcmVlR3JpZFJlY29yZCA9ICdUcmVlR3JpZFJlY29yZCcsXG4gICAgRGF0YVJlY29yZCA9ICdEYXRhUmVjb3JkJyxcbiAgICBIaWVyYXJjaGljYWxHcmlkUmVjb3JkID0gJ0hpZXJhcmNoaWNhbEdyaWRSZWNvcmQnLFxuICAgIEhlYWRlclJlY29yZCA9ICdIZWFkZXJSZWNvcmQnLFxuICAgIFN1bW1hcnlSZWNvcmQgPSAnU3VtbWFyeVJlY29yZCcsXG4gICAgUGl2b3RHcmlkUmVjb3JkID0gJ1Bpdm90R3JpZFJlY29yZCdcbn1cblxuZXhwb3J0IGVudW0gSGVhZGVyVHlwZSB7XG4gICAgUm93SGVhZGVyID0gJ1Jvd0hlYWRlcicsXG4gICAgQ29sdW1uSGVhZGVyID0gJ0NvbHVtbkhlYWRlcicsXG4gICAgTXVsdGlSb3dIZWFkZXIgPSAnTXVsdGlSb3dIZWFkZXInLFxuICAgIE11bHRpQ29sdW1uSGVhZGVyID0gJ011bHRpQ29sdW1uSGVhZGVyJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0UmVjb3JkIHtcbiAgICBkYXRhOiBhbnk7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlO1xuICAgIG93bmVyPzogc3RyaW5nIHwgR3JpZFR5cGU7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBzdW1tYXJ5S2V5Pzogc3RyaW5nO1xuICAgIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogSGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEdSSURfUk9PVF9TVU1NQVJZID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG5leHBvcnQgY29uc3QgR1JJRF9QQVJFTlQgPSAnZ3JpZC1wYXJlbnQnO1xuZXhwb3J0IGNvbnN0IEdSSURfTEVWRUxfQ09MID0gJ0dSSURfTEVWRUxfQ09MJztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcbmNvbnN0IEdSSURfQ0hJTEQgPSAnZ3JpZC1jaGlsZC0nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRTdW1tYXJpZXM6IGJvb2xlYW4gPSBmYWxzZVxuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgc3VtbWFyaWVzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG4gICAgcHJpdmF0ZSByb3dJc2xhbmRDb3VudGVyID0gLTE7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMgPSAgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDEgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5O1xuXG4gICAgICAgIHRoaXMuYWRkTGV2ZWxDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZ3JpZCk7XG4gICAgICAgIHRoaXMuYWRkTGV2ZWxEYXRhKCk7XG4gICAgICAgIHRoaXMuYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkKTtcbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEodGhpcy5mbGF0UmVjb3JkcywgZ3JpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGZvciBleHBvcnRpbmcgYW55IGtpbmQgb2YgYXJyYXkgZGF0YS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmFycmF5Rm9yRXhwb3J0LCB0aGlzLmV4cG9ydE9wdGlvbnMpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnREYXRhKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIG9wdGlvbnMgcHJvdmlkZWQhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSBkYXRhLm1hcChkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEocmVjb3Jkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uOiBhbnksIHJvb3RQYXJlbnROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW3Jvd0RpbWVuc2lvbi5tZW1iZXJOYW1lXSA9IHJvb3RQYXJlbnROYW1lO1xuICAgICAgICBpZiAocm93RGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsLCByb290UGFyZW50TmFtZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHM6IElFeHBvcnRSZWNvcmRbXSwgZ3JpZD86IEdyaWRUeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vd25lcnNNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3Jkc0RhdGEgPSByZWNvcmRzLmZpbHRlcihyID0+IHIudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkKS5tYXAociA9PiByLmRhdGEpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEV4cG9ydFV0aWxpdGllcy5nZXRLZXlzRnJvbURhdGEocmVjb3Jkc0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IGtleXMubWFwKChrKSA9PlxuICAgICAgICAgICAgICAgICh7IGhlYWRlcjogaywgZmllbGQ6IGssIHNraXA6IGZhbHNlLCBoZWFkZXJUeXBlOiBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciwgbGV2ZWw6IDAsIGNvbHVtblNwYW46IDEgfSkpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGhzID0gbmV3IEFycmF5PG51bWJlcj4oa2V5cy5sZW5ndGgpLmZpbGwoREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uV2lkdGhzLFxuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgICAgICBtYXhMZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBtYXBSZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNob3VsZFJlb3JkZXJDb2x1bW5zID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWFwUmVjb3JkXSBvZiB0aGlzLl9vd25lcnNNYXApIHtcbiAgICAgICAgICAgIGxldCBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgICAgIGxldCBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50ID0gMTtcbiAgICAgICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IG1hcFJlY29yZC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcblxuICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwb3J0QXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29sdW1uJyArIGNvbHVtbnNXaXRob3V0SGVhZGVyQ291bnQrKyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBrZXkgPT09IERFRkFVTFRfT1dORVIgPyBncmlkIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uRXhwb3J0QXJncyA9IG5ldyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MoY29sdW1uRXhwb3J0QXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRXhwb3J0aW5nLmVtaXQobmV3Q29sdW1uRXhwb3J0QXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcEZvcm1hdHRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3Muc2tpcEZvcm1hdHRlcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q29sdW1uRXhwb3J0QXJncy51c2VyU2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5leHBvcnRJbmRleCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY29sdW1uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8PSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW4sIG1hcFJlY29yZCwgY29sdW1uLmNvbHVtblNwYW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub25Ta2lwcGVkQ29sdW1ucyA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uU2tpcHBlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5nZXQoa2V5KS5tYXhMZXZlbCA9IG5vblNraXBwZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IGIubGV2ZWwgLSBhLmxldmVsKVswXS5sZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0ICYmIHRoaXMuX3NvcnQuZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gLT0gc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudDtcblxuICAgICAgICAgICAgLy8gUmVvcmRlciBjb2x1bW5zIG9ubHkgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYXNzaWduZWQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleCBkdXJpbmcgY29sdW1uRXhwb3J0aW5nIGV2ZW50XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVvcmRlckNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBtYXBSZWNvcmQuY29sdW1ucyA9IHRoaXMucmVvcmRlckNvbHVtbnMobWFwUmVjb3JkLmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gbmV3IEFycmF5PElFeHBvcnRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbERhdGEgPSByZWNvcmRzWzBdPy5kYXRhO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxEYXRhID0gRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEoYWN0dWFsRGF0YSk7XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHJlY29yZHMubGVuZ3RoLCAxMDAsIChpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByZWNvcmRzW2ldO1xuICAgICAgICAgICAgdGhpcy5leHBvcnRSb3coZGF0YVRvRXhwb3J0LCByb3csIGksIGlzU3BlY2lhbERhdGEpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhVG9FeHBvcnQsIHRoaXMub3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uOiBJQ29sdW1uSW5mbywgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCwgc3BhbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW4uaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXBDaGlsZHJlbiA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGMuY29sdW1uR3JvdXBQYXJlbnQgPT09IGNvbHVtbi5jb2x1bW5Hcm91cCk7XG5cbiAgICAgICAgICAgIGNvbHVtbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaChjZ2MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjZ2MuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uU3BhbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5Hcm91cFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKGNnYywgbWFwUmVjb3JkLCBjZ2MuY29sdW1uU3Bhbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsICYmIGMuY29sdW1uR3JvdXAgPT09IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudClbMF07XG4gICAgICAgIGlmICh0YXJnZXRDb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0Q29sLmNvbHVtblNwYW4gLT0gc3BhbjtcblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnModGFyZ2V0Q29sLCBtYXBSZWNvcmQsIHNwYW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtblNwYW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb2wuc2tpcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydFJvdyhkYXRhOiBJRXhwb3J0UmVjb3JkW10sIHJlY29yZDogSUV4cG9ydFJlY29yZCwgaW5kZXg6IG51bWJlciwgaXNTcGVjaWFsRGF0YTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWlzU3BlY2lhbERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyID0gcmVjb3JkLm93bmVyID09PSB1bmRlZmluZWQgPyBERUZBVUxUX09XTkVSIDogcmVjb3JkLm93bmVyO1xuICAgICAgICAgICAgY29uc3Qgb3duZXJDb2xzID0gdGhpcy5fb3duZXJzTWFwLmdldChvd25lcikuY29sdW1ucztcblxuICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvd25lckNvbHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuUm93SGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aVJvd0hlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgcmVjb3JkLmRhdGEgPSBjb2x1bW5zLnJlZHVjZSgoYSwgZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhd1ZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgocmVjb3JkLmRhdGEsIGUuZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRBcHBseUZvcm1hdHRlciA9IGUuZm9ybWF0dGVyICYmICFlLnNraXBGb3JtYXR0ZXIgJiYgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09ICdkYXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShyYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNob3VsZEFwcGx5Rm9ybWF0dGVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgPSBuZXcgRGF0ZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuZGF0YVR5cGUgPT09ICdzdHJpbmcnICYmIHJhd1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gcmF3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gc2hvdWxkQXBwbHlGb3JtYXR0ZXIgPyBlLmZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQaXZvdEdyaWRFeHBvcnQgJiYgIWlzTmFOKHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gcGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFbZS5maWVsZF0gPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSGVhZGVycyA9IG93bmVyQ29scy5maWx0ZXIoYyA9PiBjLnNraXApLm1hcChjID0+IGMuaGVhZGVyID8gYy5oZWFkZXIgOiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IHJlY29yZC5kYXRhLmZpbHRlcihkID0+IGZpbHRlcmVkSGVhZGVycy5pbmRleE9mKGQpID09PSAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgcm93RGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yb3dFeHBvcnRpbmcuZW1pdChyb3dBcmdzKTtcblxuICAgICAgICBpZiAoIXJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVvcmRlckNvbHVtbnMoY29sdW1uczogSUNvbHVtbkluZm9bXSk6IElDb2x1bW5JbmZvW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBmaWx0ZXJlZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzcGVjaWZpY0luZGljZXNDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhaXNOYU4oY29sLmV4cG9ydEluZGV4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLGIpID0+IGEuZXhwb3J0SW5kZXggLSBiLmV4cG9ydEluZGV4KTtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXgpO1xuXG4gICAgICAgIHNwZWNpZmljSW5kaWNlc0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnNwbGljZShmaWx0ZXJlZENvbHVtbnMuaW5kZXhPZihjb2wpLCAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVvcmRlcmVkQ29sdW1ucyA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIGlmIChzcGVjaWZpY0luZGljZXNDb2x1bW5zLmxlbmd0aCA+IE1hdGgubWF4KC4uLmluZGljZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5jb25jYXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXMuZm9yRWFjaCgoaSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnB1c2goc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrID0gaTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW5ndGggJiYgcmVvcmRlcmVkQ29sdW1uc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sdW1uc1trXSA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJlZENvbHVtbnNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2ldID0gZmlsdGVyZWRDb2x1bW5zLnNwbGljZSgwLCAxKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVvcmRlcmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgbGV0IHNldFN1bW1hcnlPd25lciA9IGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnaWd4LXBpdm90LWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpZ3gtdHJlZS1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRyZWVHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDAgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHkpIHtcbiAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlksIDAsIGZhbHNlLCBncmlkKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBncmlkLmZpbHRlcmVkU29ydGVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkRGF0YSA9IE9iamVjdC5mcm9tRW50cmllcyhyZWNvcmQuYWdncmVnYXRpb25WYWx1ZXMpO1xuICAgICAgICAgICAgcmVjb3JkLmRpbWVuc2lvblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsS2V5ID0gdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmVjb3JkRGF0YVthY3R1YWxLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZERhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlBpdm90R3JpZFJlY29yZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHBpdm90R3JpZFJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwuc29ydChkYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogYW55W10pIHtcbiAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IHRoaXMuX293bmVyc01hcC5nZXQoZ3JpZCkuY29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhlbnRyeSkgPyBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQoZW50cnkpIDogZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFXaXRob3V0Q2hpbGRyZW4gPSBPYmplY3Qua2V5cyhlbnRyeSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gY29sdW1uRmllbGRzLmluY2x1ZGVzKGspKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gZW50cnlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVdpdGhvdXRDaGlsZHJlbixcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGdyaWQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXI6IEdSSURfUEFSRU5UXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGllcmFyY2hpY2FsR3JpZFJlY29yZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGlzbGFuZC5wcmltYXJ5S2V5ID8gZW50cnlbaXNsYW5kLnByaW1hcnlLZXldIDogZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZEtleTogaXNsYW5kLmtleVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlSZWNvcmREYXRhID0gdGhpcy5wcmVwYXJlSXNsYW5kRGF0YShpc2xhbmQsIGlzbGFuZEdyaWQsIGVudHJ5W2lzbGFuZC5rZXldKSB8fCBbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShpc2xhbmQsIGtleVJlY29yZERhdGEsIGV4cGFuc2lvblN0YXRlVmFsLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVN1bW1hcmllcyhncmlkOiBhbnkpOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+PiB7XG4gICAgICAgIGxldCBzdW1tYXJpZXMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4oKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4cG9ydFN1bW1hcmllcyAmJiBncmlkLnN1bW1hcnlTZXJ2aWNlLnN1bW1hcnlDYWNoZU1hcC5zaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3VtbWFyeUNhY2hlTWFwID0gZ3JpZC5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5Q2FjaGVNYXA7XG5cbiAgICAgICAgICAgIHN3aXRjaChncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLmNoaWxkTGV2ZWxzT25seTpcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShHUklEX1JPT1RfU1VNTUFSWSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seTpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayBvZiBzdW1tYXJ5Q2FjaGVNYXAua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gR1JJRF9ST09UX1NVTU1BUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdW1tYXJpZXMgPSBzdW1tYXJ5Q2FjaGVNYXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kOiBhbnksIGlzbGFuZEdyaWQ6IEdyaWRUeXBlLCBkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgaWYgKGlzbGFuZEdyaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc2xhbmRHcmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZEdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZEdyaWQuc29ydFN0cmF0ZWd5LCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNGaWx0ZXJpbmcgPSAoaXNsYW5kLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgICAgIGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmICghc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucywgaXNsYW5kLnNvcnRTdHJhdGVneSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kOiBhbnksXG4gICAgICAgIGNoaWxkRGF0YTogYW55W10sIGV4cGFuc2lvblN0YXRlVmFsOiBib29sZWFuLCBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gO1xuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChpc2xhbmQpLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGNvbHVtbkhlYWRlciA9IGNvbHVtbkxpc3RcbiAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcilcbiAgICAgICAgICAgIC5tYXAoY29sID0+IGNvbC5oZWFkZXIgPyBjb2wuaGVhZGVyIDogY29sLmZpZWxkKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW5IZWFkZXIsXG4gICAgICAgICAgICBsZXZlbDogaXNsYW5kLmxldmVsLFxuICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQsXG4gICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjaGlsZERhdGEgJiYgY2hpbGREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoZWFkZXJSZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlYyBvZiBjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICFleHBhbnNpb25TdGF0ZVZhbCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0UmVjb3JkLnN1bW1hcnlLZXkgPSBpc2xhbmQua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChleHBvcnRSZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzbGFuZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhyZWMpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocmVjKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJRDogY2hpbGRJc2xhbmQucHJpbWFyeUtleSA/IHJlY1tjaGlsZElzbGFuZC5wcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGNoaWxkSXNsYW5kLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBkZWZpbmVkIHdoZW4gcm93IGlzIGV4cGFuZGVkIGluIFVJXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZElzbGFuZEdyaWQgPSBncmlkPy5ncmlkQVBJLmdldENoaWxkR3JpZChbcGF0aF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBjaGlsZElzbGFuZEdyaWQsIHJlY1tjaGlsZElzbGFuZC5rZXldKSB8fCBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGNoaWxkSXNsYW5kLCBrZXlSZWNvcmREYXRhLCBpc2xhbmRFeHBhbnNpb25TdGF0ZVZhbCwgY2hpbGRJc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJpZXMgPSB0aGlzLnByZXBhcmVTdW1tYXJpZXMoZ3JpZCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIHN1bW1hcmllcy5rZXlzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHN1bW1hcmllcy5nZXQoayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKGlzbGFuZC5rZXksIGlzbGFuZC5sZXZlbCwgIWV4cGFuc2lvblN0YXRlVmFsLCBpc2xhbmQsIHN1bW1hcnksIGhpZXJhcmNoaWNhbE93bmVyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlOiBJR3JvdXBpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMsXG4gICAgICAgICAgICBleHBhbnNpb246IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSxcbiAgICAgICAgICAgIGRlZmF1bHRFeHBhbmRlZDogZ3JpZC5ncm91cHNFeHBhbmRlZCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYXNHcm91cGluZyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyAmJlxuICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNHcm91cGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgZ3JpZC5ncm91cHNSZWNvcmRzLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGdyaWREYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBkcm9wIHN1cHBvcnQgZm9yIHRoaXMgc2luY2UgaW4gYSBncm91cGVkIGdyaWQgaXQgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc29ydCA9ICFpc0dyb3VwZWRHcmlkID9cbiAgICAgICAgICAgICAgICAvLyAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSkgOlxuICAgICAgICAgICAgICAgIC8vICAgICBncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMV0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID8gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmNvbmNhdChncmlkLnNvcnRpbmdFeHByZXNzaW9ucyB8fCBbXSkgOiBncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IERhdGFVdGlsLnNvcnQoZ3JpZERhdGEsIGV4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgIERhdGFVdGlsLmdyb3VwKGNsb25lQXJyYXkoZ3JpZERhdGEpLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIGdyaWQuZ3JvdXBTdHJhdGVneSwgZ3JpZCwgZ3JvdXBzUmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBncm91cHNSZWNvcmRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgZ3JpZERhdGEsIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmxhdERhdGEoZ3JpZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlVHJlZUdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVHJlZUdyaWREYXRhKGdyaWQucHJvY2Vzc2VkUm9vdFJlY29yZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGdyaWREYXRhID0gZ3JpZC5yb290UmVjb3JkcztcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogKGdyaWQuZmlsdGVyU3RyYXRlZ3kpID8gZ3JpZC5maWx0ZXJTdHJhdGVneSA6IG5ldyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5KClcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBmaWx0ZXJpbmdTdGF0ZS5zdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGdyaWREYXRhLCBmaWx0ZXJpbmdTdGF0ZS5leHByZXNzaW9uc1RyZWUsIGZpbHRlcmluZ1N0YXRlLmFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC50cmVlR3JpZFNvcnQoZ3JpZERhdGEsIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRkVHJlZUdyaWREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVHJlZUdyaWREYXRhKHJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdLCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWUsIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgdHJlZUdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICBoaWRkZW46ICFwYXJlbnRFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXk6IHJlY29yZC5rZXksXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXI6IHJlY29yZC5sZXZlbCA9PT0gMCA/IEdSSURfUEFSRU5UIDogaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaCh0cmVlR3JpZFJlY29yZCk7XG5cbiAgICAgICAgICAgIGlmIChyZWNvcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRyZWVHcmlkQ2hpbGREYXRhKHJlY29yZC5jaGlsZHJlbiwgcmVjb3JkLmtleSwgcmVjb3JkLmxldmVsLCByZWNvcmQuZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyZWVHcmlkQ2hpbGREYXRhKHJlY29yZENoaWxkcmVuOiBJVHJlZUdyaWRSZWNvcmRbXSwga2V5OiBzdHJpbmcsIGxldmVsOm51bWJlciwgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbE93bmVyID0gYCR7R1JJRF9DSElMRH0keysrdGhpcy5yb3dJc2xhbmRDb3VudGVyfWBcbiAgICAgICAgbGV0IHN1bW1hcnlMZXZlbCA9IGxldmVsO1xuICAgICAgICBsZXQgc3VtbWFyeUhpZGRlbiA9ICFwYXJlbnRFeHBhbmRlZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHJjIG9mIHJlY29yZENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocmMuY2hpbGRyZW4gJiYgcmMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkVHJlZUdyaWREYXRhKFtyY10sIHBhcmVudEV4cGFuZGVkLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUxldmVsID0gcmMubGV2ZWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJjLmxldmVsLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICFwYXJlbnRFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY29yZC5zdW1tYXJ5S2V5ID0ga2V5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5TGV2ZWwgPSByYy5sZXZlbDtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5SGlkZGVuID0gIXBhcmVudEV4cGFuZGVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKGtleSwgc3VtbWFyeUxldmVsLCBzdW1tYXJ5SGlkZGVuLCBudWxsLCBudWxsLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZsYXREYXRhKHJlY29yZHM6IGFueSkge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3VtbWFyaWVzKHN1bW1hcnlLZXk6IHN0cmluZywgbGV2ZWw6IG51bWJlciA9IDAsIGhpZGRlbjogYm9vbGVhbiA9IGZhbHNlLCBvd25lcj86IGFueSwgc3VtbWFyeT86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdW1tYXJ5ID0gc3VtbWFyeSA/PyB0aGlzLnN1bW1hcmllcy5nZXQoc3VtbWFyeUtleSk7XG5cbiAgICAgICAgaWYgKHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbLi4ucm9vdFN1bW1hcnkudmFsdWVzKCldO1xuICAgICAgICAgICAgY29uc3QgYmlnZ2VzdCA9IHZhbHVlcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVswXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWdnZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge31cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IHZhbHVlLm1hcChzID0+ICh7bGFiZWw6IHMubGFiZWwsIHZhbHVlOiBzLnN1bW1hcnlSZXN1bHR9KSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBzdW1tYXJpZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogb2JqLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvd25lcikge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5UmVjb3JkLm93bmVyID0gb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cGVkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogSUdyb3VwQnlSZWNvcmRbXSwgZ3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUsIHNldEdyaWRQYXJlbnQ6IGJvb2xlYW4sIHBhcmVudEV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZSwgc3VtbWFyeUtleXNBcnI6IHN0cmluZ1tdID0gW10pIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJldmlvdXNLZXkgPSAnJ1xuICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUikuY29sdW1uc1swXS5maWVsZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBsZXQgcmVjb3JkVmFsID0gcmVjb3JkLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBzZXRHcmlkUGFyZW50ID8gR1JJRF9QQVJFTlQgOiBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YDtcbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IGdldEhpZXJhcmNoeShyZWNvcmQpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGUgPSBncm91cGluZ1N0YXRlLmV4cGFuc2lvbi5maW5kKChzKSA9PlxuICAgICAgICAgICAgICAgIGlzSGllcmFyY2h5TWF0Y2gocy5oaWVyYXJjaHkgfHwgW3sgZmllbGROYW1lOiByZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWUsIHZhbHVlOiByZWNvcmRWYWwgfV0sIGhpZXJhcmNoeSkpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRTdGF0ZSA/IGV4cGFuZFN0YXRlLmV4cGFuZGVkIDogZ3JvdXBpbmdTdGF0ZS5kZWZhdWx0RXhwYW5kZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRGF0ZSA9IHJlY29yZFZhbCBpbnN0YW5jZW9mIERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IHJlY29yZFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNvU3RyaW5nID0gKG5ldyBEYXRlKHJlY29yZFZhbCAtIHRpbWVab25lT2Zmc2V0KSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaXBlID0gbmV3IERhdGVQaXBlKGdyaWQubG9jYWxlKTtcbiAgICAgICAgICAgICAgICByZWNvcmRWYWwgPSBwaXBlLnRyYW5zZm9ybShpc29TdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJlc3Npb25OYW1lID0gcmVjb3JkLmNvbHVtbiAmJiByZWNvcmQuY29sdW1uLmhlYWRlciA/XG4gICAgICAgICAgICAgICAgcmVjb3JkLmNvbHVtbi5oZWFkZXIgOlxuICAgICAgICAgICAgICAgIHJlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZTtcblxuICAgICAgICAgICAgcmVjb3JkVmFsID0gcmVjb3JkVmFsICE9PSBudWxsID8gcmVjb3JkVmFsIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwcmVzc2lvbjogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IFtmaXJzdENvbF06IGAke2dyb3VwRXhwcmVzc2lvbk5hbWV9OiAke3JlY29yZFZhbCA/PyAnKEJsYW5rKSd9ICgke3JlY29yZC5yZWNvcmRzLmxlbmd0aH0pYCB9LFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZ3JvdXBFeHByZXNzaW9uKTtcblxuICAgICAgICAgICAgbGV0IGN1cnJLZXkgPSAnJztcbiAgICAgICAgICAgIGxldCBzdW1tYXJ5S2V5ID0gJyc7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIGN1cnJLZXkgPSBgJyR7Z3JvdXBFeHByZXNzaW9uTmFtZX0nOiAnJHtyZWNvcmRWYWx9J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIgPSBzdW1tYXJ5S2V5c0Fyci5maWx0ZXIoYSA9PiBhICE9PSBwcmV2aW91c0tleSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyS2V5O1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnB1c2goY3VycktleSk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleSA9IGB7ICR7c3VtbWFyeUtleXNBcnIuam9pbignLCAnKX0gfWA7XG4gICAgICAgICAgICAgICAgZ3JvdXBFeHByZXNzaW9uLnN1bW1hcnlLZXkgPSBzdW1tYXJ5S2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCByZWNvcmQuZ3JvdXBzLCBncm91cGluZ1N0YXRlLCBmYWxzZSwgZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQsIHN1bW1hcnlLZXlzQXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmVjb3JkcyA9IHJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dSZWNvcmQgb2Ygcm93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VtbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY29yZC5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKHN1bW1hcnlLZXksIHJlY29yZC5sZXZlbCArIDEsICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLCBudWxsLCBudWxsLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbnMoY29sdW1uczogQ29sdW1uVHlwZVtdKTogSUNvbHVtbkxpc3Qge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gW107XG4gICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IC0xO1xuICAgICAgICBsZXQgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgPyBjb2x1bW4uaGVhZGVyIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0gIWNvbHVtbi5oaWRkZW4gfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNWaXNpYmlsaXR5O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/IGNvbHVtbi5pbmRleCA6IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE51bWJlcihjb2x1bW4ud2lkdGg/LnNsaWNlKDAsIC0yKSkgfHwgREVGQVVMVF9DT0xVTU5fV0lEVEg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5MZXZlbCA9ICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gY29sdW1uLmxldmVsIDogMDtcblxuICAgICAgICAgICAgY29uc3QgaXNNdWx0aUNvbEhlYWRlciA9IGNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGNvbFNwYW4gPSBpc011bHRpQ29sSGVhZGVyID9cbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjaCA9PiAhKGNoLmNvbHVtbkdyb3VwKSAmJiAoIXRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/ICFjaC5oaWRkZW4gOiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgMTtcblxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZShjb2x1bW5IZWFkZXIpLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBza2lwOiAhZXhwb3J0Q29sdW1uLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29sdW1uLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGlzTXVsdGlDb2xIZWFkZXIgPyBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIDogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uU3BhbjogY29sU3BhbixcbiAgICAgICAgICAgICAgICBsZXZlbDogY29sdW1uTGV2ZWwsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6ICFjb2x1bW4ucGlubmVkID9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyLk1BWF9WQUxVRSA6XG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uaGlkZGVuID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE5hTixcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cFBhcmVudDogY29sdW1uLnBhcmVudCA/IGNvbHVtbi5wYXJlbnQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBpc011bHRpQ29sSGVhZGVyID8gY29sdW1uIDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uY3VycmVuY3lDb2RlID0gY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMb2NhbGVDdXJyZW5jeUNvZGUodGhpcy5sb2NhbGUpO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaXNwbGF5Rm9ybWF0ID0gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA6ICdzeW1ib2wnO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaWdpdHNJbmZvID0gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICA6ICcxLjAtMic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGF0ZUZvcm1hdCA9IGdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgRm9ybWF0V2lkdGguTWVkaXVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5mby5zdGFydEluZGV4ICE9PSBjb2x1bW5JbmZvLnBpbm5lZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZm8ucGlubmVkSW5kZXggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZXZlbCA+IG1heExldmVsICYmICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSBNYXRoLm1heChsYXN0VmlzaWJsZUNvbHVtbkluZGV4LCBjb2xMaXN0LmluZGV4T2YoY29sdW1uSW5mbykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ucGlubmVkICYmIGV4cG9ydENvbHVtbiAmJiBjb2x1bW5JbmZvLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4rKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvL0FwcGVuZCB0aGUgaGlkZGVuIGNvbHVtbnMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goKGhpZGRlbkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sTGlzdFsrK2xhc3RWaXNpYmxlQ29sdW1uSW5kZXhdID0gaGlkZGVuQ29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sXG4gICAgICAgICAgICBtYXhMZXZlbFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQ6IGFueSwgZ3JpZERhdGE6IGFueSkge1xuICAgICAgICBsZXQgY29sdW1uTGlzdDogSUNvbHVtbkxpc3Q7XG4gICAgICAgIGxldCBrZXlEYXRhO1xuXG4gICAgICAgIGlmIChpc2xhbmQuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICBrZXlEYXRhID0gZ3JpZERhdGFbaXNsYW5kLmtleV07XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlzID0gaXNsYW5kLmNoaWxkcmVuLm1hcChpID0+IGkua2V5KTtcblxuICAgICAgICAgICAgY29uc3QgaXNsYW5kRGF0YSA9IGtleURhdGEubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7fTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGkpLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2xhbmRLZXlzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tdID0gaVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoaXNsYW5kRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRDb2x1bW5MaXN0ID0gaXNsYW5kLmNvbHVtbnM7XG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGlzbGFuZENvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChpc2xhbmQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlEYXRhID0ga2V5RGF0YSAhPT0gdW5kZWZpbmVkID8ga2V5RGF0YVswXSA6IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoY2hpbGRJc2xhbmQsIGlzbGFuZEtleURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChjb2xLZXksIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sS2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgbWF4TGV2ZWw6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0gcmVjb3Jkcy5yZWR1Y2UoKGhhc2gsIG9iaikgPT4gKHsuLi5oYXNoLCBbb2JqW2tleS5uYW1lXV06KCBoYXNoW29ialtrZXkubmFtZV1dIHx8IFtdKS5jb25jYXQob2JqKX0pLCB7fSlcblxuICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleXMgPSBbLi4udGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5rZXlzKCldO1xuICAgICAgICAgICAgY29uc3QgbWFwVmFsdWVzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAudmFsdWVzKCldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba10gPSBncm91cGVkUmVjb3Jkc1trXS5maWx0ZXIocm93ID0+IG1hcEtleXMuZXZlcnkobWsgPT4gT2JqZWN0LmtleXMocm93KS5pbmNsdWRlcyhtaykpXG4gICAgICAgICAgICAgICAgICAgICYmIG1hcFZhbHVlcy5ldmVyeShtdiA9PiBPYmplY3QudmFsdWVzKHJvdykuaW5jbHVkZXMobXYpKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkUmVjb3Jkc1trXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTcGFuID0gZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCByb3dEaW1lbnNpb25Db2x1bW46IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIHJvd1NwYW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBrLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGtleS5sZXZlbCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID4gMSA/IEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIgOiBIZWFkZXJUeXBlLlJvd0hlYWRlcixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbkNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCA9IGNvbHVtbkdyb3VwUGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXAgPSBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZENvbHVtbnMucHVzaChyb3dEaW1lbnNpb25Db2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5zZXQoa2V5Lm5hbWUsIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBrZXlzLmZpbHRlcihrZGQgPT4ga2RkICE9PSBrZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZENvbHVtbnMobmV3S2V5cywgaylcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLmRlbGV0ZShrZXkubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gcm93U3BhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTGV2ZWxDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4cG9ydFN1bW1hcmllcyAmJiB0aGlzLnN1bW1hcmllcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLmZvckVhY2gob20gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxldmVsQ29sOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBHUklEX0xFVkVMX0NPTCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5zLnB1c2gobGV2ZWxDb2wpO1xuICAgICAgICAgICAgICAgIG9tLmNvbHVtbldpZHRocy5wdXNoKDIwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvcihjb25zdCByIG9mIHRoaXMuZmxhdFJlY29yZHMpe1xuICAgICAgICAgICAgICAgIGlmIChyLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCB8fCByLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgci5kYXRhW0dSSURfTEVWRUxfQ09MXSA9IHIubGV2ZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERlZmF1bHRzKCkge1xuICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fSBhcyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgICAgICB0aGlzLl9vd25lcnNNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cbiJdfQ==
|
|
1056
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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QyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lVmFsdWUsIElCYXNlRXZlbnRBcmdzLCByZXNvbHZlTmVzdGVkUGF0aCwgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuL2V4cG9ydC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSB9IGZyb20gJy4vZXhwb3J0ZXItb3B0aW9ucy1iYXNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uLy4uL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0SGllcmFyY2h5LCBpc0hpZXJhcmNoeU1hdGNoIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL29wZXJhdGlvbnMnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIEZvcm1hdFdpZHRoLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldExvY2FsZURhdGVGb3JtYXQsIGdldExvY2FsZURhdGVUaW1lRm9ybWF0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSVBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuLi8uLi9ncmlkcy9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2VudW1zJztcblxuZXhwb3J0IGVudW0gRXhwb3J0UmVjb3JkVHlwZSB7XG4gICAgR3JvdXBlZFJlY29yZCA9ICdHcm91cGVkUmVjb3JkJyxcbiAgICBUcmVlR3JpZFJlY29yZCA9ICdUcmVlR3JpZFJlY29yZCcsXG4gICAgRGF0YVJlY29yZCA9ICdEYXRhUmVjb3JkJyxcbiAgICBIaWVyYXJjaGljYWxHcmlkUmVjb3JkID0gJ0hpZXJhcmNoaWNhbEdyaWRSZWNvcmQnLFxuICAgIEhlYWRlclJlY29yZCA9ICdIZWFkZXJSZWNvcmQnLFxuICAgIFN1bW1hcnlSZWNvcmQgPSAnU3VtbWFyeVJlY29yZCcsXG4gICAgUGl2b3RHcmlkUmVjb3JkID0gJ1Bpdm90R3JpZFJlY29yZCdcbn1cblxuZXhwb3J0IGVudW0gSGVhZGVyVHlwZSB7XG4gICAgUm93SGVhZGVyID0gJ1Jvd0hlYWRlcicsXG4gICAgQ29sdW1uSGVhZGVyID0gJ0NvbHVtbkhlYWRlcicsXG4gICAgTXVsdGlSb3dIZWFkZXIgPSAnTXVsdGlSb3dIZWFkZXInLFxuICAgIE11bHRpQ29sdW1uSGVhZGVyID0gJ011bHRpQ29sdW1uSGVhZGVyJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0UmVjb3JkIHtcbiAgICBkYXRhOiBhbnk7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlO1xuICAgIG93bmVyPzogc3RyaW5nIHwgR3JpZFR5cGU7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBzdW1tYXJ5S2V5Pzogc3RyaW5nO1xuICAgIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogSGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEdSSURfUk9PVF9TVU1NQVJZID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG5leHBvcnQgY29uc3QgR1JJRF9QQVJFTlQgPSAnZ3JpZC1wYXJlbnQnO1xuZXhwb3J0IGNvbnN0IEdSSURfTEVWRUxfQ09MID0gJ0dSSURfTEVWRUxfQ09MJztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcbmNvbnN0IEdSSURfQ0hJTEQgPSAnZ3JpZC1jaGlsZC0nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRTdW1tYXJpZXM6IGJvb2xlYW4gPSBmYWxzZVxuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgc3VtbWFyaWVzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG4gICAgcHJpdmF0ZSByb3dJc2xhbmRDb3VudGVyID0gLTE7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMgPSAgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDEgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5O1xuXG4gICAgICAgIHRoaXMuYWRkTGV2ZWxDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZ3JpZCk7XG4gICAgICAgIHRoaXMuYWRkTGV2ZWxEYXRhKCk7XG4gICAgICAgIHRoaXMuYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkKTtcbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEodGhpcy5mbGF0UmVjb3JkcywgZ3JpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGZvciBleHBvcnRpbmcgYW55IGtpbmQgb2YgYXJyYXkgZGF0YS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmFycmF5Rm9yRXhwb3J0LCB0aGlzLmV4cG9ydE9wdGlvbnMpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnREYXRhKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIG9wdGlvbnMgcHJvdmlkZWQhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSBkYXRhLm1hcChkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEocmVjb3Jkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uOiBhbnksIHJvb3RQYXJlbnROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW3Jvd0RpbWVuc2lvbi5tZW1iZXJOYW1lXSA9IHJvb3RQYXJlbnROYW1lO1xuICAgICAgICBpZiAocm93RGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsLCByb290UGFyZW50TmFtZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHM6IElFeHBvcnRSZWNvcmRbXSwgZ3JpZD86IEdyaWRUeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vd25lcnNNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3Jkc0RhdGEgPSByZWNvcmRzLmZpbHRlcihyID0+IHIudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkKS5tYXAociA9PiByLmRhdGEpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEV4cG9ydFV0aWxpdGllcy5nZXRLZXlzRnJvbURhdGEocmVjb3Jkc0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IGtleXMubWFwKChrKSA9PlxuICAgICAgICAgICAgICAgICh7IGhlYWRlcjogaywgZmllbGQ6IGssIHNraXA6IGZhbHNlLCBoZWFkZXJUeXBlOiBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciwgbGV2ZWw6IDAsIGNvbHVtblNwYW46IDEgfSkpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGhzID0gbmV3IEFycmF5PG51bWJlcj4oa2V5cy5sZW5ndGgpLmZpbGwoREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uV2lkdGhzLFxuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgICAgICBtYXhMZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBtYXBSZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNob3VsZFJlb3JkZXJDb2x1bW5zID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWFwUmVjb3JkXSBvZiB0aGlzLl9vd25lcnNNYXApIHtcbiAgICAgICAgICAgIGxldCBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgICAgIGxldCBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50ID0gMTtcbiAgICAgICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IG1hcFJlY29yZC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcblxuICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwb3J0QXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29sdW1uJyArIGNvbHVtbnNXaXRob3V0SGVhZGVyQ291bnQrKyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBrZXkgPT09IERFRkFVTFRfT1dORVIgPyBncmlkIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uRXhwb3J0QXJncyA9IG5ldyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MoY29sdW1uRXhwb3J0QXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRXhwb3J0aW5nLmVtaXQobmV3Q29sdW1uRXhwb3J0QXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcEZvcm1hdHRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3Muc2tpcEZvcm1hdHRlcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q29sdW1uRXhwb3J0QXJncy51c2VyU2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5leHBvcnRJbmRleCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY29sdW1uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8PSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW4sIG1hcFJlY29yZCwgY29sdW1uLmNvbHVtblNwYW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub25Ta2lwcGVkQ29sdW1ucyA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uU2tpcHBlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5nZXQoa2V5KS5tYXhMZXZlbCA9IG5vblNraXBwZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IGIubGV2ZWwgLSBhLmxldmVsKVswXS5sZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0ICYmIHRoaXMuX3NvcnQuZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gLT0gc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudDtcblxuICAgICAgICAgICAgLy8gUmVvcmRlciBjb2x1bW5zIG9ubHkgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYXNzaWduZWQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleCBkdXJpbmcgY29sdW1uRXhwb3J0aW5nIGV2ZW50XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVvcmRlckNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBtYXBSZWNvcmQuY29sdW1ucyA9IHRoaXMucmVvcmRlckNvbHVtbnMobWFwUmVjb3JkLmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gbmV3IEFycmF5PElFeHBvcnRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbERhdGEgPSByZWNvcmRzWzBdPy5kYXRhO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxEYXRhID0gRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEoYWN0dWFsRGF0YSk7XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHJlY29yZHMubGVuZ3RoLCAxMDAsIChpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByZWNvcmRzW2ldO1xuICAgICAgICAgICAgdGhpcy5leHBvcnRSb3coZGF0YVRvRXhwb3J0LCByb3csIGksIGlzU3BlY2lhbERhdGEpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhVG9FeHBvcnQsIHRoaXMub3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uOiBJQ29sdW1uSW5mbywgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCwgc3BhbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW4uaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXBDaGlsZHJlbiA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGMuY29sdW1uR3JvdXBQYXJlbnQgPT09IGNvbHVtbi5jb2x1bW5Hcm91cCk7XG5cbiAgICAgICAgICAgIGNvbHVtbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaChjZ2MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjZ2MuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uU3BhbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5Hcm91cFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKGNnYywgbWFwUmVjb3JkLCBjZ2MuY29sdW1uU3Bhbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsICYmIGMuY29sdW1uR3JvdXAgPT09IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudClbMF07XG4gICAgICAgIGlmICh0YXJnZXRDb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0Q29sLmNvbHVtblNwYW4gLT0gc3BhbjtcblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnModGFyZ2V0Q29sLCBtYXBSZWNvcmQsIHNwYW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtblNwYW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb2wuc2tpcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydFJvdyhkYXRhOiBJRXhwb3J0UmVjb3JkW10sIHJlY29yZDogSUV4cG9ydFJlY29yZCwgaW5kZXg6IG51bWJlciwgaXNTcGVjaWFsRGF0YTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWlzU3BlY2lhbERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyID0gcmVjb3JkLm93bmVyID09PSB1bmRlZmluZWQgPyBERUZBVUxUX09XTkVSIDogcmVjb3JkLm93bmVyO1xuICAgICAgICAgICAgY29uc3Qgb3duZXJDb2xzID0gdGhpcy5fb3duZXJzTWFwLmdldChvd25lcikuY29sdW1ucztcblxuICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvd25lckNvbHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgICAgIHJlY29yZC5kYXRhID0gY29sdW1ucy5yZWR1Y2UoKGEsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByYXdWYWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZC5kYXRhLCBlLmZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQXBwbHlGb3JtYXR0ZXIgPSBlLmZvcm1hdHRlciAmJiAhZS5za2lwRm9ybWF0dGVyICYmIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGFUeXBlID09PSAnZGF0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEocmF3VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG91bGRBcHBseUZvcm1hdHRlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gbmV3IERhdGUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiByYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IHJhd1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHNob3VsZEFwcGx5Rm9ybWF0dGVyID8gZS5mb3JtYXR0ZXIocmF3VmFsdWUpIDogcmF3VmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGl2b3RHcmlkRXhwb3J0ICYmICFpc05hTihwYXJzZUZsb2F0KGZvcm1hdHRlZFZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhW2UuZmllbGRdID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEhlYWRlcnMgPSBvd25lckNvbHMuZmlsdGVyKGMgPT4gYy5za2lwKS5tYXAoYyA9PiBjLmhlYWRlciA/IGMuaGVhZGVyIDogYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgcmVjb3JkLmRhdGEgPSByZWNvcmQuZGF0YS5maWx0ZXIoZCA9PiBmaWx0ZXJlZEhlYWRlcnMuaW5kZXhPZihkKSA9PT0gLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0RhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucm93RXhwb3J0aW5nLmVtaXQocm93QXJncyk7XG5cbiAgICAgICAgaWYgKCFyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlb3JkZXJDb2x1bW5zKGNvbHVtbnM6IElDb2x1bW5JbmZvW10pOiBJQ29sdW1uSW5mb1tdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gZmlsdGVyZWRDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNJbmRpY2VzQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gIWlzTmFOKGNvbC5leHBvcnRJbmRleCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSxiKSA9PiBhLmV4cG9ydEluZGV4IC0gYi5leHBvcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBzcGVjaWZpY0luZGljZXNDb2x1bW5zLm1hcChjb2wgPT4gY29sLmV4cG9ydEluZGV4KTtcblxuICAgICAgICBzcGVjaWZpY0luZGljZXNDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGZpbHRlcmVkQ29sdW1ucy5zcGxpY2UoZmlsdGVyZWRDb2x1bW5zLmluZGV4T2YoY29sKSwgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlb3JkZXJlZENvbHVtbnMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICBpZiAoc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5sZW5ndGggPiBNYXRoLm1heCguLi5pbmRpY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNwZWNpZmljSW5kaWNlc0NvbHVtbnMuY29uY2F0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQ29sdW1ucy5wdXNoKHNwZWNpZmljSW5kaWNlc0NvbHVtbnNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgayA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuZ3RoICYmIHJlb3JkZXJlZENvbHVtbnNba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKytrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbHVtbnNba10gPSBzcGVjaWZpY0luZGljZXNDb2x1bW5zW2luZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChyZW9yZGVyZWRDb2x1bW5zW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sdW1uc1tpXSA9IGZpbHRlcmVkQ29sdW1ucy5zcGxpY2UoMCwgMSlbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlb3JkZXJlZENvbHVtbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlRGF0YShncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLmZsYXRSZWNvcmRzID0gW107XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBoYXNGaWx0ZXJpbmcgPSAoZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgIChncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID8gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmNvbmNhdChncmlkLnNvcnRpbmdFeHByZXNzaW9ucyB8fCBbXSkgOiBncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGV4cHJlc3Npb25zICYmIGV4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIGxldCBzZXRTdW1tYXJ5T3duZXIgPSBmYWxzZTtcblxuICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2lneC1waXZvdC1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZERhdGEoZ3JpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBzZXRTdW1tYXJ5T3duZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaWd4LXRyZWUtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUcmVlR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyaWVzLnNpemUgPiAwICYmIGdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUuY2hpbGRMZXZlbHNPbmx5KSB7XG4gICAgICAgICAgICBzZXRTdW1tYXJ5T3duZXIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKEdSSURfUk9PVF9TVU1NQVJZLCAwLCBmYWxzZSwgZ3JpZCkgOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKEdSSURfUk9PVF9TVU1NQVJZKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVBpdm90R3JpZERhdGEoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZERhdGEgPSBPYmplY3QuZnJvbUVudHJpZXMocmVjb3JkLmFnZ3JlZ2F0aW9uVmFsdWVzKTtcbiAgICAgICAgICAgIHJlY29yZC5kaW1lbnNpb25WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbEtleSA9IHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcFtrZXldO1xuICAgICAgICAgICAgICAgIHJlY29yZERhdGFbYWN0dWFsS2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBpdm90R3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmREYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5QaXZvdEdyaWRSZWNvcmRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChwaXZvdEdyaWRSZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5LCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIHJlY29yZHM6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0TGlzdCA9IGdyaWQuY2hpbGRMYXlvdXRMaXN0O1xuICAgICAgICBjb25zdCBjb2x1bW5GaWVsZHMgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KGdyaWQpLmNvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGVWYWwgPSBncmlkLmV4cGFuc2lvblN0YXRlcy5oYXMoZW50cnkpID8gZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KGVudHJ5KSA6IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhV2l0aG91dENoaWxkcmVuID0gT2JqZWN0LmtleXMoZW50cnkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGNvbHVtbkZpZWxkcy5pbmNsdWRlcyhrKSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGVudHJ5W2tleV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFXaXRob3V0Q2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBncmlkLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyOiBHUklEX1BBUkVOVFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzbGFuZCBvZiBjaGlsZExheW91dExpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoOiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lEOiBpc2xhbmQucHJpbWFyeUtleSA/IGVudHJ5W2lzbGFuZC5wcmltYXJ5S2V5XSA6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGlzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBpc2xhbmRHcmlkLCBlbnRyeVtpc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kLCBrZXlSZWNvcmREYXRhLCBleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVTdW1tYXJpZXMoZ3JpZDogYW55KTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4ge1xuICAgICAgICBsZXQgc3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgZ3JpZC5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlDYWNoZU1hcCA9IGdyaWQuc3VtbWFyeVNlcnZpY2Uuc3VtbWFyeUNhY2hlTWFwO1xuXG4gICAgICAgICAgICBzd2l0Y2goZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHk6XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlDYWNoZU1hcC5kZWxldGUoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHk6XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgb2Ygc3VtbWFyeUNhY2hlTWFwLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09IEdSSURfUk9PVF9TVU1NQVJZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3VtbWFyaWVzID0gc3VtbWFyeUNhY2hlTWFwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bW1hcmllcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVJc2xhbmREYXRhKGlzbGFuZDogYW55LCBpc2xhbmRHcmlkOiBHcmlkVHlwZSwgZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIGlmIChpc2xhbmRHcmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZEdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gaXNsYW5kR3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmRHcmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBpc2xhbmRHcmlkLnNvcnRTdHJhdGVneSwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoIXNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZC5zb3J0U3RyYXRlZ3ksIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZDogYW55LFxuICAgICAgICBjaGlsZERhdGE6IGFueVtdLCBleHBhbnNpb25TdGF0ZVZhbDogYm9vbGVhbiwgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YDtcbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoaXNsYW5kKS5jb2x1bW5zO1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSBjb2x1bW5MaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpXG4gICAgICAgICAgICAubWFwKGNvbCA9PiBjb2wuaGVhZGVyID8gY29sLmhlYWRlciA6IGNvbC5maWVsZCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkLFxuICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgIGhpZGRlbjogIWV4cGFuc2lvblN0YXRlVmFsLFxuICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2hpbGREYXRhICYmIGNoaWxkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGVhZGVyUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZWMgb2YgY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWMsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBpc2xhbmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydFJlY29yZC5zdW1tYXJ5S2V5ID0gaXNsYW5kLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZXhwb3J0UmVjb3JkKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRFeHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5oYXMocmVjKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJlYykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRJc2xhbmQgb2YgaXNsYW5kLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGNoaWxkSXNsYW5kLnByaW1hcnlLZXkgPyByZWNbY2hpbGRJc2xhbmQucHJpbWFyeUtleV0gOiByZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiBjaGlsZElzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgZGVmaW5lZCB3aGVuIHJvdyBpcyBleHBhbmRlZCBpbiBVSVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgY2hpbGRJc2xhbmRHcmlkLCByZWNbY2hpbGRJc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShjaGlsZElzbGFuZCwga2V5UmVjb3JkRGF0YSwgaXNsYW5kRXhwYW5zaW9uU3RhdGVWYWwsIGNoaWxkSXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gdGhpcy5wcmVwYXJlU3VtbWFyaWVzKGdyaWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBzdW1tYXJpZXMua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBzdW1tYXJpZXMuZ2V0KGspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhpc2xhbmQua2V5LCBpc2xhbmQubGV2ZWwsICFleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kLCBzdW1tYXJ5LCBoaWVyYXJjaGljYWxPd25lcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uczogZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLFxuICAgICAgICAgICAgZXhwYW5zaW9uOiBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kZWQ6IGdyaWQuZ3JvdXBzRXhwYW5kZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzR3JvdXBpbmcgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykgJiZcbiAgICAgICAgICAgICghaGFzR3JvdXBpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWQuZ3JvdXBzUmVjb3JkcywgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkLmZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZHJvcCBzdXBwb3J0IGZvciB0aGlzIHNpbmNlIGluIGEgZ3JvdXBlZCBncmlkIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NvcnQgPSAhaXNHcm91cGVkR3JpZCA/XG4gICAgICAgICAgICAgICAgLy8gICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzFdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC5zb3J0KGdyaWREYXRhLCBleHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBEYXRhVXRpbC5ncm91cChjbG9uZUFycmF5KGdyaWREYXRhKSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCBncmlkLmdyb3VwU3RyYXRlZ3ksIGdyaWQsIGdyb3Vwc1JlY29yZHMpO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZ3JvdXBzUmVjb3JkcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWREYXRhLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVRyZWVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQucm9vdFJlY29yZHM7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IChncmlkLmZpbHRlclN0cmF0ZWd5KSA/IGdyaWQuZmlsdGVyU3RyYXRlZ3kgOiBuZXcgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSgpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZmlsdGVyaW5nU3RhdGUuc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBmaWx0ZXJpbmdTdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGdyaWREYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRyZWVHcmlkRGF0YShyZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSwgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlLCBoaWVyYXJjaGljYWxPd25lcj86IHN0cmluZykge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5OiByZWNvcmQua2V5LFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyOiByZWNvcmQubGV2ZWwgPT09IDAgPyBHUklEX1BBUkVOVCA6IGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2godHJlZUdyaWRSZWNvcmQpO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmQuY2hpbGRyZW4sIHJlY29yZC5rZXksIHJlY29yZC5sZXZlbCwgcmVjb3JkLmV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmRDaGlsZHJlbjogSVRyZWVHcmlkUmVjb3JkW10sIGtleTogc3RyaW5nLCBsZXZlbDpudW1iZXIsIHBhcmVudEV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gXG4gICAgICAgIGxldCBzdW1tYXJ5TGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgbGV0IHN1bW1hcnlIaWRkZW4gPSAhcGFyZW50RXhwYW5kZWQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByYyBvZiByZWNvcmRDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHJjLmNoaWxkcmVuICYmIHJjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShbcmNdLCBwYXJlbnRFeHBhbmRlZCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlMZXZlbCA9IHJjLmxldmVsO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJjLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiByYy5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWNvcmQuc3VtbWFyeUtleSA9IGtleTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUxldmVsID0gcmMubGV2ZWw7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUhpZGRlbiA9ICFwYXJlbnRFeHBhbmRlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhrZXksIHN1bW1hcnlMZXZlbCwgc3VtbWFyeUhpZGRlbiwgbnVsbCwgbnVsbCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGbGF0RGF0YShyZWNvcmRzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN1bW1hcmllcyhzdW1tYXJ5S2V5OiBzdHJpbmcsIGxldmVsOiBudW1iZXIgPSAwLCBoaWRkZW46IGJvb2xlYW4gPSBmYWxzZSwgb3duZXI/OiBhbnksIHN1bW1hcnk/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+LCBoaWVyYXJjaGljYWxPd25lcj86IHN0cmluZykge1xuICAgICAgICBjb25zdCByb290U3VtbWFyeSA9IHN1bW1hcnkgPz8gdGhpcy5zdW1tYXJpZXMuZ2V0KHN1bW1hcnlLZXkpO1xuXG4gICAgICAgIGlmIChyb290U3VtbWFyeSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gWy4uLnJvb3RTdW1tYXJ5LnZhbHVlcygpXTtcbiAgICAgICAgICAgIGNvbnN0IGJpZ2dlc3QgPSB2YWx1ZXMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClbMF07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmlnZ2VzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByb290U3VtbWFyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJpZXMgPSB2YWx1ZS5tYXAocyA9PiAoe2xhYmVsOiBzLmxhYmVsLCB2YWx1ZTogcy5zdW1tYXJ5UmVzdWx0fSkpXG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gc3VtbWFyaWVzW2ldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG9iaixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5LFxuICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeVJlY29yZC5vd25lciA9IG93bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChzdW1tYXJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkR3JvdXBlZERhdGEoZ3JpZDogR3JpZFR5cGUsIHJlY29yZHM6IElHcm91cEJ5UmVjb3JkW10sIGdyb3VwaW5nU3RhdGU6IElHcm91cGluZ1N0YXRlLCBzZXRHcmlkUGFyZW50OiBib29sZWFuLCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWUsIHN1bW1hcnlLZXlzQXJyOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZXZpb3VzS2V5ID0gJydcbiAgICAgICAgY29uc3QgZmlyc3RDb2wgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KERFRkFVTFRfT1dORVIpLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KVswXS5maWVsZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBsZXQgcmVjb3JkVmFsID0gcmVjb3JkLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBzZXRHcmlkUGFyZW50ID8gR1JJRF9QQVJFTlQgOiBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YDtcbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IGdldEhpZXJhcmNoeShyZWNvcmQpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGUgPSBncm91cGluZ1N0YXRlLmV4cGFuc2lvbi5maW5kKChzKSA9PlxuICAgICAgICAgICAgICAgIGlzSGllcmFyY2h5TWF0Y2gocy5oaWVyYXJjaHkgfHwgW3sgZmllbGROYW1lOiByZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWUsIHZhbHVlOiByZWNvcmRWYWwgfV0sIGhpZXJhcmNoeSkpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRTdGF0ZSA/IGV4cGFuZFN0YXRlLmV4cGFuZGVkIDogZ3JvdXBpbmdTdGF0ZS5kZWZhdWx0RXhwYW5kZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRGF0ZSA9IHJlY29yZFZhbCBpbnN0YW5jZW9mIERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IHJlY29yZFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNvU3RyaW5nID0gKG5ldyBEYXRlKHJlY29yZFZhbCAtIHRpbWVab25lT2Zmc2V0KSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaXBlID0gbmV3IERhdGVQaXBlKGdyaWQubG9jYWxlKTtcbiAgICAgICAgICAgICAgICByZWNvcmRWYWwgPSBwaXBlLnRyYW5zZm9ybShpc29TdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJlc3Npb25OYW1lID0gcmVjb3JkLmNvbHVtbiAmJiByZWNvcmQuY29sdW1uLmhlYWRlciA/XG4gICAgICAgICAgICAgICAgcmVjb3JkLmNvbHVtbi5oZWFkZXIgOlxuICAgICAgICAgICAgICAgIHJlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZTtcblxuICAgICAgICAgICAgcmVjb3JkVmFsID0gcmVjb3JkVmFsICE9PSBudWxsID8gcmVjb3JkVmFsIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwcmVzc2lvbjogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IFtmaXJzdENvbF06IGAke2dyb3VwRXhwcmVzc2lvbk5hbWV9OiAke3JlY29yZFZhbCA/PyAnKEJsYW5rKSd9ICgke3JlY29yZC5yZWNvcmRzLmxlbmd0aH0pYCB9LFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZ3JvdXBFeHByZXNzaW9uKTtcblxuICAgICAgICAgICAgbGV0IGN1cnJLZXkgPSAnJztcbiAgICAgICAgICAgIGxldCBzdW1tYXJ5S2V5ID0gJyc7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIGN1cnJLZXkgPSBgJyR7Z3JvdXBFeHByZXNzaW9uTmFtZX0nOiAnJHtyZWNvcmRWYWx9J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIgPSBzdW1tYXJ5S2V5c0Fyci5maWx0ZXIoYSA9PiBhICE9PSBwcmV2aW91c0tleSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyS2V5O1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnB1c2goY3VycktleSk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleSA9IGB7ICR7c3VtbWFyeUtleXNBcnIuam9pbignLCAnKX0gfWA7XG4gICAgICAgICAgICAgICAgZ3JvdXBFeHByZXNzaW9uLnN1bW1hcnlLZXkgPSBzdW1tYXJ5S2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCByZWNvcmQuZ3JvdXBzLCBncm91cGluZ1N0YXRlLCBmYWxzZSwgZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQsIHN1bW1hcnlLZXlzQXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmVjb3JkcyA9IHJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dSZWNvcmQgb2Ygcm93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VtbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY29yZC5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKHN1bW1hcnlLZXksIHJlY29yZC5sZXZlbCArIDEsICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLCBudWxsLCBudWxsLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbnMoY29sdW1uczogQ29sdW1uVHlwZVtdKTogSUNvbHVtbkxpc3Qge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gW107XG4gICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IC0xO1xuICAgICAgICBsZXQgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgPyBjb2x1bW4uaGVhZGVyIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0gIWNvbHVtbi5oaWRkZW4gfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNWaXNpYmlsaXR5O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/IGNvbHVtbi5pbmRleCA6IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE51bWJlcihjb2x1bW4ud2lkdGg/LnNsaWNlKDAsIC0yKSkgfHwgREVGQVVMVF9DT0xVTU5fV0lEVEg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5MZXZlbCA9ICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gY29sdW1uLmxldmVsIDogMDtcblxuICAgICAgICAgICAgY29uc3QgaXNNdWx0aUNvbEhlYWRlciA9IGNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGNvbFNwYW4gPSBpc011bHRpQ29sSGVhZGVyID9cbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjaCA9PiAhKGNoLmNvbHVtbkdyb3VwKSAmJiAoIXRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/ICFjaC5oaWRkZW4gOiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgMTtcblxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZShjb2x1bW5IZWFkZXIpLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBza2lwOiAhZXhwb3J0Q29sdW1uLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29sdW1uLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGlzTXVsdGlDb2xIZWFkZXIgPyBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIDogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uU3BhbjogY29sU3BhbixcbiAgICAgICAgICAgICAgICBsZXZlbDogY29sdW1uTGV2ZWwsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6ICFjb2x1bW4ucGlubmVkID9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyLk1BWF9WQUxVRSA6XG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uaGlkZGVuID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE5hTixcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cFBhcmVudDogY29sdW1uLnBhcmVudCA/IGNvbHVtbi5wYXJlbnQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBpc011bHRpQ29sSGVhZGVyID8gY29sdW1uIDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uY3VycmVuY3lDb2RlID0gY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMb2NhbGVDdXJyZW5jeUNvZGUodGhpcy5sb2NhbGUpO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaXNwbGF5Rm9ybWF0ID0gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA6ICdzeW1ib2wnO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaWdpdHNJbmZvID0gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICA6ICcxLjAtMic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGF0ZUZvcm1hdCA9IGdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgRm9ybWF0V2lkdGguTWVkaXVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5mby5zdGFydEluZGV4ICE9PSBjb2x1bW5JbmZvLnBpbm5lZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZm8ucGlubmVkSW5kZXggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZXZlbCA+IG1heExldmVsICYmICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSBNYXRoLm1heChsYXN0VmlzaWJsZUNvbHVtbkluZGV4LCBjb2xMaXN0LmluZGV4T2YoY29sdW1uSW5mbykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ucGlubmVkICYmIGV4cG9ydENvbHVtbiAmJiBjb2x1bW5JbmZvLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4rKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvL0FwcGVuZCB0aGUgaGlkZGVuIGNvbHVtbnMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goKGhpZGRlbkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sTGlzdFsrK2xhc3RWaXNpYmxlQ29sdW1uSW5kZXhdID0gaGlkZGVuQ29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sXG4gICAgICAgICAgICBtYXhMZXZlbFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQ6IGFueSwgZ3JpZERhdGE6IGFueSkge1xuICAgICAgICBsZXQgY29sdW1uTGlzdDogSUNvbHVtbkxpc3Q7XG4gICAgICAgIGxldCBrZXlEYXRhO1xuXG4gICAgICAgIGlmIChpc2xhbmQuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICBrZXlEYXRhID0gZ3JpZERhdGFbaXNsYW5kLmtleV07XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlzID0gaXNsYW5kLmNoaWxkcmVuLm1hcChpID0+IGkua2V5KTtcblxuICAgICAgICAgICAgY29uc3QgaXNsYW5kRGF0YSA9IGtleURhdGEubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7fTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGkpLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2xhbmRLZXlzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tdID0gaVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoaXNsYW5kRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRDb2x1bW5MaXN0ID0gaXNsYW5kLmNvbHVtbnM7XG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGlzbGFuZENvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChpc2xhbmQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlEYXRhID0ga2V5RGF0YSAhPT0gdW5kZWZpbmVkID8ga2V5RGF0YVswXSA6IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoY2hpbGRJc2xhbmQsIGlzbGFuZEtleURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChjb2xLZXksIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sS2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgbWF4TGV2ZWw6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0gcmVjb3Jkcy5yZWR1Y2UoKGhhc2gsIG9iaikgPT4gKHsuLi5oYXNoLCBbb2JqW2tleS5uYW1lXV06KCBoYXNoW29ialtrZXkubmFtZV1dIHx8IFtdKS5jb25jYXQob2JqKX0pLCB7fSlcblxuICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleXMgPSBbLi4udGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5rZXlzKCldO1xuICAgICAgICAgICAgY29uc3QgbWFwVmFsdWVzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAudmFsdWVzKCldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba10gPSBncm91cGVkUmVjb3Jkc1trXS5maWx0ZXIocm93ID0+IG1hcEtleXMuZXZlcnkobWsgPT4gT2JqZWN0LmtleXMocm93KS5pbmNsdWRlcyhtaykpXG4gICAgICAgICAgICAgICAgICAgICYmIG1hcFZhbHVlcy5ldmVyeShtdiA9PiBPYmplY3QudmFsdWVzKHJvdykuaW5jbHVkZXMobXYpKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkUmVjb3Jkc1trXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTcGFuID0gZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCByb3dEaW1lbnNpb25Db2x1bW46IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIHJvd1NwYW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBrLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGtleS5sZXZlbCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID4gMSA/IEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIgOiBIZWFkZXJUeXBlLlJvd0hlYWRlcixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbkNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCA9IGNvbHVtbkdyb3VwUGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXAgPSBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZENvbHVtbnMucHVzaChyb3dEaW1lbnNpb25Db2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5zZXQoa2V5Lm5hbWUsIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBrZXlzLmZpbHRlcihrZGQgPT4ga2RkICE9PSBrZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZENvbHVtbnMobmV3S2V5cywgaylcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLmRlbGV0ZShrZXkubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gcm93U3BhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTGV2ZWxDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4cG9ydFN1bW1hcmllcyAmJiB0aGlzLnN1bW1hcmllcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLmZvckVhY2gob20gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxldmVsQ29sOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBHUklEX0xFVkVMX0NPTCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5zLnB1c2gobGV2ZWxDb2wpO1xuICAgICAgICAgICAgICAgIG9tLmNvbHVtbldpZHRocy5wdXNoKDIwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvcihjb25zdCByIG9mIHRoaXMuZmxhdFJlY29yZHMpe1xuICAgICAgICAgICAgICAgIGlmIChyLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCB8fCByLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgci5kYXRhW0dSSURfTEVWRUxfQ09MXSA9IHIubGV2ZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERlZmF1bHRzKCkge1xuICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fSBhcyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgICAgICB0aGlzLl9vd25lcnNNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cbiJdfQ==
|