@churchillliving/se-ui-toolkit 6.53.366 → 6.53.367
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/bundles/churchillliving-se-ui-toolkit.umd.js +35 -45
- package/bundles/churchillliving-se-ui-toolkit.umd.js.map +1 -1
- package/churchillliving-se-ui-toolkit.metadata.json +1 -1
- package/esm2015/lib/components/base/filter/filter.component.js +2 -2
- package/esm2015/lib/components/base/grid/grid.component.js +35 -41
- package/esm2015/lib/services/grid.service.js +1 -4
- package/fesm2015/churchillliving-se-ui-toolkit.js +35 -44
- package/fesm2015/churchillliving-se-ui-toolkit.js.map +1 -1
- package/lib/components/base/grid/grid.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -955,35 +955,7 @@ export class GridComponent {
|
|
|
955
955
|
value = this.setTimeFormat(newValue);
|
|
956
956
|
}
|
|
957
957
|
else {
|
|
958
|
-
let format =
|
|
959
|
-
if (column.format) {
|
|
960
|
-
switch (column.format) {
|
|
961
|
-
case EGridFormatType.SMALLDATE: {
|
|
962
|
-
format = 'MM/dd/yy';
|
|
963
|
-
break;
|
|
964
|
-
}
|
|
965
|
-
case EGridFormatType.SHORTDATE: {
|
|
966
|
-
format = 'MM/dd/yyyy';
|
|
967
|
-
break;
|
|
968
|
-
}
|
|
969
|
-
case EGridFormatType.MEDIUMDATE: {
|
|
970
|
-
format = 'M d, yy';
|
|
971
|
-
break;
|
|
972
|
-
}
|
|
973
|
-
case EGridFormatType.LONGDATE: {
|
|
974
|
-
format = 'MM/dd/YY, h:mm a';
|
|
975
|
-
break;
|
|
976
|
-
}
|
|
977
|
-
case EGridFormatType.PERIOD: {
|
|
978
|
-
format = 'MM/yy';
|
|
979
|
-
break;
|
|
980
|
-
}
|
|
981
|
-
default: {
|
|
982
|
-
format = column.format;
|
|
983
|
-
break;
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
}
|
|
958
|
+
let format = this.setFormat(column);
|
|
987
959
|
value = this.datePipe.transform((newValue === null || newValue === void 0 ? void 0 : newValue.toString()) === "Invalid Date" ? null : newValue, format ? format : 'MM/dd/yy');
|
|
988
960
|
}
|
|
989
961
|
}
|
|
@@ -1002,7 +974,7 @@ export class GridComponent {
|
|
|
1002
974
|
? ((_2 = column === null || column === void 0 ? void 0 : column.filter) === null || _2 === void 0 ? void 0 : _2.type) === 'calendar' && column.timeOnly && column.type === EGridColumnType.DIALOG ?
|
|
1003
975
|
(row[column.field + '_obj'].displayText.toString().includes('AM') || row[column.field + '_obj'].displayText.toString().includes('PM')) ?
|
|
1004
976
|
row[column.field + '_obj'].displayText : this.datePipe.transform(row[column.field + '_obj'].displayText, 'hh:mm a')
|
|
1005
|
-
: row[column.field + '_obj'].displayText
|
|
977
|
+
: column.format ? this.datePipe.transform(row[column.field + '_obj'].displayText, this.setFormat(column)) : row[column.field + '_obj'].displayText
|
|
1006
978
|
: column.displayText
|
|
1007
979
|
? column.displayText
|
|
1008
980
|
: column.icon ? column.header
|
|
@@ -1010,6 +982,38 @@ export class GridComponent {
|
|
|
1010
982
|
}
|
|
1011
983
|
return value;
|
|
1012
984
|
}
|
|
985
|
+
setFormat(column) {
|
|
986
|
+
let format = '';
|
|
987
|
+
if (column === null || column === void 0 ? void 0 : column.format) {
|
|
988
|
+
switch (column.format) {
|
|
989
|
+
case EGridFormatType.SMALLDATE: {
|
|
990
|
+
format = 'MM/dd/yy';
|
|
991
|
+
break;
|
|
992
|
+
}
|
|
993
|
+
case EGridFormatType.SHORTDATE: {
|
|
994
|
+
format = 'MM/dd/yyyy';
|
|
995
|
+
break;
|
|
996
|
+
}
|
|
997
|
+
case EGridFormatType.MEDIUMDATE: {
|
|
998
|
+
format = 'M d, yy';
|
|
999
|
+
break;
|
|
1000
|
+
}
|
|
1001
|
+
case EGridFormatType.LONGDATE: {
|
|
1002
|
+
format = 'MM/dd/YY, h:mm a';
|
|
1003
|
+
break;
|
|
1004
|
+
}
|
|
1005
|
+
case EGridFormatType.PERIOD: {
|
|
1006
|
+
format = 'MM/yy';
|
|
1007
|
+
break;
|
|
1008
|
+
}
|
|
1009
|
+
default: {
|
|
1010
|
+
format = column.format;
|
|
1011
|
+
break;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
return format;
|
|
1016
|
+
}
|
|
1013
1017
|
setDropdwonReadOnlyValue(row, column) {
|
|
1014
1018
|
var _a, _b, _c;
|
|
1015
1019
|
delete row['undefined'];
|
|
@@ -1121,16 +1125,6 @@ export class GridComponent {
|
|
|
1121
1125
|
link.click();
|
|
1122
1126
|
}
|
|
1123
1127
|
}
|
|
1124
|
-
setFormat(column, row) {
|
|
1125
|
-
let value = '';
|
|
1126
|
-
if (column.format) {
|
|
1127
|
-
value = this.datePipe.transform(column.displayText ? column.displayText : row[column.field], column.format);
|
|
1128
|
-
}
|
|
1129
|
-
else {
|
|
1130
|
-
value = column.displayText ? column.displayText : row[column.field];
|
|
1131
|
-
}
|
|
1132
|
-
return value;
|
|
1133
|
-
}
|
|
1134
1128
|
/**
|
|
1135
1129
|
*
|
|
1136
1130
|
* @param row
|
|
@@ -2596,4 +2590,4 @@ GridComponent.propDecorators = {
|
|
|
2596
2590
|
onGridRowAdd: [{ type: Output }],
|
|
2597
2591
|
beforeunloadHandler: [{ type: HostListener, args: ['window:beforeunload', ['$event'],] }]
|
|
2598
2592
|
};
|
|
2599
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFTTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGtCQUFrQixFQUVsQixjQUFjLEVBRWQsZUFBZSxFQUdmLGNBQWMsRUFDZCxxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixD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YSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEgsc0JBQXNCO1FBQ3RCLDBDQUEwQztRQUMxQyxLQUFLO1FBQ0wsSUFBRyxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSxFQUFDO1lBQ2hFLENBQUEsTUFBQSxNQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUMsMENBQUUsTUFBTSwwQ0FBRSxhQUFhLDBDQUFFLElBQUksMENBQUUsTUFBTSxFQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFDLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLE1BQU0sQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQ2hMLENBQUEsTUFBQSxNQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUMsMENBQUUsTUFBTSwwQ0FBRSxhQUFhLDBDQUFFLElBQUksMENBQUUsS0FBSyxFQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFDLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQzNLLENBQUEsTUFBQSxNQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUMsMENBQUUsTUFBTSwwQ0FBRSxhQUFhLDBDQUFFLElBQUksMENBQUUsTUFBTSxFQUFBLENBQUMsQ0FBQSxVQUFVLENBQUMsTUFBTSxHQUFDLE9BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDRDQUFFLE1BQU0sQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQzlLLENBQUEsT0FBQSxPQUFBLE9BQUEsT0FBQSxHQUFHLENBQUMsT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssNENBQUUsV0FBVyxFQUFFLENBQUMsNENBQUUsTUFBTSw0Q0FBRSxhQUFhLDRDQUFFLElBQUksNENBQUUsYUFBYSxFQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFDLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJQUFJLDRDQUFFLGFBQWEsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQ3BNLENBQUEsT0FBQSxPQUFBLE9BQUEsT0FBQSxHQUFHLENBQUMsT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssNENBQUUsV0FBVyxFQUFFLENBQUMsNENBQUUsTUFBTSw0Q0FBRSxhQUFhLDRDQUFFLElBQUksNENBQUUsVUFBVSxFQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFDLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJQUFJLDRDQUFFLFVBQVUsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQzNMLENBQUEsT0FBQSxPQUFBLE9BQUEsT0FBQSxHQUFHLENBQUMsT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssNENBQUUsV0FBVyxFQUFFLENBQUMsNENBQUUsTUFBTSw0Q0FBRSxhQUFhLDRDQUFFLElBQUksNENBQUUsSUFBSSxFQUFBLENBQUMsQ0FBQSxVQUFVLENBQUMsSUFBSSxHQUFDLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJQUFJLDRDQUFFLElBQUksQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQ3pLLDBGQUEwRjtTQUMxRjtRQUNDLHlDQUF5QztRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxrQ0FDL0MsVUFBVSxLQUNiLElBQUksa0JBQ0YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFDM0IsVUFBVSxFQUFFLE9BQUEsT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsNENBQUUsSUFBSSw0Q0FBRSxVQUFVLElBQ3JELE1BQU0sQ0FBQyxPQUFPLEtBRW5CLENBQUM7UUFDSCwySEFBMkg7UUFDM0gscUVBQXFFO1FBQ3JFLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osOENBQThDO1FBQzlDLGdDQUFnQztRQUNoQyxzRUFBc0U7UUFDdEUscUNBQXFDO1FBQ3JDLE9BQU87UUFDUCxNQUFNO1FBQ04sTUFBTSxhQUFhLEdBQUcsT0FBQSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQUUsSUFBSSxDQUFDO1FBQ3JELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyw0Q0FBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDekY7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLE1BQVcsRUFBRSxHQUFTOztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN2RCw4QkFBOEI7UUFDOUIsK0NBQStDO1FBQy9DLFdBQVc7UUFDWCxjQUFjO1FBQ2Qsc0NBQXNDO1FBQ3RDLE9BQU87UUFDUCx1REFBdUQ7UUFDdkQsNENBQTRDO1FBQzVDLGlEQUFpRDtRQUMvQyxJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUMscUJBQXFCLENBQ3ZDLEdBQUcsRUFDSCxNQUFNLEVBQ04sQ0FBQSxNQUFBLE1BQUEsTUFBQSxNQUFBLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLElBQUk7WUFDcEQsQ0FBQyxDQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQUUsTUFBTSwwQ0FBRSxhQUFhLDBDQUFFLElBQUksMENBQUUsSUFBSSxDQUFBLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSwwQ0FBRSxJQUFJLENBQ3RGLENBQUM7UUFFRixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQSxNQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsU0FBUyxFQUFBLENBQUMsQ0FBQSxNQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsU0FBUyxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUMxSixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFDLENBQUE7UUFDekUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ25CLENBQUMsR0FBRyxFQUFFLEVBQUU7O1lBQ04sSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUNyQyxNQUFNLEVBQ04sTUFBTSxDQUFDLGFBQWEsRUFDcEIsR0FBRyxDQUNKLENBQUM7Z0JBQ0YsR0FBRyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxVQUFVLEdBQUcsTUFBQSxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsMENBQUUsSUFBSSwwQ0FBRSxVQUFVLDBDQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUN4RSxJQUFJLGFBQWEsR0FBRyxNQUFBLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLGFBQWEsMENBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQzlFLElBQUksV0FBVyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQy9DLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDdkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHO3dCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUN0RSxLQUFLLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7cUJBQ3hELENBQUE7b0JBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3RDO3FCQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUM7b0JBQzdCLElBQUksVUFBVSxJQUFJLGFBQWEsRUFBRTt3QkFDL0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHOzRCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3BELEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDNUQsQ0FBQztxQkFDSDt5QkFBTTt3QkFDTCxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztxQkFDaEM7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxVQUFVLElBQUksYUFBYSxFQUFFO3dCQUMvQixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUc7NEJBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3lCQUM3RCxDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQ3JDO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLFNBQVMscUJBQU8sR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBQztnQkFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFBLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUFFLEtBQUssQ0FBQzthQUMxRDtpQkFBSyxJQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFDO2dCQUMvQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUNsQixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ3RDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQztpQkFDeEMsQ0FBQzthQUNIO1lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDdEM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2FBQ0Y7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQ0YsQ0FBQztRQUNKLElBQUk7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVc7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLG1CQUFtQixDQUFDLE1BQVcsRUFBRSxHQUFRO1FBQ3ZDLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUNFLE1BQU0sQ0FBQyxRQUFRO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsRUFDNUQ7WUFDQSxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO2FBQU0sSUFDTCxNQUFNLENBQUMsUUFBUTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUN2RTtZQUNBLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDcEI7YUFBTSxJQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsRUFDakU7WUFDQSxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QjtTQUNGO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHO1FBQ25DLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsWUFBWSxFQUFFO1lBQy9DLElBQUksTUFBTSxDQUFDLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pFLHFGQUFxRjtnQkFDckYsSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxvQkFBb0IsQ0FBQyxFQUFFO29CQUNyRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7d0JBQ3BCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXOzZCQUMzQixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7NkJBQ25FLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBRVAsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dDQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzZCQUN6Qzt3QkFDTCxDQUFDLENBQUMsQ0FBQztxQkFDTjtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW1CLEVBQUUsR0FBUTtRQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QjtpQkFBTSxJQUNMLE1BQU0sQ0FBQyxRQUFRO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksRUFDNUM7Z0JBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QjtTQUNGO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBUSxFQUFFLE1BQVksRUFBRSxLQUFXOztRQUNuRCxJQUFHLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSwwQ0FBRSxJQUFJLE1BQUsscUJBQXFCLENBQUMsWUFBWSxFQUFDO1lBQzFELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztTQUNSO2FBQUs7WUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQWdCLEVBQUUsTUFBWSxFQUFFLEtBQVc7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkUsTUFBTSxTQUFTLHFCQUFhLEdBQUcsQ0FBRSxDQUFDO1FBQ2xDLCtCQUErQjtRQUMvQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDaEQsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDdkMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFDM0IsWUFBWSxDQUNiLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixNQUFNLEdBQUcsR0FBRztZQUNWLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUN2RCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM3QyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7U0FDakIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsS0FBVSxFQUFFLE1BQVc7O1FBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sMENBQUUsSUFBSSxPQUFLLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLE1BQU0sMENBQUUsTUFBTSwwQ0FBRSxJQUFJLENBQUEsRUFBRTtZQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5RDthQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sSUFBSSxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sMENBQUUsSUFBSSxNQUFLLHFCQUFxQixDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUNySixNQUFNLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxNQUFNLEVBQUU7WUFDakIsTUFBTSxDQUFDLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sMENBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBbUIsRUFBRSxNQUFXLEVBQUUsS0FBVTtRQUM3RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVSxFQUFFLE1BQVc7O1FBQ3BDLElBQ0UsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXO1lBQ3pCLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFFBQVEsR0FBRyxNQUFNLE1BQUssQ0FBQztnQkFDcEMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFFBQVEsRUFBRSxNQUFLLEVBQUU7Z0JBQy9CLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEVBQ3hCO1lBQ0EsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQVc7UUFDM0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLGVBQWUsQ0FBQyxLQUFVLEVBQUUsTUFBbUI7O1FBQzdDLElBQ0UsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztZQUNyRCxDQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssMENBQUUsUUFBUSxHQUFHLE1BQU0sTUFBSyxDQUFDLEVBQ3JDO1lBQ0EsSUFBSSxhQUFhLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUksTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLEVBQUUsQ0FBQSxFQUFFO2dCQUNuRCxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsRUFBRSxDQUFBLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFRLENBQUMsQ0FBQzthQUM5SDtpQkFBTSxJQUFJLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxFQUFFLEVBQUU7Z0JBQ3JDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLEVBQUUsSUFBRyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzthQUMxRztZQUNELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwQyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDekMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FDckMsQ0FBQztvQkFDRixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDZCxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsRUFBRSxDQUFBLEVBQUU7NEJBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsRUFBRSxJQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDOUYsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLElBQUcsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLEVBQUUsQ0FBQSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO3lCQUM5Rjs2QkFBTTs0QkFDTCxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFJLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxFQUFFLENBQUEsRUFBRTtnQ0FDbkQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUcsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLEVBQUUsQ0FBQSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7NkJBQzFIO2lDQUFNLElBQUksTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLEVBQUUsRUFBRTtnQ0FDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxFQUFFLElBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDOzZCQUMxRzt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGFBQWEsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLFlBQVksQ0FBQyxNQUFXLEVBQUUsR0FBUTs7UUFDaEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDOUgsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLDBDQUFFLFNBQVMsQ0FBQztZQUMvQyxDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUNwQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUNMLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSTtZQUNwQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNwQyxNQUFNLENBQUMsZUFBZSxFQUN0QjtZQUVBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLFFBQVEsTUFBSyxJQUFJLEVBQUU7WUFFeEcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9FLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekM7aUJBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsRDtTQUNGO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRztRQUN0QixJQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksTUFBSyxlQUFlLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsYUFBYSxDQUFDLE1BQVcsRUFBRSxHQUFRO1FBQ2pDLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDakMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVSxFQUFFLE1BQW1CLEVBQUUsR0FBRzs7UUFDdEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUywwQ0FBRSxNQUFNLEVBQUU7WUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLHlCQUF5QixDQUFDLE1BQVcsRUFBRSxHQUFROztRQUM3QyxJQUNFLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksTUFBSyxlQUFlLENBQUMsUUFBUTtZQUN6QyxNQUFNLENBQUMsWUFBWTtZQUNuQixDQUFBLE1BQUEsTUFBTSxDQUFDLFlBQVksMENBQUUsTUFBTSxJQUFHLENBQUMsRUFDL0I7WUFDQSxNQUFNLEdBQUcsR0FBUSxNQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDBDQUFFLElBQUksQ0FDckMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVcsRUFBRSxNQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQy9ELENBQUM7WUFDRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN4QyxDQUFDLE1BQVcsRUFBRSxFQUFFOztnQkFDZCxPQUFBLENBQUEsTUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxRQUFRLEVBQUU7cUJBQ3RDLE1BQUEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQUUsUUFBUSxFQUFFLENBQUEsQ0FBQTthQUFBLENBQ2hDLENBQUM7WUFDRixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRTtnQkFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRDtTQUNGO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixVQUFVLENBQUMsS0FBVSxFQUFFLE1BQVcsRUFBRSxHQUFRO1FBQzFDLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxlQUFlO0lBQ2YsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUM5QztZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMzQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzlDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHFCQUFxQjtRQUNuQixNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQ3ZELHNCQUFzQixDQUN2QixDQUFDO1FBQ0YsSUFBSSx5QkFBeUIsRUFBRTtZQUM3Qix5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFO29CQUNuSixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztpQkFDM0I7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7YUFDMUI7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxtQkFBbUI7O1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFOztZQUN2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDeEMsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDN0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNyQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDakQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7YUFDSDtRQUVILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMvQjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHNCQUFzQixDQUFDLFlBQW9CLEVBQUU7O1FBQzNDLElBQUksT0FBTyxHQUFZLEtBQUssQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FDWCxNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsYUFBYSwwQ0FBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTt3QkFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7NEJBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxDQUFDO3dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3hCO29CQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3lCQUN6RDs2QkFDSTs0QkFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7eUJBQzdDO3dCQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO29CQUM1QixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7YUFDUDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUU7b0JBQ3hCLElBQUksU0FBUyxJQUFJLFdBQVcsRUFBRTt3QkFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUNSO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFVBQVUsQ0FBQyxNQUFXOztRQUNwQixNQUFBLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxLQUFLLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzFCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsb0JBQW9CLENBQUMsT0FBWSxFQUFFLEtBQVUsRUFBRSxrQkFBMkIsS0FBSzs7UUFDN0UsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxJQUFHLENBQUMsS0FBSSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLDBDQUFFLFdBQVcsQ0FBQSxFQUFFO2dCQUMvRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLDBDQUFFLFdBQVcsS0FBSSxJQUFJLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUksTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxXQUFXLENBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDaEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sMENBQUUsV0FBVyxLQUFJLElBQUksRUFBRTtnQkFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsRUFBRSxLQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEVBQUUsTUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxDQUFBLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqQzthQUNGO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQVE7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ25CLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDeEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ2pCO29CQUNILENBQUMsQ0FBQyxDQUFBO2lCQUNIO2dCQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBVyxFQUFFLEtBQVU7UUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVyxFQUFFLEtBQVUsRUFBRSxNQUFXO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZFLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLEdBQVM7UUFDN0MsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4QjthQUFNO1lBQ0wsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxtQkFBbUIsQ0FBQyxNQUFtQjs7UUFDckMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQ0UsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTzs7b0JBRXZDLENBQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSwwQ0FBRSxJQUFJLE1BQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxFQUNoRTtnQkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFOztvQkFDNUIsSUFBSSxDQUFBLE1BQUEsTUFBQSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLFFBQVEsTUFBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO3dCQUNwRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7cUJBQ2xDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELGlFQUFpRTtJQUNqRSxzQkFBc0IsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsR0FBUTs7UUFDdEMsTUFBQSxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBDQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUMzRyxNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSwwQ0FBRSxLQUFLLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQztnQkFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFBLElBQUksSUFBSSxDQUFDLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sMENBQUUsS0FBSyxDQUFDLDBDQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9FO2lCQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUF4dEZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsbWk5Q0FBb0M7O2FBRXJDOzs7O1lBM0NDLGFBQWE7WUFJTixXQUFXO1lBd0JYLFlBQVk7WUFEWixxQkFBcUI7WUF2QzVCLFVBQVU7WUEyQ08sV0FBVztZQUtyQixpQkFBaUI7WUFuRHhCLGlCQUFpQjtZQWtEVixNQUFNO1lBSk4sUUFBUTtZQW5DUixtQkFBbUI7WUFHMUIsbUJBQW1CLHVCQStiaEIsUUFBUTtZQWhjWCxnQkFBZ0IsdUJBaWNiLFFBQVE7OztzQkFsWlYsWUFBWSxTQUFDLFNBQVM7OEJBQ3RCLE1BQU07NkJBQ04sS0FBSztvQkE2REwsU0FBUyxTQUFDLElBQUk7MkJBR2QsS0FBSztpQ0FFTCxLQUFLOzhCQUVMLEtBQUs7NkJBTUwsS0FBSzs2QkFFTCxLQUFLOytCQU1MLEtBQUs7NEJBR0wsS0FBSzswQkFHTCxLQUFLO3lCQUdMLEtBQUs7c0JBR0wsS0FBSzsyQkFHTCxLQUFLOzZCQUdMLEtBQUs7bUNBR0wsS0FBSzttQ0FHTCxLQUFLO2lDQUdMLEtBQUs7bUNBR0wsS0FBSzsrQkFHTCxLQUFLO2lDQUdMLEtBQUs7cUNBR0wsS0FBSzs0QkFHTCxLQUFLO3lCQUdMLEtBQUs7NEJBR0wsS0FBSztzQkFHTCxLQUFLOzhCQUdMLEtBQUs7K0JBR0wsS0FBSzt5QkFHTCxLQUFLOzJCQUdMLEtBQUs7dUJBR0wsS0FBSzt5QkFFTCxLQUFLO3dCQUVMLEtBQUs7NEJBRUwsS0FBSzt1QkFFTCxLQUFLO2dDQUVMLEtBQUs7a0NBR0wsS0FBSzt5QkFHTCxNQUFNO21CQU9OLEtBQUs7K0JBeUNMLEtBQUs7c0JBNkVMLEtBQUs7MEJBRUwsS0FBSztnQ0FHTCxLQUFLO3lCQUdMLEtBQUs7NEJBR0wsS0FBSzt5QkFHTCxLQUFLO29DQUdMLEtBQUs7MkJBR0wsS0FBSztnQ0FFTCxLQUFLOzBCQUVMLEtBQUs7MEJBR0wsS0FBSzs0QkFFTCxLQUFLO2tDQUdMLEtBQUs7eUJBR0wsTUFBTTtvQ0FHTixNQUFNOzRCQUdOLE1BQU07MkJBR04sTUFBTTs2QkFHTixNQUFNO3FDQUdOLE1BQU07NEJBR04sTUFBTTttQ0FHTixNQUFNO3NDQUdOLE1BQU07MkJBS04sTUFBTTswQkFJTixNQUFNOzhCQUdOLE1BQU07MEJBR04sTUFBTTt1QkFHTixNQUFNOytCQUdOLE1BQU07MkJBR04sS0FBSzswQkFHTCxLQUFLOzBCQUVMLEtBQUs7NEJBR0wsTUFBTTsyQkFHTixNQUFNO2tDQTZCTixZQUFZLFNBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7XG4gIER5bmFtaWNEaWFsb2dSZWYsXG4gIER5bmFtaWNEaWFsb2dDb25maWcsXG4gIERpYWxvZ1NlcnZpY2UsXG59IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge1xuICBJR3JpZENvbHVtbixcbiAgSUdyaWRTb3J0LFxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZENvbHVtbkFjdGlvbixcbiAgSUdyaWRSb3dBY3Rpb24sXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIElHcmlkRGF0YUV4cG9ydCxcbiAgRUdyaWRBZ2dyZWdhdGUsXG4gIElMb29rdXBWYWx1ZSxcbiAgRUdyaWRGb3JtYXRUeXBlLFxuICBJR3JpZEZpbHRlckluZm8sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBFUGVybWlzc2lvblR5cGUsIElQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgV29ya1NoZWV0IH0gZnJvbSAneGxzeCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZHJlbignZ3JpZFJvdycpIGdyaWRSb3c6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgc2V0IGFjdGl2ZVRlc3RNb2RlKHZhbDogYW55KSB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xuICAgICAgZGVidWdnZXI7XG4gICAgfVxuICB9XG4gIHNlcnZlckZpbHRlcnM6IElHcmlkU2VydmVyU2lkZUV2ZW50ID0ge307XG4gIHJvd3NEYXRhOiBhbnlbXTtcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNDb2x1bW5IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgcm93Q2xpY2tEYXRhOiBJR3JpZENvbHVtbjtcbiAgY29tcG9uZW50VGFibGVSZWY6IGFueTtcbiAgbG9va3VwT2JqZWN0OiBJTG9va3VwVmFsdWU7XG4gIGxvb2t1cEZpbHRlck9iajogYW55O1xuICBjaGVja2xpc3Q6IGFueVtdID0gW11cbiAgbG9va3VwQmx1cjogYm9vbGVhbiA9IHRydWU7XG4gIGdsb2JhbEZpbHRlcnNBcnJheTogYW55W10gPSBbXTtcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kZXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZ3JpZEZpbHRlck9iajogSUdyaWRGaWx0ZXJJbmZvO1xuICBkZWZhdWx0RGF0ZTogYW55O1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FuY2VsQWxsUmVjb3JkczogYm9vbGVhbiA9IGZhbHNlO1xuICBhZGROZXdSb3dDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpbkVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVSZWNvcmRBcnJheTogYW55W10gPSBbXTtcbiAgZGlzYWJsZWRTYXZlQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NlbGVjdGVkQWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xuICBDaGVja2VkOiBib29sZWFuID0gdHJ1ZVxuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlZGl0TW9kZUNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0TW9kZXVuQ2tlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3knO1xuICBzZXREcm9wZG93bkZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHJlbG9hZFBhZ2U6IFN1YnNjcmlwdGlvbjtcbiAgc2V0RHJvcGRvd25kYXRhVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGhpZGVFZGl0QWxsUm93c0J0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XG5cbiAgLy8gU2VsZWN0cyBpdGVtcyBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBwYXNzZWQgb24gZGF0YVxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldEdyaWRSZWZyZXNoVGltZTogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcblxuICBwcml2YXRlIGdsb2JhbERhdGE6IElHcmlkRmlsdGVyW10gPSBbXTtcblxuICBzb3J0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1JlZnJlc2hCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgaGlkZVJlZnJlc2hCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFN0b3JlcyBzZWxlY3RlZCBjb2x1bW5zXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICB2aXNpYmxlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXG4gIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZGVsZXRlIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVEZWxldGVCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZWRpdCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRWRpdEJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBhZGQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUFkZEJ0biA9IGZhbHNlO1xuXG4gIC8vIFByb3AgdG8gaGFuZGxlIGxvYWRlciBvZiBncmlkXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLy90aGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGFuZGxlIHNlcnZlciBzaWRlIGV2ZW50IGJ5IGRlZmF1bHQgaXQgaXMgdHJ1ZSB3aGVuIGl0IGZhbHNlIHNlcnZlciBzaWRlIGV2ZW50IHdpbGwgbm90IGJlIGNhbGxlZFxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBjaGVjayB3aGVyZSBzZWxlY3RlZCBpcyBhbGxvd2VkIG9yIG5vdC5cbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAvLyBTZXQgY29sdW1uIHdpZHRoIG9mIHNlbGVjdGVkIHJvdy5cbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcblxuICAvLyBzZXQgc2VsZWN0aW9uIGNoZWNrQm94IGhlYWRlclxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbkhlYWRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZFNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkQ2FuY2VsQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBwZGYuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIGV4Y2VsLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cbiAgQElucHV0KCkgc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCA9IGZhbHNlO1xuXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XG4gIEBJbnB1dCgpIHVzZUlubGluZUNSVUQgPSBmYWxzZTtcblxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xuICBASW5wdXQoKSByb3dBY3Rpb25zOiBJR3JpZFJvd0FjdGlvbltdID0gW107XG5cbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogRUdyaWRTZWxlY3Rpb25UeXBlID0gRUdyaWRTZWxlY3Rpb25UeXBlLlNJTkdMRTtcblxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxuICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgPSAnaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc2ODBweCc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogU3RvcHMgdGhlIGxvYWRlciBhbmQgc2V0cyB0aGUgZGF0YSB0byBncmlkXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xuICAgKiBTY3JvbGxzIHRvIHNlbGVjdGVkIGVsZW1lbnQgaWYgc2VsZWN0aW9uIGZvdW5kXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YUtleSkge1xuICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICdpZCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhkYXRhLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbmluZyB0aGUgZWRpdGluZyBzdGFja1xuICAgICAgLy8gdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkUm93cykge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHgubmF0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5zZWxlY3RlZFJvd3NbdGhpcy5kYXRhS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRcbiAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuXG4gICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICAgICAgdGhpcy5jaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2xvYmFsIGZpbHRlciBzZXJ2ZXIgcmVxdWVzdFxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcbiAgICB0aGlzLmdsb2JhbERhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAucHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVycylcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVyc1xuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxuICAgICAgOiB0aGlzLmdsb2JhbERhdGE7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5jb25jYXQoWy4uLnNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXSlcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAndHJ1ZScpIHtcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZvckVhY2goKGZpbHRlckFycmF5KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlICYmXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSAhPT0gZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSA9IGdsb2JhbEZpbHRlci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxuICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmICFnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgICAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5jb25jYXQoXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc1xuICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXG4gICAgICAgICAgKVxuICAgICAgICApLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcbiAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICBvYmo/LnZhbHVlICYmIG9iai52YWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID4gMCAmJiBvYmouZmllbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpXSA9IHNlcnZlckZpbHRlclZhbHVlcztcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIGFzIGZpcnN0XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xuICAgICAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXBwbHlGaWx0ZXInKTtcbiAgICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBudW1iZXIgVUlcbiAgICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XG4gICAgICAgIH1cbiAgICAgIC8vIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHRvZ2dsaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhpZGUgZmlsdGVyaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIGxvb2t1cCBmaWx0ZXJzXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBwYWdpbmF0aW9uXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBzaG93IEN1cnJlbnRQYWdlIFJlcG9ydFxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcblxuICAvLyBEaXNwbGF5cyB0b3RhbCBudW1iZXIgb2YgcmVjb3Jkc1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIEBJbnB1dCgpIHNob3djb25maXJtRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzYXZlQWxsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcbiAgQElucHV0KCkgZGVmYXVsdFJvd3M6IG51bWJlcjtcblxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XG5cbiAgLy8gRGVjaWRlcyB0aGUgZ3JpZCdzIGJlaGF2aW9yIGVpdGhlciBmb3IgY2xpZW50IHNpZGUgb3Igc2VydmVyIHNpZGUgZXZlbnRzXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW47XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIEVkaXQgdGhlIHJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gYWRkaW5nIHRoZSBuZXcgUm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHB1YmxpYyBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZlxuICApIHsgfVxuXG4gIGdldCBzZWxlY3RlZENvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xuICB9XG5cbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gYXV0b21hdGljYWxseSByZWxvYWQgZ3JpZCBhZnRlciA5IHNlY29uZHMuXG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub25Sb3dVcGRhdGU/Lm9ic2VydmVycz8ubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaGlkZUVkaXRCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICBhcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgICBsZXQgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBjb2x1bW4ucGVybWlzc2lvbnM7XG4gICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgYXBwbHlHcmlkUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxuICAgICAgbGV0IGhhc0NvbHVtblBlcm1pc3Npb25zID0gdGhpcy5jb2x1bW5zPy5zb21lKFxuICAgICAgICAoeCkgPT4geD8ucGVybWlzc2lvbnMgJiYgeC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5DUlVEICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IHRydWU7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFoYXNDb2x1bW5QZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5ERUxFVEUgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm93QWRkLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyAhPT0gZmFsc2UgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYWxsb3dDYWNoaW5nID0gdGhpcy5wYWdpbmF0aW9uO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuXG4gICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gICAgICB0aGlzLmFwcGx5Q29sdW1uc1Blcm1pc3Npb25zKCk7XG5cbiAgICAgIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxuICAgICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xuXG4gICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICBpZiAoaGFzQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICAvLyBjaGVja2luZyBmaWx0ZXIgZXhpc3Qgb3Igbm90XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5zb21lKFxuICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWRlRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gc2V0IGlzUmVxdWlyZWQgdHJ1ZSBmb3IgcmVxdWlyZWQgY29sdW1uIHRvIHNob3cgYXN0cmljIGluIGNvbHVtbiBoZWFkZXJcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbGlkYXRpb25zPy5maW5kKHZhbGlkYXRpb24gPT4gdmFsaWRhdGlvbi50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEKSkge1xuICAgICAgICAgICAgY29sdW1uLmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgbnVtZXJpYyBudWxsIG9yIHVuZGVmaW5lIGRhdGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgIGlmICgoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDfHxjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gfHxjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLlRFWFR8fGNvbHVtbi50eXBlID09PSB1bmRlZmluZWR8fGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURXx8Y29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikgJiYgY29sdW1uLnZhbHVlICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmFsdWUgJiYgKHJvd1tjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGltZSBpbnRvIHRoZSBkYXRlXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRleHQgPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXT8udGV4dCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBmaWx0ZXIgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiBjb2x1bW4udmFsdWUgJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYWRkIFwiZmxleC1zaHJpbms6IDBcIiBmb3IgZmxleC1iYXNpcyBTdHlsZVxuICAgICAgICAgIC8vIGlmIChjb2x1bW4uc3R5bGUgJiYgY29sdW1uLnN0eWxlLmluY2x1ZGVzKCdmbGV4LWJhc2lzJykpIHtcbiAgICAgICAgICAvLyAgIGxldCBzdHlsZSA9IGNvbHVtbi5zdHlsZSArICcgIWltcG9ydGFudDsgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudCc7XG4gICAgICAgICAgLy8gICBjb2x1bW4uc3R5bGUgPSBzdHlsZS5pbmNsdWRlcygnOzsnKVxuICAgICAgICAgIC8vICAgICA/IHN0eWxlLnJlcGxhY2UoJzs7JywgJzsnKVxuICAgICAgICAgIC8vICAgICA6IHN0eWxlO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW4pO1xuXG4gICAgICAgICAgLy9BZ2dyZWdhdGUgc2NlbmFyaW9cbiAgICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCkpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNcIix0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVycyk7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgudmFsdWUsICdNTS1kZC1ZWScpIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZGlzcGxheUZpZWxkIHRvTG93ZXJjYXNlXG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRoYXQgY29udGFpbnMgY29tbWEgaW50byBhcnJheXNcbiAgICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpLmluY2x1ZGVzKCc7Jykpe1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJzsnKVxuICAgICAgICAgICAgICA/Lm1hcCgodmFsdWU6IGFueSkgPT4gKHsgW2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0sW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzaW1wbGUgc3RyaW5nIGludG8gYXJyYXlcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd1trZXldKSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmKGNvbHVtbi5kaXNwbGF5RmllbGQpe1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgaWYoY29sdW1uLm9wdGlvbkxhYmVsKXtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0sIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlICYmIE9iamVjdC5rZXlzKHRoaXMubmV3R3JpZFJvdykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geCA9PT0gY29sdW1uLmZpZWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXdHcmlkUm93W2tleV0gPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWFyY2hpbmcgc2NlbmFyaW9cbiAgICAgICAgaWYgKGNoYW5nZS5yb3dzPy5jdXJyZW50VmFsdWUgJiYgY2hhbmdlLmNvbHVtbnM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIC8vIENoZWNrcyBlaXRoZXIgY29sdW1uIHZhbHVlIGlzIGNoYW5nZXMgKGkuZS4sIGNvbHVtbiBoaWRkZW4gc2NlbmFyaW8pXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlLmNvbHVtbnMuY3VycmVudFZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PVxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5jb2x1bW5zKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICAgICAgICAgIHgudmFsdWUgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF4LmhpZGRlbikge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcbiAgICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgdmFsdWUpIHtcbiAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICBjb25zdCB2YWx1ZUtleSA9IGNvbHVtbi5vcHRpb25WYWx1ZSA/IGNvbHVtbi5vcHRpb25WYWx1ZSA6IGNvbHVtbi5maWVsZDtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gWy4uLnJvd1tjb2x1bW4uZmllbGRdLCB7XG4gICAgICAgIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV0sXG4gICAgICAgIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV1cbiAgICAgIH1dO1xuICAgICAgY29uc3QgaW5kZXggPSByb3dbY29sdW1uLmZpZWxkXT8uZmluZEluZGV4KCh4KSA9PiBKU09OLnN0cmluZ2lmeSh4KSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXG4gIHNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgICAgaWYgKGRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IHJvd1tkaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldE51bWVyaWNNaW5NeEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IGRpZ2l0SW5mbyA9ICcyJztcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBkaWdpdEluZm8gPSAnMCdcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIGRpZ2l0SW5mbyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm87XG4gICAgfVxuICAgIHJldHVybiBkaWdpdEluZm87XG4gIH1cblxuICAvLyBzZXQgdGhlIGZvcm1hdCBvZiBjdXJyZW5jeSAmJiBudW1iZXIgJiYgZGVjaW1hbCAmJiBwZXJjZW50XG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgcm93ID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA6IChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCA9PT0gMCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpXT8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBsZXQgZGlnaXRzSW5mbyA9IGZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkNVUlJFTkNZOlxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5QRVJDRU5UOlxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxuICBzZXREcm9wZG93blZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgPSBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlID0gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgIDogJ3ZhbHVlJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcbiAgICAgICAgICAgIChyZWNvcmQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBlZGl0ZWRSb3cgPSBzZWxlY3RlZFJvdyAmJiBPYmplY3Qua2V5cyhzZWxlY3RlZFJvdykubGVuZ3RoID4gMCA/IHNlbGVjdGVkUm93W3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldIDogZmFsc2U7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgY2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbnMgJiZcbiAgICAgIHRoaXMucm93c0RhdGEgJiZcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnMCcpKSB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnTidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93RGF0YVxuICAgKiBQYXNzZXMgZGF0YSBvZiBjbGlja2VkIHJvdyB0byBwYXJlbnRcbiAgICovXG4gIGhhbmRsZVJvd0NsaWNrKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93RGF0YTtcbiAgICBpZighdGhpcy5lZGl0QWxsUm93cyl7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcbiAgICogUGFzc2VzIHNvcnRpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IG9uIHNvcnQgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc29ydERpcmVjdGlvbiA9IG51bGw7XG4gICAgbGV0IHNvcnRGaWVsZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlcikge1xuICAgICAgc29ydERpcmVjdGlvbiA9XG4gICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIgPT0gMVxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xuICAgICAgICAgIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0M7XG4gICAgICBzb3J0RmllbGQgPSBldmVudC5tdWx0aXNvcnRtZXRhWzBdLmZpZWxkO1xuICAgIH1cbiAgICBsZXQgc29ydHM6IElHcmlkU29ydCA9IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICAgICAgcHJpb3JpdHk6IDAsXG4gICAgfTtcbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogcm93cyxcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzICYmIGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE5ld1Jvdyhyb3c6IGFueSwgYWRkUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4uZmlsdGVyICYmXG4gICAgICAgIGNvbHVtbi5jb21wb25lbnQgJiZcbiAgICAgICAgY29sdW1uLmZpbHRlci50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICApIHtcbiAgICAgICAgaWYgKGFkZFJvdykge1xuICAgICAgICAgIHRoaXMucm93c0RhdGFbMF1bY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQocm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXG4gICAqL1xuICBvcGVuR3JpZERpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgaWYgKGNvbHVtbi5kYXRhICYmIGNvbHVtbi5kYXRhLmRhdGEgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgY29sdW1uLmRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5jb21wb25lbnQgJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5yb3dDbGlja0RhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHsgLi4uY29sdW1uLmRhdGEgfTtcbiAgICAgICAgZGF0YS5kYXRhID0gdXRpbGl0aWVzLmF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgIGNvbHVtbi5kYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oY29sdW1uLmNvbXBvbmVudCwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZGF0YSwgdGhpcy5yb3dDbGlja0RhdGEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgYnJvd3NlckNsb3NlRXZlbnQoZXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkVmFsdWU6IGFueSkge1xuICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJywnKT8ubWFwKCh2YWx1ZSkgPT4gY29sdW1uLmRhdGE/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSB2YWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsKT8udG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnNldFRpbWVGb3JtYXQobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBmb3JtYXQgPSAnJztcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCkge1xuICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQvWVksIGg6bW0gYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiAnTU0vZGQveXknKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XG4gICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA/IGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyA/XG4gICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmljb24gPyBjb2x1bW4uaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgIDogY29sdW1uLmRhdGE/LmZpbmQoZHJvcGRvd25WYWwgPT4gZHJvcGRvd25WYWw/LnZhbHVlID09IHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICA/IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSk/LmxhYmVsXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgQ29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGNsaWNrIG9uIGRlbGV0ZSBpY29uIGluIEFjdGlvbiBjb2x1bW5cbiAgICovXG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uQWN0aW9uOiBJR3JpZENvbHVtbkFjdGlvbiwgcm93OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXG4gICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICBrZXk6ICdoYW5kbGVjb2x1bW5BY3Rpb25zJyxcbiAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IExhenlMb2FkRXZlbnRcbiAgICogVHJpZ2dlcnMgZXZlcnl0aW1lIGEgc2VydmVyIHNpZGUgZmlsdGVyIGlzIHRyaWdnZXJcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVFdmVudHMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZ3JpZGZpbHRlciA9IGV2ZW50O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnNbeC5maWVsZF0pIHtcbiAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSB0aGlzLnNlcnZlckZpbHRlcnM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQoXG4gICAgICAgIHRoaXMuZ2xvYmFsRGF0YVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcbiAgICB9LCA5NTApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBQYXNzZXMgYXBwbGllZCBwYWdpbmF0aW9uIHRvIHBhcmVudCBvbiBwYWdlIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oZXZlbnQ6IElHcmlkUGFnaW5hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xuICAgIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgIHZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXSxcbiAgICAgICAgY29sdW1uLmZvcm1hdFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUm93RWRpdEluaXQocm93OiBhbnkpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpXG4gICAgbGV0IHNlbGVjdGVkUm93ID0geyAuLi5yb3cgfTtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RlZFJvdykuZm9yRWFjaCgoW2tleSwgdmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZXREcm9wZG93bkZpbHRlcikge1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGNvbC5kaXNwbGF5RmllbGQpe1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkKyAnX3RlbXAnXTogdmFsdWVbMF1bY29sLmZpZWxkXSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgbG9va3VwIGNvbnRyb2wgZmllbGQgYmFzZWQgb24gZGlzcGxheSBmaWVsZC5cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSBrZXkpIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0ge1xuICAgICAgICAgICAgICB0ZXh0OiByb3dbY29sLmRpc3BsYXlGaWVsZF0sXG4gICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sLmZpZWxkXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5sYWJlbCA9PT0gcm93W2NvbC5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZT8uYWN0aW9uID8gdmFsdWUudGV4dCA6IHZhbHVlO1xuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJvd1trZXldPy5hY3Rpb24gJiYgT2JqZWN0LmtleXMocm93W2tleV0/LmFjdGlvbik/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcm93W2tleV0udGV4dCA9IG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChjb2wuc2hvd1RpbWUgfHwgY29sLnRpbWVPbmx5KSAmJlxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxuICAgICAgICAgICAgcm93W2tleV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgKGNvbC5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmVkaXRMaW5rID09PSB0cnVlKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHJvd1tjb2wuZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbms7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5jYW5jZWxBbGxSZWNvcmRzID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMub25HcmlkUm93RWRpdC5lbWl0KHJvdyk7XG4gIH1cblxuICB0eXBlT2YodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGRyb3Bkb3duIGZpbHRlciB2YWx1ZVxuICAgKi9cbiAgc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2w6IGFueSwgcm93OiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sLmRyb3BEb3duUHJvcCkge1xuICAgICAgaWYgKE9iamVjdC52YWx1ZXMoY29sKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgPT0ga2V5KSkge1xuICAgICAgICBsZXQgb2JqID0gY29sLmRyb3BEb3duUHJvcDtcbiAgICAgICAgbGV0IG5ld0ZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgICBpZiAob2JqLmZpbHRlcnMgJiYgb2JqLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG9iai5maWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3RmlsdGVyID0geyAuLi5maWx0ZXIgfTtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKGtleSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXk6IHN0cmluZyA9ICcnO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlPy5pbmNsdWRlcygneycpICYmXG4gICAgICAgICAgICAgICAga2V5LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG1hdGNoS2V5ID0ga2V5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaEtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbHRlcktleSkge1xuICAgICAgICAgICAgICBuZXdGaWx0ZXIudmFsdWUgPSByb3dbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0ZpbHRlcnMucHVzaChuZXdGaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sLFxuICAgICAgICAgIG9iai51bmlxdWVLZXksXG4gICAgICAgICAgb2JqLnZhbHVlUHJvcCxcbiAgICAgICAgICBvYmoubGFiZWxQcm9wLFxuICAgICAgICAgIG5ld0ZpbHRlcnMsXG4gICAgICAgICAgcm93XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IG9wdGlvbiA9IGNvbC5kYXRhLmZpbmQoXG4gICAgICAgICAgKHg6IGFueSkgPT4geC5sYWJlbCA9PT0gcm93W2NvbC5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogUGFzc2VzIHRoZSBlZGl0ZWQgb3IgbmV3bHkgY3JlYXRlZCBkYXRhIHRvIHBhcmVudFxuICAgKiBJbiBjYXNlIG9mIG5ld2x5IGNyZWF0ZWQgZGF0YSwgZGF0YUtleSBhbmQgaXNOZXcgcHJvcCBpcyByZW1vdmVkXG4gICAqL1xuICBvblJvd0VkaXRTYXZlKHNlbGVjdGVkUm93OiBhbnkpIHtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm8gPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddO1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHRoaXMubG9va3VwT2JqZWN0ICYmIFxuICAgICAgICAhdGhpcy5lZGl0QWxsUm93c1xuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9va3VwT2JqZWN0ICYmIHRoaXMubG9va3VwT2JqZWN0LmZpZWxkKSB7XG4gICAgICAgIHJvd1t0aGlzLmxvb2t1cE9iamVjdC5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ19vYmonKSkge1xuICAgICAgICBpZiAodGhpcy5jaGVja0FjdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb2JqOiBhbnkgPSByb3dba2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9iaiAmJlxuICAgICAgICAgIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8XG4gICAgICAgICAgICBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHxcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnZGlhbG9nJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICBjb2x1bW4uZmllbGQgJiZcbiAgICAgICAgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGxvb2t1cEluZm8gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGRdIH07XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICAgICkge1xuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSxcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2V0IERlY2ltYWwgRnJhY3Rpb24gVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkRFQ0lNQUwgJiZcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpZ2l0c0luZm8gPSAnLjAwJztcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcbiAgICAgICAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgICAgICAgY29uc3QgZnJhY0RpZ2l0cyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZnJhY0RpZ2l0czsgaSsrKSB7XG4gICAgICAgICAgICAgIHplcm8gPSB6ZXJvICsgJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlnaXRzSW5mbyA9ICcuJyArIHplcm87XG4gICAgICAgICAgfVxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByb3cuaXNOZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XG4gICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KHRoaXMuY29sdW1ucywgcm93KTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5ncmlkVmFsaWRhdGlvbih0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcbiAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHNlbGVjdGVkUm93KTtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgaWYgKHJvdy5pc05ldyB8fCByb3cuaXNuZXcpIHtcbiAgICAgICAgY29uc3QgeyBpc05ldywgaXNuZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQob2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdGhpcy5lZGl0QWxsUm93cztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZiBhbGwgcm93cyBpbiByZWFkIG9ubHkgbW9kZSB0aGVuIHNob3cgZWRpdEFsbFJvd3MgYnV0dG9uLiAgICBcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlRWRpdEFsbFJvd3NCdG4gPSB0cnVlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnZlcnQgZGF0ZSBpbnRvIHRpbWVcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSlcbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBhdXRvY29tcGVsZXQgYXJyYXkgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXV0b21Db21wbGV0ZVRlbXBEYXRhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBMT09LVVBfSU5QVVQgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwSW5mbztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHNlbGVjdGVkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gIH1cblxuICAvLyBjaGVjayB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcbiAgZ3JpZFZhbGlkYXRpb24oY29sdW1uczogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KGNvbHVtbnMsIHJvdykpIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzOiBzdHJpbmcgPSAnJztcbiAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgY29sdW1uLmVycm9yTWVzc2FnZSA6IGNvbHVtbi5lcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBsZXQgaXNSZXF1aXJlZCA9IGNvbHVtbnMuc29tZShcbiAgICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uZXJyb3JNZXNzYWdlICYmICFyb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKTtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMsXG4gICAgICAgICAgNTAwMCxcbiAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBAcGFyYW0gaW5kZXggOiBudW1iZXJcbiAgICogQ2xlYXJzIG91dCB0aGUgZWRpdCByb3cgYW5kIHJlcGxhY2Ugd2l0aCByZWFkYWJsZSBvbmVcbiAgICovXG4gIG9uUm93RWRpdENhbmNlbChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCByb3dJbkVkaXRNb2RlOiBib29sZWFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvdz8uaXNOZXcpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF0gPSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgICBkZWxldGUgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIGlmIChyb3dJbkVkaXRNb2RlKSB7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5pbmxpbmVSb3dDYW5jZWwuZW1pdChyb3cpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHJvd0luRWRpdE1vZGUgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbiAmJlxuICAgICAgICBPYmplY3Qua2V5cyhyb3dbY29sdW1uLmZpZWxkXS5hY3Rpb24pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNhYmxlZCA9PT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNhYmxlZCB8fCBjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMucm93c0RhdGEubGVuZ3RoO1xuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbFZhbHVlcyAmJiBjb2xWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdW0gPSBjb2xWYWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKTtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSkge1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBzdW0sICdTdW0nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChcbiAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgIGF2ZXJhZ2UsXG4gICAgICAgICAgICAgICAgICAnQXZnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xuICAgKi9cbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGVjaW1hbEZvcm1hdDogYm9vbGVhbiA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcbiAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uLmZvcm1hdD8uZGlnaXRzSW5mbztcbiAgICBjb25zdCBjYXB0aW9uOiBzdHJpbmcgPVxuICAgICAgY29sdW1uLmNhcHRpb24/Lmxlbmd0aCA+IDAgPyBjb2x1bW4uY2FwdGlvbiA6IGRlZmF1bHRDYXB0aW9uO1xuXG4gICAgY29uc3QgZGVjaW1hbFBvaW50ID0gaXNEZWNpbWFsRm9ybWF0XG4gICAgICA/IHZhbHVlPy50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMilcbiAgICAgIDogdmFsdWU/LnRvRml4ZWQoMCk7XG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyl9IDwvYnI+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcbiAgICovXG4gIHNldE51bWVyaWNWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTsgICAgICAgICAvL1RIRVNFIENPTU1FTlRFRCBPVVQgTElORVMgU0hPVUxEIFJVTiBPTiBTQVZFXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbHVtbiB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gZmllbGRcbiAgICovXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgbGV0IGFycjogYW55ID0gW107XG4gICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgYXJyLnB1c2gocm93W2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBQREZcbiAgICovXG4gIGV4cG9ydFBkZigpIHtcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xuICAgIGxldCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnKTtcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XG4gIH1cblxuICAvKipcbiAgICogIFN1Yi1mdW5jdGlvbiB0byBzZXQgcm93cyBmb3IgZXhwb3J0IHRvIFBkZiwgYW5kIEV4Y2VsXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxuICAgKi9cbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQZGYpIHtcbiAgICAgICAgICByb3dbcHJvcF0gPVxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHJvd1twcm9wXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gRXhjZWxcbiAgICovXG4gIGV4cG9ydEV4Y2VsKCkge1xuICAgIGxldCBleHBvcnREYXRhOiBhbnkgPSB0aGlzLmV4cG9ydERhdGFUb0V4Y2VsKCk7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQoZXhwb3J0RGF0YSk7XG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgICAgZXhwb3J0RGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBsZXQgY29sSW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZTogc3RyaW5nID0gcm93W2NvbC5oZWFkZXJdO1xuICAgICAgICAgIGlmIChjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm93SW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB7XG4gICAgICAgIFNoZWV0czogeyBzaGVldDE6IHdvcmtzaGVldCB9LFxuICAgICAgICBTaGVldE5hbWVzOiBbJ3NoZWV0MSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSB4bHN4LndyaXRlKHdvcmtib29rLCB7XG4gICAgICAgIGJvb2tUeXBlOiAneGxzeCcsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCAnRXhwb3J0Lnhsc3gnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydERhdGFUb0V4Y2VsKCkge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICBjb25zdCBsaW5rT2JqID0gcm93W2NvbHVtbi5kaXNwbGF5VGV4dD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhcnIucHVzaChvYmopO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaW1wb3J0KCdmaWxlLXNhdmVyJykudGhlbigoRmlsZVNhdmVyKSA9PiB7XG4gICAgICBsZXQgRVhDRUxfVFlQRSA9XG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xuICAgICAgc2F2ZUFzKGRhdGEsIGZpbGVOYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcbiAgICovXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgIC8vIGNvbnNvbGUubG9nKCdiZWYgbmV3cm93JylcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcbiAgICAvLyAgY29uc29sZS5sb2coJ2luIGxvb2t1cCBpbnB1dCcpXG4gICAgICBsZXQgb2JqID0gdXRpbGl0aWVzLmF1dG9TZXRMb29rdXBEYXRhKGRhdGEsIHJvdyk7XG4gICAgLy8gIGNvbnNvbGUubG9nKCdvYmonLCByb3dbY29sdW1uLmZpZWxkXSwgJ2RhdGEnLCBkYXRhKVxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxuICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbGluayBvbiBsb29rdXBDb250cm9sIGNvbnRyb2wgaW4gcmVhZCBvbmx5IG1vZGUgd2hlbiBlZGl0TGluayBzZXQgdHJ1ZVxuICAgKi9cbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdvcGVuTG9va3VwSHlwZXJsaW5rOiAnLCByb3cpO1xuICAgIGlmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgJiYgY29sdW1uLmNvbXBvbmVudCkge1xuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcocm93LCBjb2x1bW4sIGNvbHVtbi5kYXRhPy5kYXRhKTtcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBjb2x1bW4uY29tcG9uZW50O1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsb29rdXAgRGlhbG9nXG4gICAqL1xuICBvcGVuTG9va3VwRGlhbG9nKGNvbHVtbj86IGFueSwgcm93OiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGE7XG4gIC8vICAgaWYoYWN0aW9uSGVhZGVyKXtcbiAgLy8gICAgIC8vY29sdW1uRGF0YS5oZWFkZXIgPSBhY3Rpb25IZWFkZXI7XG4gIC8vICB9XG4gIGlmKHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sKXtcbiAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyPyBjb2x1bW5EYXRhLmhlYWRlcj1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyOicnXG4gICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGg/IGNvbHVtbkRhdGEud2lkdGg9cm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoOicnXG4gICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodD9jb2x1bW5EYXRhLmhlaWdodD1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0OicnXG4gICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnNlbGVjdGVkVmFsdWU/IGNvbHVtbkRhdGEuc2VsZWN0ZWRWYWx1ZT1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uc2VsZWN0ZWRWYWx1ZTpcIlwiXG4gICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQ/IGNvbHVtbkRhdGEudmFsdWVGaWVsZD1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVGaWVsZDpcIlwiXG4gICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE/Y29sdW1uRGF0YS5kYXRhPXJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhOicnXG4gICAvLyBjb2x1bW5EYXRhLmxvb2t1cENvbnRyb2w9cm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2xcbiAgfVxuICAgIC8vY29uc29sZS5sb2coJ2NvbHVtbiBkYXRhMicsIGNvbHVtbkRhdGEpXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oY29sdW1uLmNvbXBvbmVudCwge1xuICAgICAgLi4uY29sdW1uRGF0YSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBjb2x1bW4uc2VsZWN0aW9uLFxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcbiAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQsXG4gICAgICAgIC4uLmNvbHVtbi5yb3dEYXRhLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBjb25zdCByb3dEYXRhID0gcm93W2NvbHVtbi5maWVsZF0/Lmxvb2t1cENvbnRyb2w/LmRhdGEgPyByb3dbY29sdW1uLmZpZWxkXT8ubG9va3VwQ29udHJvbD8uZGF0YSA6IHJvd1tjb2x1bW4uZmllbGRdLmRhdGFcbiAgICAvLyBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbY29sdW1uLmZpZWxkXS5jb21wb25lbnQsIHtcbiAgICAvLyAgIC4uLnJvd0RhdGEsXG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIHNlbGVjdGlvbjogcm93W2NvbHVtbi5maWVsZF0uc2VsZWN0aW9uLFxuICAgIC8vICAgICBmaWVsZDogcm93W2NvbHVtbi5maWVsZF0sXG4gICAgLy8gICAgIHZhbHVlRmllbGQ6ICByb3dbY29sdW1uLmZpZWxkXS5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZUZpZWxkLFxuICAgIC8vICAgICAuLi4gcm93W2NvbHVtbi5maWVsZF0ucm93RGF0YSxcbiAgICAvLyAgIH0sXG4gICAgLy8gfSk7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkXT8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5sb29rdXBPYmplY3QgPSB7IHRleHQ6ICcnLCB2YWx1ZTogJycsIGZpZWxkOiAnJyB9O1xuICAgIC8vIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgIC8vICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgLy8gICAgIHJvdyxcbiAgICAvLyAgICAgY29sdW1uLFxuICAgIC8vICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhPy5kYXRhXG4gICAgLy8gICApO1xuICAgIC8vICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudDtcbiAgICAvLyAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xuICAgIC8vIGlmIChyb3dbY29sdW1uLmZpZWxkXS5hY3Rpb24/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxuICAgICAgICByb3csXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSBcbiAgICAgICAgP3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE6Y29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YT8uZGF0YVxuICAgICAgKTtcbiAgICAgXG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50P3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudDpjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqLCByb3cpO1xuICAgICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXMgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICAgIGxldCB2YWx1ZUZpZWxkID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZUZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnNlbGVjdGVkVmFsdWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBsZXQgY29sdW1uRmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbdmFsdWVGaWVsZCA/IHZhbHVlRmllbGQgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbc2VsZWN0ZWRWYWx1ZSA/IHNlbGVjdGVkVmFsdWUgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5sb29rdXBPYmplY3QgPSByb3dbY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgICBpZiAodmFsdWVGaWVsZCB8fCBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHJlc1t2YWx1ZUZpZWxkID8gdmFsdWVGaWVsZCA6IHJlc1t2YWx1ZUZpZWxkXV0sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3NlbGVjdGVkVmFsdWUgPyBzZWxlY3RlZFZhbHVlIDogcmVzW3ZhbHVlRmllbGRdXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlRmllbGQgfHwgc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiByZXNbdmFsdWVGaWVsZCA/IHZhbHVlRmllbGQgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbc2VsZWN0ZWRWYWx1ZSA/IHNlbGVjdGVkVmFsdWUgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBsb29rdXBSb3cgPSB7Li4ucm93fTtcbiAgICAgICAgICBpZih0eXBlb2YgKGxvb2t1cFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICBsb29rdXBSb3dbY29sdW1uLmZpZWxkXSA9IGxvb2t1cFJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSAhPT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgIHZhbHVlOiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMsIGxvb2t1cFJvdywgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICE9PSBvYmouc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2V0RmlsdGVyTG9va3VwKGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRMb29rVXBGaWx0ZXIoY29sdW1uLCB0aGlzLmRpYWxvZ1NlcnZpY2UpO1xuICB9XG5cbiAgLy8gQ2hlY2sgY2FsZW5kZXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcbiAgY2FsZW5kZXJDaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4udGltZU9ubHkgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjb2x1bW4uc2hvd1RpbWUgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBoaDptbScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkIGhoOm1tJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlID0gJyc7XG4gIH1cbiAgb25BdXRvQ29tcGxldGVGb2N1c091dChlLCBjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICBpZiAoY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJiBlLnRhcmdldC52YWx1ZSAmJiAhY29sdW1uLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vL2NoZWNrIHRoZSBjb3JyZWN0IGZvcm1hdCBpZiBkYXRhLmNvbnRhaW5zIGN1eiBpdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggb2JqZWN0cy5cbiAgICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke2UudGFyZ2V0LnZhbHVlfSB0byB0aGUgc2VsZWN0aW9uP2ApKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi51bmlxdWVLZXkpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgICAgICAuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgZS50YXJnZXQudmFsdWUsIGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGUudGFyZ2V0LnZhbHVlLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgfHwgKCFjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KFtjb2x1bW5dLCByb3cpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLmNhbGVuZGVyQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5vbkZvY3VzT3V0KSB7XG4gICAgICAgIGNvbHVtbi5vbkZvY3VzT3V0KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4ub25SZXR1cm4gJiZcbiAgICAgICAgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVRcbiAgICAgICkge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgaWYoY29sPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQpe1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0R3JpZEZpbHRlcihjb2wsIGZpbHRlciwgZXZlbnQpO1xuICAgICAgfSwyNTApO1xuICAgIH1lbHNlIHtcbiAgICAgIHRoaXMuc2V0R3JpZEZpbHRlcihjb2wsIGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNldEdyaWRGaWx0ZXIoY29sOiBJR3JpZENvbHVtbiwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSl7XG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcbiAgICAvL2NoYW5nZSBmaWx0ZXIgY2FsZW5kZXIgZm9ybWF0XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLnZhbHVlKSB7XG4gICAgICBuZXdDb2x1bW4udmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgY29sLnZhbHVlLnRvU3RyaW5nKCkudHJpbSgpLFxuICAgICAgICAneXl5eS1NTS1kZCdcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyT2JqKG5ld0NvbHVtbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgfVxuXG4gIGZpbHRlck9iaihjb2w6IGFueSkge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICBtYXRjaE1vZGU6IGNvbC5tYXRjaE1vZGUgPyBjb2wubWF0Y2hNb2RlIDogJ3N0YXJ0c1dpdGgnLFxuICAgICAgb3BlcmF0b3I6IGNvbC5vcGVyYXRvciA/IGNvbC5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgdGFibGVBbGlhczogY29sLnRhYmxlQWxpYXMgPyBjb2wudGFibGVBbGlhcyA6ICcnLFxuICAgICAgdmFsdWU6IGNvbC52YWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnB1c2gob2JqKTtcbiAgfVxuXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHsgIFxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSB0aGlzLmRyb3BEb3duRmlsdGVyPy5jb2x1bW4/LmZpbHRlcj8udHlwZSkge1xuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICBmaWx0ZXIoZXZlbnQ/LmNoZWNrZWQpO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICBmaWx0ZXIoZXZlbnQ/LnRhcmdldD8udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW46IElHcmlkQ29sdW1uLCBmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgIChjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XG4gICAgICAgIGNvbHVtbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJycgfHxcbiAgICAgICAgY29sdW1uLnZhbHVlID09PSBudWxsKVxuICAgICkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xuICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCgoaSkgPT4gaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZpbmcgSGVhZGVyIEZpbHRlciBWYWx1ZSB1c2luZyBCYWNrc3BhY2Uga2V5IEV2ZW50IG9yIERlbGV0ZSBrZXkgRXZlbnQuXG4gIHJlbW92aW5nRmlsdGVycyhldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKFxuICAgICAgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRGVsZXRlJykgJiZcbiAgICAgIGNvbHVtbi52YWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCkpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCldO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaEZpbHRlcnMgJiYgc2VhcmNoRmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBpbmRleCA9IHNlYXJjaEZpbHRlcnMuZmlsdGVycy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCldID0gW107XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCksIEpTT04uc3RyaW5naWZ5KHNlYXJjaEZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxuICBvbkNsaWNrQnV0dG9uKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLCByb3cpO1xuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2xpY2sgRXZlbnQuXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2UgJiYgY29sdW1uLmVkaXRhYmxlICE9PSBmYWxzZSAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgIGEudGFyZ2V0ID0gXCJfYmxhbmtcIjtcbiAgICAgIGEuY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIXJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcbiAgICAgIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLnRpbWVPbmx5KSAmJlxuICAgICAgY29sdW1uLm1pbnV0ZXNJbnRlcnZhbFxuICAgICkge1xuXG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUpIHtcblxuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcbiAgc2hvd09wdGlvbihjb2x1bW4sIHJvdykge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcInN0cmluZ1wiICYmICFyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DbGVhclZhbHVlKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmICFyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludm9rZSBvbkNoYW5nZSBFdmVudFxuICBvbkNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICAgIHRoaXMuZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSBmYWxzZVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0JveENoYW5nZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XG4gICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXG4gICAgICAgIChyb3dJbmZvKSA9PlxuICAgICAgICAgIHJvd0luZm8/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcbiAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgY29sdW1uICYmIHJvdykge1xuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVmcmVzaCBncmlkXG4gIHJlZnJlc2hHcmlkKCkge1xuICAgIHRoaXMucmVsb2FkUGFnZSA9IGludGVydmFsKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRmaWx0ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IHsgZmlsdGVyczogW10sIHNvcnRzOiBbXSB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xuICBjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKSB7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xuICAgICk7XG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZUVkaXRBbGxSb3dzQnRuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cblxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnNhdmVSZWNvcmRBcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheSA9IFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAyMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lID09ICdjYW5jZWxSb3cnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgLy9Gb2N1c2VkIGNhbGVuZGVyIGlucHV0IG9uIHNlbGVjdCBkYXRlXG4gIHNlbGVjdERhdGUoY29sdW1uOiBhbnkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpPy5mb2N1cygpO1xuICB9XG5cbiAgLy9hcHBseSBmaWx0ZXIgb24gZ3JpZCB3aGVuIHNlYXJjaCBidG4gY2xpY2tlZFxuICBhcHBseUdpcmRGaWx0ZXJCdG4oKSB7XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5ncmlkRmlsdGVyT2JqICYmIE9iamVjdC5rZXlzKHRoaXMuZ3JpZEZpbHRlck9iaikubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5maWx0ZXIsXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2UgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55LCBldmVudDogYW55LCBzaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiByb3dJbmZvPy5sZW5ndGggPiAwICYmIGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnJvd0luZm9dO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiBldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCAmJiAhdGhpcy5jaGVja2xpc3Quc29tZSgocm93KSA9PiByb3cuaWQgPT0gcm93SW5mby5pZCkpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QucHVzaChyb3dJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja2xpc3Quc29tZSgocm93KSA9PiByb3c/LmlkID09IHJvd0luZm8uaWQpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrbGlzdC5maW5kSW5kZXgoKHJvdykgPT4gcm93Py5pZCA9PSByb3dJbmZvPy5pZCk7XG4gICAgICAgICAgdGhpcy5jaGVja2xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtyb3dJbmZvXVxuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZXRSb3dzRGF0YShyb3dJbmZvKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0Um93c0RhdGEocm93c0RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzRGF0YSkpIHtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgaWYgKGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJvdyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIGFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBmaWx0ZXIoZXZlbnQudGFyZ2V0KTtcbiAgfVxuXG4gIHNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcbiAgICB0aGlzLmRyb3BEb3duRmlsdGVyID0geyBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50LCBjb2x1bW46IGNvbHVtbiB9O1xuICAgIGlmIChjb2x1bW4uYWxsb3dTZWFyY2ggIT09IHRydWUpIHtcbiAgICAgIHRoaXMuYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBDbGVhclZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdz86IGFueSkge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKHRoaXMuZWRpdEFsbFJlY29yZCkge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU5cbiAgICAgICAgJiZcbiAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjaGVja2JveCcgJiYgY29sdW1uLmZpbHRlcmluZyAhPSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25DaGVja0JveEZpbHRlckNsaWNrLmVtaXQoY29sdW1uKTtcbiAgfVxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBzZXRIZWFkZXJDaGVja0JveFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzSW5jbHVkZWRBbGxDb2x1bW5zLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLy8gc2V0IGNhbGVuZGVyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxuICBjYWxlbmRlcklucHV0VmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICBjb25zdCB5ZWFyID0gdmFsPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95JztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5cblxuIl19
|
|
2593
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFTTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGtCQUFrQixFQUVsQixjQUFjLEVBRWQsZUFBZSxFQUdmLGNBQWMsRUFDZCxxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixD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LE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsRUFBQztZQUNoRSxDQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLE1BQU0sRUFBQSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBQyxNQUFBLE1BQUEsTUFBQSxNQUFBLEdBQUcsQ0FBQyxNQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsSUFBSSwwQ0FBRSxNQUFNLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQTtZQUNoTCxDQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLEtBQUssRUFBQSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBQyxNQUFBLE1BQUEsTUFBQSxNQUFBLEdBQUcsQ0FBQyxNQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsSUFBSSwwQ0FBRSxLQUFLLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQTtZQUMzSyxDQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsR0FBRyxDQUFDLE1BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDBDQUFFLFdBQVcsRUFBRSxDQUFDLDBDQUFFLE1BQU0sMENBQUUsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLE1BQU0sRUFBQSxDQUFDLENBQUEsVUFBVSxDQUFDLE1BQU0sR0FBQyxPQUFBLE1BQUEsTUFBQSxNQUFBLEdBQUcsQ0FBQyxNQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSywwQ0FBRSxXQUFXLEVBQUUsQ0FBQywwQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsSUFBSSw0Q0FBRSxNQUFNLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQTtZQUM5SyxDQUFBLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJQUFJLDRDQUFFLGFBQWEsRUFBQSxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBQyxPQUFBLE9BQUEsT0FBQSxPQUFBLEdBQUcsQ0FBQyxPQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyw0Q0FBRSxXQUFXLEVBQUUsQ0FBQyw0Q0FBRSxNQUFNLDRDQUFFLGFBQWEsNENBQUUsSUFBSSw0Q0FBRSxhQUFhLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQTtZQUNwTSxDQUFBLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJQUFJLDRDQUFFLFVBQVUsRUFBQSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBQyxPQUFBLE9BQUEsT0FBQSxPQUFBLEdBQUcsQ0FBQyxPQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyw0Q0FBRSxXQUFXLEVBQUUsQ0FBQyw0Q0FBRSxNQUFNLDRDQUFFLGFBQWEsNENBQUUsSUFBSSw0Q0FBRSxVQUFVLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQTtZQUMzTCxDQUFBLE9BQUEsT0FBQSxPQUFBLE9BQUEsR0FBRyxDQUFDLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLDRDQUFFLFdBQVcsRUFBRSxDQUFDLDRDQUFFLE1BQU0sNENBQUUsYUFBYSw0Q0FBRSxJ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TUFBTTtrQ0E2Qk4sWUFBWSxTQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBEeW5hbWljRGlhbG9nUmVmLFxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICBEaWFsb2dTZXJ2aWNlLFxufSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSUdyaWRDb2x1bW4sXG4gIElHcmlkU29ydCxcbiAgSUdyaWRTZXJ2ZXJTaWRlRXZlbnQsXG4gIElHcmlkUGFnaW5hdGlvbkV2ZW50LFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRDb2x1bW5BY3Rpb24sXG4gIElHcmlkUm93QWN0aW9uLFxuICBFR3JpZFNlbGVjdGlvblR5cGUsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBJR3JpZERhdGFFeHBvcnQsXG4gIEVHcmlkQWdncmVnYXRlLFxuICBJTG9va3VwVmFsdWUsXG4gIEVHcmlkRm9ybWF0VHlwZSxcbiAgSUdyaWRGaWx0ZXJJbmZvLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgRUZvcm1hdFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBPdXRwdXQoKSBpbmxpbmVSb3dDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W107XG4gIHJvd3NEYXRhQ29weTogYW55W10gPSBbXTtcbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzQ29sdW1uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XG4gIGNvbXBvbmVudFRhYmxlUmVmOiBhbnk7XG4gIGxvb2t1cE9iamVjdDogSUxvb2t1cFZhbHVlO1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGVyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgZ3JpZGZpbHRlcjogYW55O1xuICBkcm9wRG93bkZpbHRlcjogYW55ID0ge307XG4gIGRyb3Bkb3duSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZUFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBlZGl0QWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbmNlbEFsbFJlY29yZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5FZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlUmVjb3JkQXJyYXk6IGFueVtdID0gW107XG4gIGRpc2FibGVkU2F2ZUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWxlY3RlZEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQ2hlY2tlZDogYm9vbGVhbiA9IHRydWVcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2VcbiAgZWRpdE1vZGVDaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9ICdtbS9kZC95JztcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcblxuICBoaWRlRWRpdEFsbFJvd3NCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gQXBwbHkgcHJvcCBzZXRBZ2dyZWdhdGVGb290ZXIgb24gRm9vdGVyIG9mIHRoZSBUYWJsZSBmb3IgYWdncmVnYXRlLlxuICBzZXRBZ2dyZWdhdGVGb290ZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBIaWRlIEFnZ3JlZ2F0ZSBGb290ZXIgV2hlbiBBZ2dyZWdhdGUgbm90IEFwcGx5IG9uIFRhYmxlLlxuICBhZ2dyZWdhdGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBNYWludGFpbnMgcHJldmlvdXMgc3RhdGUgb2Ygcm93cyBiZWluZyBlZGl0ZWRcbiAgZWRpdFJvd3NSZWNvcmRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcHVibGljIHNob3dSZWZyZXNoQnRuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcHVibGljIGhpZGVSZWZyZXNoQnRuOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBTdG9yZXMgc2VsZWN0ZWQgY29sdW1uc1xuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcbiAgdmlzaWJsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGhvcml6b250YWwgU2Nyb2xsIG9uIFRhYmxlLlxuICBASW5wdXQoKSBob3Jpem9udGFsU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRGVsZXRlQnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGVkaXQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUVkaXRCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVBZGRCdG4gPSBmYWxzZTtcblxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcbiAgQElucHV0KCkgYXV0b0xvYWREYXRhOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ2lkJztcblxuICAvLyBGbGFnIGZvciBjbGVhciBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBjbGVhckdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgZm9yIHNlYXJjaCBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBzZWFyY2hHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGluIGNhc2UgdGFibGUgaXMgc2Nyb2xsYWJsZVxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvLyBTZXRzIHNjcm9sbCBoZWlnaHQgZm9yIHRoZSB0YWJsZVxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnNjgwcHgnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyB0byB3cmFwIG9yIHVuV3JhcCB0aGUgZ3JpZC5cbiAgQElucHV0KCkgd29yZFdyYXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBuZXdHcmlkUm93OiBhbnkgPSB7fTtcblxuICBASW5wdXQoKSBmaWx0ZXJpbmcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHJlcG9ydEJ1dHRvbnM6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgcm93SG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBoaWRlRmlsdGVyT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldHMgcGFnZW5hdGlvbiBmb3IgdGhlIHRhYmxlIERhdGEuXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcblxuICAvLyBzZXQgdGhlIGNoYW5nZSBpbiB0aGUgcm93RGF0YVxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkKSB7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcbiAgICAgICAgICB0aGlzLmRhdGFLZXkgPSAnaWQnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYW5pbmcgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICAgIC8vIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzID0ge307XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRSZWYgPSB0aGlzLmdyaWRSb3cuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuc2VsZWN0ZWRSb3dzW3RoaXMuZGF0YUtleV1cbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZiAmJlxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50XG4gICAgICAgICAgICApLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcblxuICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwge30sIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgICAgIHRoaXMuY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckRhdGEoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKSB7XG4gICAgdGhpcy5nbG9iYWxEYXRhID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXG4gICAgICA/LmZpbHRlcigoeCkgPT4geD8udmFsdWUgIT09IGZhbHNlKTtcbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcbiAgICAgID8gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSlcbiAgICAgIDogdGhpcy5nbG9iYWxEYXRhO1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Py5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXG4gICAgICAgIDogdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk7XG4gICAgfVxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJzLmZvckVhY2goKGdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5mb3JFYWNoKChmaWx0ZXJBcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckFycmF5LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiZcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSAmJlxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgPSBnbG9iYWxGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJiAhZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcbiAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAubWFwKChmaWx0ZXI6IGFueSkgPT4gZmlsdGVyLmZpZWxkKVxuICAgICAgICAgIClcbiAgICAgICAgKS5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maWx0ZXIoXG4gICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXM7XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlID0gMTtcbiAgICAgICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZVNpemUgPSB0aGlzLmRlZmF1bHRSb3dzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcylcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2FwcGx5RmlsdGVyJyk7XG4gICAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXG4gICAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xuICAgICAgICB9XG4gICAgICAvLyB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxuICBASW5wdXQoKSBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XG5cbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2F2ZUFsbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXG4gIEBJbnB1dCgpIGRlZmF1bHRSb3dzOiBudW1iZXI7XG5cbiAgQElucHV0KCkgY29sdW1uQWN0aW9uczogSUdyaWRDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xuICBASW5wdXQoKSB1c2VTZXJ2ZXJTaWRlRXZlbnRzID0gZmFsc2U7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGhhbmRsZSByb3cgY2xpY2tcbiAgQE91dHB1dCgpIG9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCBlbWl0IHdoZW4gY2xpY2sgb24gZ3JpZCBjaGVja2JveCBmaWx0ZXJcbiAgQE91dHB1dCgpIG9uQ2hlY2tCb3hGaWx0ZXJDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGhhbmRsZSByb3cgQ2hlY2tCb3hcbiAgQE91dHB1dCgpIG9uUm93Q2hlY2tCb3g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHNvcnQgY2hhbmdlXG4gIEBPdXRwdXQoKSBvblNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIGZpbHRlciBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uRmlsdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaW52b2tlIHRoZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBAT3V0cHV0KCkgb25NdWx0aVNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBncmlkIGFuZCBnbG9iYWxGaWx0ZXJzIGNhbGxlZFxuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgQE91dHB1dCgpIGlzSW5jbHVkZWRBbGxDb2x1bW5zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGxhenkgZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICBAT3V0cHV0KClcbiAgb25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNlcnZlclNpZGVFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBwYWdpbmF0aW9uXG4gIEBPdXRwdXQoKVxuICBvblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFBhZ2luYXRpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZWRpdCByb3dcbiAgQE91dHB1dCgpIG9uUm93VXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIGNhbmNlbCBhbGwgcm93c1xuICBAT3V0cHV0KCkgb25DYW5jZWxBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGRlbGV0ZSByb3dcbiAgQE91dHB1dCgpIG9uUm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQsIHVwZGF0ZSBhbmQgZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25HcmlkUm93QWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgcHJvcGVydHkgYWxsb3dDYWNoaW5nIGZvciBMb2NhbFN0b3JhZ2VcbiAgQElucHV0KCkgYWxsb3dDYWNoaW5nOiBib29sZWFuO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBzb2Z0Q2FjaGluZyBmb3Igc2V0dGluZyB0aGUgdmFsdWVzIG9mIGdyaWRGaWx0ZXJcbiAgQElucHV0KCkgc29mdENhY2hpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGVkaXRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgaXNHcmlkSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IHZhbC5pbmNsdWRlcyhjb2wpKTtcbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGF1dG9tYXRpY2FsbHkgcmVsb2FkIGdyaWQgYWZ0ZXIgOSBzZWNvbmRzLlxuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9uUm93VXBkYXRlPy5vYnNlcnZlcnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhpZGVFZGl0QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXROdW1lcmljVmFsdWVzKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkKSB7XG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XG4gICAgICB9XG4gICAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XG4gICAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcblxuICAgICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICAgICAgdGhpcy5hcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpO1xuXG4gICAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcblxuICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbik7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgaWYgKGhhc0NvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWVsZHModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgLy8gY2hlY2tpbmcgZmlsdGVyIGV4aXN0IG9yIG5vdFxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMuc29tZShcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuaGlkZUZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCBpc1JlcXVpcmVkIHRydWUgZm9yIHJlcXVpcmVkIGNvbHVtbiB0byBzaG93IGFzdHJpYyBpbiBjb2x1bW4gaGVhZGVyXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uID0+IHZhbGlkYXRpb24udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IG51bWVyaWMgbnVsbCBvciB1bmRlZmluZSBkYXRhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQ3x8Y29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8Y29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5URVhUfHxjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkfHxjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEV8fGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pICYmIGNvbHVtbi52YWx1ZSAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4ubWludXRlc0ludGVydmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0uYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50ZXh0ID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0/LnRleHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLnZhbHVlICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFkZCBcImZsZXgtc2hyaW5rOiAwXCIgZm9yIGZsZXgtYmFzaXMgU3R5bGVcbiAgICAgICAgICAvLyBpZiAoY29sdW1uLnN0eWxlICYmIGNvbHVtbi5zdHlsZS5pbmNsdWRlcygnZmxleC1iYXNpcycpKSB7XG4gICAgICAgICAgLy8gICBsZXQgc3R5bGUgPSBjb2x1bW4uc3R5bGUgKyAnICFpbXBvcnRhbnQ7IGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQnO1xuICAgICAgICAgIC8vICAgY29sdW1uLnN0eWxlID0gc3R5bGUuaW5jbHVkZXMoJzs7JylcbiAgICAgICAgICAvLyAgICAgPyBzdHlsZS5yZXBsYWNlKCc7OycsICc7JylcbiAgICAgICAgICAvLyAgICAgOiBzdHlsZTtcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKSBhcyBhbnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzXCIsdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnMpO1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmhpZGVGaWx0ZXIgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguZmllbGQgPT09IGNvbHVtbi5maWVsZCkgeyAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiB4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LnZhbHVlLCAnTU0tZGQtWVknKSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aGF0IGNvbnRhaW5zIGNvbW1hIGludG8gYXJyYXlzXG4gICAgICAgICAgICBpZihyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOycpKXtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZihjb2x1bW4uZGlzcGxheUZpZWxkKXtcbiAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0sIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIGlmKGNvbHVtbi5vcHRpb25MYWJlbCl7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL3doZW4gd2UgYWRkIGEgbmV3IHJvdywgaXQgc2V0IHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHRoaXMubmV3R3JpZFJvdykuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHggPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChrZXkgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3R3JpZFJvd1trZXldID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VhcmNoaW5nIHNjZW5hcmlvXG4gICAgICAgIGlmIChjaGFuZ2Uucm93cz8uY3VycmVudFZhbHVlICYmIGNoYW5nZS5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAvLyBDaGVja3MgZWl0aGVyIGNvbHVtbiB2YWx1ZSBpcyBjaGFuZ2VzIChpLmUuLCBjb2x1bW4gaGlkZGVuIHNjZW5hcmlvKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZSkudG9Mb3dlckNhc2UoKSAhPT1cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXguaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2xhc3NFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0ZWQtcm93Jyk7XG4gICAgICAgICAgaWYgKGNsYXNzRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc0VsZW1lbnRbMF0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSB0cnVlO1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbi5vcHRpb25MYWJlbCkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBjb2x1bW4uZmllbGQ7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFsuLi5yb3dbY29sdW1uLmZpZWxkXSwge1xuICAgICAgICBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldLFxuICAgICAgICBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93W2NvbHVtbi5maWVsZF0/LmZpbmRJbmRleCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICBzZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLklGUkFNRVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgY29sdW1uLmRpc3BsYXlUZXh0LmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xuICAgIGxldCBkaWdpdEluZm8gPSAnMic7XG4gICAgaWYgKGNvbHVtbj8uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgZGlnaXRJbmZvID0gJzAnXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBkaWdpdEluZm8gPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvO1xuICAgIH1cbiAgICByZXR1cm4gZGlnaXRJbmZvO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxuICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHJvdyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IG51bGwpXG4gICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICh0aGlzLnR5cGVPZih2YWx1ZSkgPT09ICdudW1iZXInICYmIHZhbHVlID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGxldCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgbGV0IGRpZ2l0c0luZm8gPSBmb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdD8udHlwZSkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0UGFyYW1zPy5jdXJyZW5jeSA/IGZvcm1hdFBhcmFtcy5jdXJyZW5jeSA6ICdVU0QnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL0NoYW5nZSBkcm9wZG93biB2bHVlIGJhc2VkIG9uIG9wdGlvbiBsYWJlbCBhbmQgb3B0aW9udmFsdWVcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFJvdz86IGFueSwgY2hhbmdlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5ID09PSBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiBlZGl0ZWRSb3cpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5zICYmXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYoIXRoaXMuZWRpdEFsbFJvd3Mpe1xuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW5EYXRhXG4gICAqIFBhc3NlcyBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIHBhcmVudCBvbiBzb3J0IGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlU29ydENoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSBudWxsO1xuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChldmVudC5tdWx0aXNvcnRtZXRhICYmIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIpIHtcbiAgICAgIHNvcnREaXJlY3Rpb24gPVxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcbiAgICAgICAgICA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0NcbiAgICAgICAgICA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDO1xuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcbiAgICB9XG4gICAgbGV0IHNvcnRzOiBJR3JpZFNvcnQgPSB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG4gICAgdGhpcy5vblNvcnRDaGFuZ2UuZW1pdChzb3J0cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIGZpbHRlcnMgdG8gcGFyZW50IG9uIGZpbHRlciBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LmZpbHRlcnNbZmlsdGVyLmZpZWxkXT8udmFsdWUgJiYgIWZpbHRlci52YWx1ZSkge1xuICAgICAgICBmaWx0ZXIudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IEV2ZW50XG4gICAqIEBwYXJhbSBjb2x1bW5BY3Rpb24gOiBJR3JpZENvbHVtbkFjdGlvblxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIFN0b3AgdGhlIGNsaWNrIGV2ZW50IHByb3BhZ2F0aW9uIHRvIHBhcmVudFxuICAgKiBDYWxsYmFja3MgdGhlIHJvdyBkYXRhIHRvIHBhcmVudFxuICAgKi9cblxuICAvKipcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXG4gICAqL1xuICBncmlkSUZyYW1lKGNvbHVtbjogYW55LCByb3dzOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKElmcmFtZUNvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgd2lkdGg6ICc4MCUnLFxuICAgICAgaGVpZ2h0OiAnODAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IHJvd3MsXG4gICAgICAgIGlGcmFtZUlkOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiBjb2x1bW4uZmllbGQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICB9IGVsc2UgaWYgKHJlcyAmJiBjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhZGROZXdSb3cocm93OiBhbnksIGFkZFJvdzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLmZpbHRlciAmJlxuICAgICAgICBjb2x1bW4uY29tcG9uZW50ICYmXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChhZGRSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEaWFsb2cgaW4gZ3JpZFxuICAgKi9cbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICAgIGlmIChjb2x1bW4uZGF0YSAmJiBjb2x1bW4uZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIGNvbHVtbi5kYXRhICYmIHRoaXMucm93Q2xpY2tEYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmNvbHVtbi5kYXRhIH07XG4gICAgICAgIGRhdGEuZGF0YSA9IHV0aWxpdGllcy5hdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhLFxuICAgICAgICAgIHRoaXMucm93Q2xpY2tEYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDEwKTtcbiAgfVxuXG4gIGJyb3dzZXJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBldmVudDtcbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk/Lm1hcCgodmFsdWUpID0+IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbCk/LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpKT8ubGFiZWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBjb25kaXRpb25hbCBiYXNlIHZhbHVlIGFuZCB0aXRsZVxuICAgKi9cbiAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgbGV0IG5ld1ZhbHVlOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwib2JqZWN0XCIgJiYgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbikge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy50ZXh0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5zZXRGb3JtYXQoY29sdW1uKTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiAnTU0vZGQveXknKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XG4gICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICA/IGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyA/XG4gICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IGNvbHVtbi5pY29uID8gY29sdW1uLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQvWVksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXG4gICAqL1xuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbHVtbkFjdGlvbi50b29sdGlwLnRvTG93ZXJDYXNlKCkgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXG4gICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRmaWx0ZXIgPSBldmVudDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycyA9IHtcbiAgICAgICAgZmlsdGVyczogdGhpcy5sb29rdXBGaWx0ZXJzXG4gICAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucylcbiAgICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2UucHJlcGFyZUJhc2ljRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICBzb3J0czogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU29ydHMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcbiAgICAgICAgLi4uKHRoaXMucGFnaW5hdGlvbiAmJiB7XG4gICAgICAgICAgcGFnZTogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkUGFnaW5hdGlvbihldmVudCksXG4gICAgICAgICAgcGFnZVNpemU6IGV2ZW50LnJvd3MgfHwgMTAsXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcbiAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXG4gICAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCldID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHV0aWxpdGllcy5jdXJyZW50VXJsKCldID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9ICh0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyB8fCBbXSkuY29uY2F0KFxuICAgICAgICB0aGlzLmdsb2JhbERhdGFcbiAgICAgICk7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgfSwgOTUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93Q2hlY2tCb3guZW1pdChyb3cpO1xuICB9XG5cbiAgLy8gc2V0IHRpbWUgZm9ybWF0XG4gIHNldFRpbWVGb3JtYXQoZGF0ZTogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcbiAgICBpZiAoZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCBkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdoaDptbSBhJyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vb3BlbiBoeXBlcmxpbmsgaW4gZWRpdCBjYXNlXG4gIG9wZW5MaW5rKHVybDogYW55KSB7XG4gICAgaWYgKHVybCkge1xuICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgbGluay5ocmVmID0gdXJsO1xuICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZXRzIHZhbHVlcyB0byBlZGl0YWJsZSByb3dcbiAgICogUm93J3MgZGF0YSBpcyBwcmVzZXZlZCB0byBwcmV2ZW50IG11dGF0aW9uXG4gICAqIFJvdyBkYXRhS2V5IGlzIHByZXNlcnZlZCB0byBrZWVwIHRoZSByb3cgdW5pcXVlIGFuZCBpbiBlZGl0YWJsZSBzdGF0ZSBhcyBsb25nIGFzIG5vdCBzYXZlZFxuICAgKi9cblxuICByZWZyZXNoR3JpZFRlcm1pbmF0b3IoKSB7XG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlbG9hZFBhZ2U/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Sb3dFZGl0SW5pdChyb3c6IGFueSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgICBsZXQgc2VsZWN0ZWRSb3cgPSB7IC4uLnJvdyB9O1xuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkUm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNldERyb3Bkb3duRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlclZhbHVlKGNvbCwgcm93LCBrZXkpO1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGF1dG9Db21wbGV0ZSBWYWx1ZSBpbiBlZGl0IG1vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoY29sLmRpc3BsYXlGaWVsZCl7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2wuZmllbGRdLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICByb3dbY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ190ZW1wJ10gPSByb3dbY29sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2wuZGlzcGxheUZpZWxkXSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlLm1hcCgoeDogYW55KSA9PiB4W2NvbC5kaXNwbGF5RmllbGRdKTtcbiAgICAgICAgICBpZiAobmV3VmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykpIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcbiAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgID8ucmVwbGFjZUFsbCgnOycsICcsJylcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgID8ubWFwKCh4OiBhbnkpID0+ICh7IFtjb2wuZGlzcGxheUZpZWxkID8gY29sLmRpc3BsYXlGaWVsZCA6IGNvbC5maWVsZF06IHgsIFtjb2wuZmllbGQrICdfdGVtcCddOiB2YWx1ZVswXVtjb2wuZmllbGRdIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBsb29rdXAgY29udHJvbCBmaWVsZCBiYXNlZCBvbiBkaXNwbGF5IGZpZWxkLlxuICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09IGtleSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHJvd1tjb2wuZGlzcGxheUZpZWxkXSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJvd1tjb2wuZmllbGRdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICAgIGxldCBvcHRpb24gPSBjb2w/LmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlPy5hY3Rpb24gPyB2YWx1ZS50ZXh0IDogdmFsdWU7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleV0/LmFjdGlvbiAmJiBPYmplY3Qua2V5cyhyb3dba2V5XT8uYWN0aW9uKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByb3dba2V5XS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayB0aGUgTWludXRlcyBwYXR0ZXJuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGNvbC5zaG93VGltZSB8fCBjb2wudGltZU9ubHkpICYmXG4gICAgICAgICAgICBjb2wubWludXRlc0ludGVydmFsICYmXG4gICAgICAgICAgICByb3dba2V5XVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKHJvd1trZXldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbC5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiZcbiAgICAgICAgICBjb2wuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAoY29sLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2wuYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbC5lZGl0TGluayA9PT0gZmFsc2UgfHwgY29sLmVkaXRMaW5rID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XG4gICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZHJvcGRvd24gZmlsdGVyIHZhbHVlXG4gICAqL1xuICBzZXREcm9wZG93bkZpbHRlclZhbHVlKGNvbDogYW55LCByb3c6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiBjb2wuZHJvcERvd25Qcm9wKSB7XG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7XG4gICAgICAgIGxldCBvYmogPSBjb2wuZHJvcERvd25Qcm9wO1xuICAgICAgICBsZXQgbmV3RmlsdGVyczogYW55ID0gW107XG4gICAgICAgIGlmIChvYmouZmlsdGVycyAmJiBvYmouZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb2JqLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdGaWx0ZXIgPSB7IC4uLmZpbHRlciB9O1xuICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKHJvdykuZmluZCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleTogc3RyaW5nID0gJyc7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWU/LmluY2x1ZGVzKCd7JykgJiZcbiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hLZXkgPSBrZXk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoS2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyS2V5KSB7XG4gICAgICAgICAgICAgIG5ld0ZpbHRlci52YWx1ZSA9IHJvd1tmaWx0ZXJLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3RmlsdGVycy5wdXNoKG5ld0ZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgb2JqLnVuaXF1ZUtleSxcbiAgICAgICAgICBvYmoudmFsdWVQcm9wLFxuICAgICAgICAgIG9iai5sYWJlbFByb3AsXG4gICAgICAgICAgbmV3RmlsdGVycyxcbiAgICAgICAgICByb3dcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgb3B0aW9uID0gY29sLmRhdGEuZmluZChcbiAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBQYXNzZXMgdGhlIGVkaXRlZCBvciBuZXdseSBjcmVhdGVkIGRhdGEgdG8gcGFyZW50XG4gICAqIEluIGNhc2Ugb2YgbmV3bHkgY3JlYXRlZCBkYXRhLCBkYXRhS2V5IGFuZCBpc05ldyBwcm9wIGlzIHJlbW92ZWRcbiAgICovXG4gIG9uUm93RWRpdFNhdmUoc2VsZWN0ZWRSb3c6IGFueSkge1xuICAgIGxldCBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbXTtcbiAgICBsZXQgbG9va3VwSW5mbyA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgdGhpcy5sb29rdXBPYmplY3QgJiYgXG4gICAgICAgICF0aGlzLmVkaXRBbGxSb3dzXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMubG9va3VwT2JqZWN0LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnY2hhcicpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJ1knIDogJ04nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdudW1lcmljJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnMScgOiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0ZWRSb3cgPSB7IC4uLnNlbGVjdGVkUm93LCBbY29sdW1uLmZpZWxkXTogdmFsdWUgfTtcbiAgICAgIH1cblxuICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICkge1xuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIGFsbG93Q2FsY3VsYXRlPXRydWUsIGRpdmlkZSB0aGUgcGVyY2VudCBieSAxMDBcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAodGhpcy5sb29rdXBPYmplY3QgJiYgdGhpcy5sb29rdXBPYmplY3QuZmllbGQpIHtcbiAgICAgICAgcm93W3RoaXMubG9va3VwT2JqZWN0LmZpZWxkXSA9IHRoaXMubG9va3VwT2JqZWN0LnZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqICYmXG4gICAgICAgICAgKG9iai50eXBlID09PSAnbGluaycgfHxcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnaWZyYW1lJyB8fFxuICAgICAgICAgICAgb2JqLnR5cGUgPT09ICdkaWFsb2cnKVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBqdXN0IGVtaXQgdGhvc2UgZmllbGRzIHdobyBleGlzdCBpbiB0aGUgdGFibGVcbiAgICAgKi9cbiAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIGNvbHVtbi5maWVsZCAmJlxuICAgICAgICB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgbG9va3VwSW5mbyA9IHsgLi4ucm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCAhdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLmdyaWRWYWxpZGF0aW9uKHRoaXMuY29sdW1ucywgcm93KTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gc2V0IHRoZSBncmlkIHVwZGF0ZWQvaW5zZXJ0ZWQgZGF0YVxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAocm93LmlzTmV3IHx8IHJvdy5pc25ldykge1xuICAgICAgICBjb25zdCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIGlmICghdGhpcy5hZGREYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgbmV3Um93T2JqW3RoaXMuZGF0YUtleV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChuZXdSb3dPYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25Sb3dBZGQuZW1pdChuZXdSb3dPYmopO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0aGlzLmVkaXRBbGxSb3dzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSkge1xuICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IHRydWU7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IGF1dG9jb21wZWxldCBhcnJheSBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBhdXRvbUNvbXBsZXRlVGVtcERhdGE7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IExPT0tVUF9JTlBVVCBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBsb29rdXBJbmZvO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoY29sdW1ucywgcm93KSkge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHM6IHN0cmluZyA9ICcnO1xuICAgICAgY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHMgPyBlcnJvck1lc3NhZ2VEZXRhaWxzICsgJyAsICcgKyBjb2x1bW4uZXJyb3JNZXNzYWdlIDogY29sdW1uLmVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGxldCBpc1JlcXVpcmVkID0gY29sdW1ucy5zb21lKFxuICAgICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5lcnJvck1lc3NhZ2UgJiYgIXJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlubGluZVJvd0NhbmNlbC5lbWl0KHJvdyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uc1xuICAgKi9cblxuICAvKipcbiAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXG4gICovXG4gIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBhY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSkgPT4gcm93SW5mb1t0aGlzLmRhdGFLZXldID09PSByb3dEYXRhW3RoaXMuZGF0YUtleV0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBpZiAoZGVsZXRlUm93KSB7XG4gICAgICAgIGdyaWRSb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkTmV3Um93Q2hlY2spIHtcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXSA9IGFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBncmlkUm93c0RhdGFbaW5kZXhdID0gcm93SW5mbztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgdGhpcy5vbkdyaWRSb3dBY3Rpb25zLmVtaXQoZ3JpZFJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcbiAgICovXG4gIGRlbGV0ZVJlY29yZChyb3c6IGFueSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XG4gICAgICAgIHRoaXMub25Sb3dEZWxldGUuZW1pdChyb3cpO1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGRpc2FibGVkIHRoZSBjb250cm9sXG4gICAqL1xuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbikge1xuICAgICAgaWYgKFxuICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGRdLmFjdGlvbik/LmluY2x1ZGVzKCdkaXNhYmxlZCcpICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBhZ2dyZWdhdGUgaW4gZ3JpZCBmb290ZXJcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZSkge1xuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgY29sdW1uVHlwZTogRUdyaWRBZ2dyZWdhdGUgPSBjb2wudHlwZTtcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5yb3dzRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgY291bnQsICdDb3VudCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSB8fFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sVmFsdWVzICYmIGNvbFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbHVtbjogYW55LCB2YWx1ZTogbnVtYmVyLCBkZWZhdWx0Q2FwdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsRm9ybWF0OiBib29sZWFuID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xuICAgIGNvbnN0IGNhcHRpb246IHN0cmluZyA9XG4gICAgICBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSBpc0RlY2ltYWxGb3JtYXRcbiAgICAgID8gdmFsdWU/LnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKVxuICAgICAgOiB2YWx1ZT8udG9GaXhlZCgwKTtcbiAgICByZXR1cm4gYCR7Y2FwdGlvbn0gJHtkZWNpbWFsUG9pbnRcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkZWNpbWF0IGFuZCBudW1lcmljIHZhbHVlc1xuICAgKi9cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxuICAgKi9cbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAga2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkID09PSBrZXkpIHtcbiAgICAgICAgICBhcnIucHVzaChyb3dba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIFBERlxuICAgKi9cbiAgZXhwb3J0UGRmKCkge1xuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xuICAgIGRvYy50YWJsZSgxLCAxLCBleHBvcnREYXRhLnJvd3MsIGV4cG9ydERhdGEuaGVhZGluZ3MsIHsgYXV0b1NpemU6IHRydWUgfSk7XG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcbiAgICogQHJvd3MgcGFyYW0gZm9yIHJvd3NcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXG4gICAqL1xuICBzZXRFeHBvcnREYXRhKHJvd3M6IGFueVtdID0gW10sIGlzUGRmOiBib29sZWFuID0gZmFsc2UpOiBJR3JpZERhdGFFeHBvcnQge1xuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gcm93KSB7XG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BkZikge1xuICAgICAgICAgIHJvd1twcm9wXSA9XG4gICAgICAgICAgICAhcm93W3Byb3BdICYmIHR5cGVvZiByb3dbcHJvcF0gIT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyByb3dzLCBoZWFkaW5ncyB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBFeGNlbFxuICAgKi9cbiAgZXhwb3J0RXhjZWwoKSB7XG4gICAgbGV0IGV4cG9ydERhdGE6IGFueSA9IHRoaXMuZXhwb3J0RGF0YVRvRXhjZWwoKTtcbiAgICBpbXBvcnQoJ3hsc3gnKS50aGVuKCh4bHN4KSA9PiB7XG4gICAgICBjb25zdCB3b3Jrc2hlZXQ6IFdvcmtTaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcbiAgICAgIGxldCByb3dJbmRleCA9IDA7XG4gICAgICBleHBvcnREYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XG4gICAgICAgICAgaWYgKGNlbGxWYWx1ZSAmJiBjZWxsVmFsdWUubGVuZ3RoID4gMCAmJiBjZWxsVmFsdWUuaW5kZXhPZignfCcpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlua1RleHQ6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzBdO1xuICAgICAgICAgICAgbGV0IGxpbmtVcmw6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzFdO1xuICAgICAgICAgICAgaWYgKGxpbmtVcmwgJiYgIWxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICAgIGlmICghbGlua1VybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBsaW5rVXJsID0gJy8nICsgbGlua1VybDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsaW5rVXJsID1cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgK1xuICAgICAgICAgICAgICAgICcvLycgK1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArXG4gICAgICAgICAgICAgICAgbGlua1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0geGxzeC51dGlscy5lbmNvZGVfY2VsbCh7XG4gICAgICAgICAgICAgIGM6IGNvbEluZGV4LFxuICAgICAgICAgICAgICByOiByb3dJbmRleCArIDEsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd29ya3NoZWV0W2NlbGxBZGRyZXNzXSA9IHtcbiAgICAgICAgICAgICAgZjogYD1IWVBFUkxJTksoXCIke2xpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXG4gICAgICAgIFNoZWV0TmFtZXM6IFsnc2hlZXQxJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcbiAgICAgICAgYm9va1R5cGU6ICd4bHN4JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsICdFeHBvcnQueGxzeCcpO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0RGF0YVRvRXhjZWwoKSB7XG4gICAgbGV0IGFycjogYW55ID0gW107XG4gICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBncmlkSGVhZGVyID0gY29sdW1uLmhlYWRlcjtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICAgIGNvbnN0IGxpbmtPYmogPSByb3dbY29sdW1uLmRpc3BsYXlUZXh0Py50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXSArICd8JyArIGxpbmtPYmo/Lmh5cGVybGluaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpbXBvcnQoJ2ZpbGUtc2F2ZXInKS50aGVuKChGaWxlU2F2ZXIpID0+IHtcbiAgICAgIGxldCBFWENFTF9UWVBFID1cbiAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XG4gICAgICBzYXZlQXMoZGF0YSwgZmlsZU5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xuICAgKi9cbiAgc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdzogYW55LCBjb2x1bW46IGFueSwgZGF0YTogYW55KSB7XG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdLnRleHQ7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgLy8gY29uc29sZS5sb2coJ2JlZiBuZXdyb3cnKVxuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgcm93ID0geyAuLi5uZXdSb3cgfTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgZGF0YSkge1xuICAgIC8vICBjb25zb2xlLmxvZygnaW4gbG9va3VwIGlucHV0JylcbiAgICAgIGxldCBvYmogPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcbiAgICAvLyAgY29uc29sZS5sb2coJ29iaicsIHJvd1tjb2x1bW4uZmllbGRdLCAnZGF0YScsIGRhdGEpXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXG4gICAqL1xuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ29wZW5Mb29rdXBIeXBlcmxpbms6ICcsIHJvdyk7XG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBjb2x1bW4uY29tcG9uZW50KSB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3csIGNvbHVtbiwgY29sdW1uLmRhdGE/LmRhdGEpO1xuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcbiAgICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxvb2t1cCBEaWFsb2dcbiAgICovXG4gIG9wZW5Mb29rdXBEaWFsb2coY29sdW1uPzogYW55LCByb3c6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgY29sdW1uRGF0YSA9IGNvbHVtbi5jb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGEgPyBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YSA6IGNvbHVtbi5jb2x1bW4uZGF0YTtcbiAgLy8gICBpZihhY3Rpb25IZWFkZXIpe1xuICAvLyAgICAgLy9jb2x1bW5EYXRhLmhlYWRlciA9IGFjdGlvbkhlYWRlcjtcbiAgLy8gIH1cbiAgaWYocm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2wpe1xuICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXI/IGNvbHVtbkRhdGEuaGVhZGVyPXJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXI6JydcbiAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aD8gY29sdW1uRGF0YS53aWR0aD1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGg6JydcbiAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0P2NvbHVtbkRhdGEuaGVpZ2h0PXJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQ6JydcbiAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uc2VsZWN0ZWRWYWx1ZT8gY29sdW1uRGF0YS5zZWxlY3RlZFZhbHVlPXJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5zZWxlY3RlZFZhbHVlOlwiXCJcbiAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVGaWVsZD8gY29sdW1uRGF0YS52YWx1ZUZpZWxkPXJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZUZpZWxkOlwiXCJcbiAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YT9jb2x1bW5EYXRhLmRhdGE9cm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldPy5hY3Rpb24/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE6JydcbiAgIC8vIGNvbHVtbkRhdGEubG9va3VwQ29udHJvbD1yb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LmFjdGlvbj8ubG9va3VwQ29udHJvbFxuICB9XG4gICAgLy9jb25zb2xlLmxvZygnY29sdW1uIGRhdGEyJywgY29sdW1uRGF0YSlcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgZGF0YToge1xuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uY29sdW1uLmZpZWxkLFxuICAgICAgIHZhbHVlRmllbGQ6IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVGaWVsZCxcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIC8vIGNvbnN0IHJvd0RhdGEgPSByb3dbY29sdW1uLmZpZWxkXT8ubG9va3VwQ29udHJvbD8uZGF0YSA/IHJvd1tjb2x1bW4uZmllbGRdPy5sb29rdXBDb250cm9sPy5kYXRhIDogcm93W2NvbHVtbi5maWVsZF0uZGF0YVxuICAgIC8vIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKHJvd1tjb2x1bW4uZmllbGRdLmNvbXBvbmVudCwge1xuICAgIC8vICAgLi4ucm93RGF0YSxcbiAgICAvLyAgIGRhdGE6IHtcbiAgICAvLyAgICAgc2VsZWN0aW9uOiByb3dbY29sdW1uLmZpZWxkXS5zZWxlY3Rpb24sXG4gICAgLy8gICAgIGZpZWxkOiByb3dbY29sdW1uLmZpZWxkXSxcbiAgICAvLyAgICAgdmFsdWVGaWVsZDogIHJvd1tjb2x1bW4uZmllbGRdLmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQsXG4gICAgLy8gICAgIC4uLiByb3dbY29sdW1uLmZpZWxkXS5yb3dEYXRhLFxuICAgIC8vICAgfSxcbiAgICAvLyB9KTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGRdPy5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxuICAgKi9cbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmxvb2t1cE9iamVjdCA9IHsgdGV4dDogJycsIHZhbHVlOiAnJywgZmllbGQ6ICcnIH07XG4gICAgLy8gaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XG4gICAgLy8gICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcbiAgICAvLyAgICAgcm93LFxuICAgIC8vICAgICBjb2x1bW4sXG4gICAgLy8gICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGE/LmRhdGFcbiAgICAvLyAgICk7XG4gICAgLy8gICBvYmpbJ2NvbXBvbmVudCddID0gY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50O1xuICAgIC8vICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XG4gICAgLy8gaWYgKHJvd1tjb2x1bW4uZmllbGRdLmFjdGlvbj8ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1uLFxuICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIFxuICAgICAgICA/cm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTpjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhPy5kYXRhXG4gICAgICApO1xuICAgICBcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQ/cm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50OmNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmosIHJvdyk7XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlcyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyZXMpO1xuICAgICAgICAgICAgbGV0IHZhbHVlRmllbGQgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uc2VsZWN0ZWRWYWx1ZT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1t2YWx1ZUZpZWxkID8gdmFsdWVGaWVsZCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1tzZWxlY3RlZFZhbHVlID8gc2VsZWN0ZWRWYWx1ZSA6IGNvbHVtbkZpZWxkXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmxvb2t1cE9iamVjdCA9IHJvd1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uRmllbGQ7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZUZpZWxkIHx8IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgICAgdGV4dDogcmVzW3ZhbHVlRmllbGQgPyB2YWx1ZUZpZWxkIDogcmVzW3ZhbHVlRmllbGRdXSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbc2VsZWN0ZWRWYWx1ZSA/IHNlbGVjdGVkVmFsdWUgOiByZXNbdmFsdWVGaWVsZF1dLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodmFsdWVGaWVsZCB8fCBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHJlc1t2YWx1ZUZpZWxkID8gdmFsdWVGaWVsZCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc1tzZWxlY3RlZFZhbHVlID8gc2VsZWN0ZWRWYWx1ZSA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGxvb2t1cFJvdyA9IHsuLi5yb3d9O1xuICAgICAgICAgIGlmKHR5cGVvZiAobG9va3VwUm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgIGxvb2t1cFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwUm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pICE9PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0ge1xuICAgICAgICAgICAgICB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgbG9va3VwUm93LCByb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAvLyB9XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBDaGVjayBjYWxlbmRlciB2YWx1ZSBpcyBjaGFuZ2VkIG9yIG5vdFxuICBjYWxlbmRlckNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGxldCB2YWx1ZUNoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIGNvbHVtbi50aW1lT25seSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICdoaDptbScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICdoaDptbScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNvbHVtbi5zaG93VGltZSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQgaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSAnJztcbiAgfVxuICBvbkF1dG9Db21wbGV0ZUZvY3VzT3V0KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZS50YXJnZXQudmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSB8fCAoIWNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUpKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2NvbHVtbl0sIHJvdyk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kZXJDaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLm9uRm9jdXNPdXQpIHtcbiAgICAgICAgY29sdW1uLm9uRm9jdXNPdXQocm93KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi5vblJldHVybiAmJlxuICAgICAgICBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVFxuICAgICAgKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICB9XG5cbiAgc2V0RmlsdGVyRm9jdXNPdXQoY29sOiBhbnksIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBpZihjb2w/LmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCl7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gICAgICB9LDI1MCk7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgc2V0R3JpZEZpbHRlcihjb2w6IElHcmlkQ29sdW1uLCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KXtcbiAgICB0aGlzLmdyaWRGaWx0ZXJPYmogPSB7IGNvbHVtbjogY29sLCBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50IH07XG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRlciBmb3JtYXRcbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09ICdkYXRlJyAmJiBuZXdDb2x1bW4udmFsdWUpIHtcbiAgICAgIG5ld0NvbHVtbi52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBjb2wudmFsdWUudG9TdHJpbmcoKS50cmltKCksXG4gICAgICAgICd5eXl5LU1NLWRkJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICB9XG5cbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiAnc3RhcnRzV2l0aCcsXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXG4gICAgICB2YWx1ZTogY29sLnZhbHVlLFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xuICB9XG5cbiAgYXBwbHlFbnRlckV2ZW50KGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkgeyAgXG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IHRoaXMuZHJvcERvd25GaWx0ZXI/LmNvbHVtbj8uZmlsdGVyPy50eXBlKSB7XG4gICAgICB0aGlzLmRyb3BEb3duRmlsdGVyLmZpbHRlcih0aGlzLmRyb3BEb3duRmlsdGVyLmV2ZW50LnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1ggJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIGZpbHRlcihldmVudD8uY2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlcihldmVudD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKGNvbHVtbi52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tzcGFjZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJlxuICAgICAgKGNvbHVtbi52YWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgfHxcbiAgICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxuICAgICAgICBjb2x1bW4udmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLnZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGFyciA9IFsuLi50aGlzLmdsb2JhbEZpbHRlcnNBcnJheV07XG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IGFycjtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cbiAgcmVtb3ZpbmdGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxuICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBbXTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpXSA9IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgQ2xpY2sgQnV0dG9uIEV2ZW50IG9uIEdyaWQuXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdyk7XG4gIH1cblxuICAvLyBJbnZva2Ugb25DbGljayBFdmVudC5cbiAgb25DbGlja0V2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiYgY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSAmJiBjb2x1bW4uZWRpdGFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLmhyZWYgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xuICAgICAgYS50YXJnZXQgPSBcIl9ibGFua1wiO1xuICAgICAgYS5jbGljaygpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG5cbiAgICAgIHRoaXMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZSh1dGlsaXRpZXMuc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgc2VsZWN0IHZhbHVlIG9mIG11bHRpLXNlbGVjdFxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdLmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xuICAgICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IGZhbHNlXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQm94Q2hhbmdlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KSB7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBldmVudDtcbiAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyT2JqKGNvbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBlZGl0QWxsUm93c0F0T25jZSgpIHtcbiAgICBpZiAodGhpcy5lZGl0Um93UGVybWlzc2lvbikge1xuICAgICAgaWYgKHRoaXMuZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cygnZWRpdFJvdycpKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiAoY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKSkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaWRlRWRpdEFsbFJvd3NCdG4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNhdmVBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMuZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cygnc2F2ZVJvdycpO1xuICB9XG5cbiAgLy8gcmVzZXQgdGhlIGdyaWQgcm93c1ZhbHVlIHRvIG9yaWduYWwgdmFsdWVzXG4gIGNhbmNlbEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgdGhpcy5yb3dzRGF0YSA9IFsuLi50aGlzLnJvd3NEYXRhQ29weV07XG4gICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5vbkNhbmNlbEFsbFJvd3MuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIGdldENsYXNzRm9yRWRpdEFsbFJvd3MoY2xhc3NOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3QgZ2V0QnRuczogYW55ID1cbiAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgY29uc3Qgcm93U2F2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgICAgICByZXNvbHZlKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWNvcmRzJC5wdXNoKHJvd1NhdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBQcm9taXNlLmFsbChyZWNvcmRzJCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2F2ZVJlY29yZEFycmF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDIwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gJ2NhbmNlbFJvdycpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICAvL0ZvY3VzZWQgY2FsZW5kZXIgaW5wdXQgb24gc2VsZWN0IGRhdGVcbiAgc2VsZWN0RGF0ZShjb2x1bW46IGFueSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XG4gIH1cblxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXG4gIGFwcGx5R2lyZEZpbHRlckJ0bigpIHtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnksIGV2ZW50OiBhbnksIHNpbmdsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4ucm93SW5mb107XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkICYmICF0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvdy5pZCA9PSByb3dJbmZvLmlkKSkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvdz8uaWQgPT0gcm93SW5mby5pZCkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tsaXN0LmZpbmRJbmRleCgocm93KSA9PiByb3c/LmlkID09IHJvd0luZm8/LmlkKTtcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHJvd0luZm8pKTtcbiAgICB9XG4gIH1cblxuICBzZXRSb3dzRGF0YShyb3dzRGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3NEYXRhKSkge1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICBpZiAoa2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvd3NEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xuICB9XG5cbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XG4gICAgaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93PzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLnZhbHVlID0gJyc7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIHdoZW4gY2xpY2sgaGVhZGVyIGNoZWNrYm94IGZpbHRlclxuICBjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5lZGl0QWxsUmVjb3JkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUgJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xuICB9XG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kZXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGVySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbHVtbi5maWVsZCArIHJvd1t0aGlzLmRhdGFLZXldKVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcbiAgICAgIH0gZWxzZSBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cblxuXG4iXX0=
|