@annalib/anna-core 4.2.12 → 4.2.14

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.
@@ -92,7 +92,7 @@ export class AnnaFilterService {
92
92
  "userChanges",
93
93
  "userMG"
94
94
  ];
95
- const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate", "date", "startDate", "endDate"];
95
+ const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate", "date", "startDate", "endDate", "revisionStartDate"];
96
96
  const timeArr = ["StartTimeForFilter", "EndTimeForFilter",
97
97
  "start_time_for_filter", "end_time_for_filter", "startEndTimeMulti", "startEndTime"];
98
98
  this.sliderSet = new Set(sliderArr);
@@ -178,7 +178,8 @@ export class AnnaFilterService {
178
178
  this.selectedRadio == "AirDate" ||
179
179
  this.selectedRadio === "flightStartDate" ||
180
180
  this.selectedRadio === "flightEndDate" ||
181
- this.selectedRadio == "date") {
181
+ this.selectedRadio == "date" ||
182
+ this.selectedRadio == "revisionStartDate") {
182
183
  isFiltered =
183
184
  !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) &&
184
185
  !isEqual(this.tooltipSelectedMap.get(this.selectedRadio), this.flightDateRange);
@@ -214,7 +215,7 @@ export class AnnaFilterService {
214
215
  if (this.sliderSet.has(key)) {
215
216
  filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
216
217
  }
217
- else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
218
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date" || key == "revisionStartDate") {
218
219
  filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
219
220
  }
220
221
  else if (key === "period") {
@@ -386,7 +387,7 @@ export class AnnaFilterService {
386
387
  if (this.sliderSet.has(key)) {
387
388
  filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
388
389
  }
389
- else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
390
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date" || key == "revisionStartDate") {
390
391
  filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
391
392
  }
392
393
  else if (key === "period") {
@@ -438,4 +439,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
438
439
  providedIn: 'root'
439
440
  }]
440
441
  }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }, { type: i2.AnnaSortService }]; } });
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHNUIsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO0lBd0M1QixZQUFvQixxQkFBZ0QsRUFBVSxlQUFnQztRQUExRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEM5RyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBYy9CLHdCQUFtQixHQUFhLEVBQUUsQ0FBQztRQUluQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUMxQixRQUFRO1lBQ1IsS0FBSztZQUNMLEtBQUs7WUFDTCxZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7WUFDWCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBR0gsdUJBQWtCLEdBQVEs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O1lBQ2pELElBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBQztnQkFDekIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN2RTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQThCO1FBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQzs7QUF6ZGEsNEJBQVUsR0FBRyxFQUFHLENBQUE7OEdBckNuQixpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlcic7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgbWluLCBtYXgsIG1hcCwgc29ydEJ5LCB1bmlxLCBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5cclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzIFxyXG5pbXBvcnQgeyBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBOZ2JEYXRlVHlwZSB9IGZyb20gJy4vYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuL2FubmEtc29ydC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFGaWx0ZXJTZXJ2aWNlIHtcclxuXHJcbiAgdG9vbHRpcE1hcCA9IG5ldyBNYXAoKTtcclxuICB0b29sdGlwU2VsZWN0ZWRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgaW5pdGlhbFZhbHVlTWFwOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gIHRyYW5zbGF0ZUZ1bmM6IHN0cmluZztcclxuICBzZWxlY3RlZFJhZGlvOiBzdHJpbmc7XHJcbiAgc3ViUmFkaW9CdXR0b246IHN0cmluZztcclxuXHJcbiAgY2FsZW5kYXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gIHNsaWRlclNldDogU2V0PHN0cmluZz47XHJcbiAgdGltZVNldDogU2V0PHN0cmluZz47XHJcblxyXG4gIGluY2x1ZGVNdWx0aVRpbWU6IGJvb2xlYW47XHJcbiAgaW5jbHVkZVplcm9UaW1lOiBib29sZWFuO1xyXG4gIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW47XHJcblxyXG4gIGFwcGxpZWRGaWx0ZXJzQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgZmxpZ2h0RGF0ZVJhbmdlOiB7IG1pblNlbGVjdGVkRGF0ZTogYW55LCBtYXhTZWxlY3RlZERhdGU6IGFueSB9O1xyXG4gIHNsaWRlckRhdGE6IHsgbWluOiBhbnksIG1heDogYW55IH07XHJcbiAgbmd4U2xpZGVyT2JqOiBPcHRpb25zO1xyXG4gIHNsaWRlckN1cnJlbmN5U2V0ID0gbmV3IFNldChbXHJcbiAgICAnYm9va2VkJyxcclxuICAgICdjcHAnLFxyXG4gICAgJ2NwbScsXHJcbiAgICAncmN2UHJlZW1wdCcsXHJcbiAgICAnb3NQcmVlbXB0JyxcclxuICAgICdwb3N0ZWRBZHUnLFxyXG4gICAgJ3NjaGVkdWxlZEFkdScsXHJcbiAgICAnYXVkaWVuY2VEZWZpY2l0JyxcclxuICAgICdSYXRlJyxcclxuICAgICd1c2VyQURVcycsXHJcbiAgICAnYnV5ZXJDaGFuZ2VzJyxcclxuICAgICd1c2VyQ2hhbmdlcycsXHJcbiAgICAndXNlck1HJyxcclxuICBdKTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBidWZmZXJTaXplID0gMjA7XHJcbiAgaXNGaWx0ZXJTb3J0QWN0aXZlOiBhbnkgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVUaW1lRm9ybWF0U2VydmljZTogQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSkge1xyXG4gICAgY29uc29sZS5sb2coXCJBbm5hRmlsdGVyU2VydmljZSBzZXJ2aWNlIGNyZWF0ZWQuXCIpXHJcbiAgICBjb25zdCBzbGlkZXJBcnIgPSBbXHJcbiAgICAgIFwicmN2UHJlZW1wdFwiLFxyXG4gICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICBcInJjdlVuZGVyRGx5XCIsXHJcbiAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICBcImJvb2tlZFwiLFxyXG4gICAgICBcInNwb3RzXCIsXHJcbiAgICAgIFwiZ3JwXCIsXHJcbiAgICAgIFwiY3BwXCIsXHJcbiAgICAgIFwiaW1wc1wiLFxyXG4gICAgICBcImNwbVwiLFxyXG4gICAgICBcIm9zVW5kZXJEbHlcIixcclxuICAgICAgXCJ0b3RhbFdlZWtzXCIsXHJcbiAgICAgIFwiV2Vla051bWJlclwiLFxyXG4gICAgICBcIlJhdGVcIixcclxuICAgICAgXCJPcmRlcmVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgXCJQb3N0ZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLCAsXHJcbiAgICAgIFwicG9zdGVkQXVkUGVyY2VudFwiLFxyXG4gICAgICBcInBvc3RlZEFkdVwiLFxyXG4gICAgICBcInNjaGVkdWxlZEFkdVwiLFxyXG4gICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICBcIm9mZmVyZWRNR3NcIixcclxuICAgICAgXCJvdXRzdGFuZGluZ1BFXCIsXHJcbiAgICAgIFwib2ZmZXJlZEFEVXNcIixcclxuICAgICAgXCJ1ZERlZmljaXRWYWx1ZVwiLFxyXG4gICAgICBcImJvb2tlZFZhbHVlXCIsXHJcbiAgICAgIFwiYm9va2VkU3BvdHNcIixcclxuICAgICAgXCJ1c2VyQURVc1wiLFxyXG4gICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICBcInVzZXJDaGFuZ2VzXCIsXHJcbiAgICAgIFwidXNlck1HXCJcclxuICAgIF07XHJcbiAgICBjb25zdCBjYWxlbmRhckFyciA9IFtcInBlcmlvZFwiLCBcIkFpckRhdGVcIiwgXCJmbGlnaHRTdGFydERhdGVcIiwgXCJmbGlnaHRFbmREYXRlXCIsXCJkYXRlXCIsIFwic3RhcnREYXRlXCIsIFwiZW5kRGF0ZVwiXTtcclxuICAgIGNvbnN0IHRpbWVBcnIgPSBbXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJFbmRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwic3RhcnRFbmRUaW1lXCJdO1xyXG4gICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2V0ID0gbmV3IFNldChjYWxlbmRhckFycik7XHJcbiAgICB0aGlzLnRpbWVTZXQgPSBuZXcgU2V0KHRpbWVBcnIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgIGxldCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm5NaW5BbmRNYXhEYXRlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgRGF0ZUFyciA9IGRhdGEubWFwKChvYmopID0+IG1vbWVudChvYmpba2V5XSkpO1xyXG4gICAgbGV0IG1pbkRhdGUgPSBtb21lbnQubWluKERhdGVBcnIpO1xyXG4gICAgbGV0IG1heERhdGUgPSBtb21lbnQubWF4KERhdGVBcnIpO1xyXG4gICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcclxuICB9XHJcblxyXG4gIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXI6IHN0cmluZ1tdLCBzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pOiBib29sZWFuIHtcclxuICAgIGxldCBzZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgaWYoaGVhZGVyLmxlbmd0aCA9PSAxKXtcclxuICAgICAgcmV0dXJuICggKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5nZXQoaGVhZGVyWzBdKSAhPSBcIkRFRkFVTFRcIikgfHwgc2V0LmhhcyhoZWFkZXJbMF0pKTtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuXHJcbiAgfVxyXG5cclxuICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgIGlmKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdOyAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sXCJERUZBVUxUXCIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBjb25zdCB2YWwgPSBkYXRhLnRvRml4ZWQoMSkgKyBcIiVcIjtcclxuICAgIHJldHVybiB2YWw7XHJcbiAgfTtcclxuXHJcbiAgY3VycmVuY3lUcmFuc2xhdGVGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgaWYgKE1hdGguYWJzKGRhdGEpID49IDEwMDApIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGNvbnN0IHZhbCA9IFwiJFwiICsgKE1hdGguYWJzKGRhdGEpIC8gMTAwMCkudG9GaXhlZCgxKTsgKyBcImtcIjtcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItXCIgKyB2YWwgOiB2YWw7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGxldCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpKSA9PSBkYXRhO1xyXG4gICAgICBsZXQgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpOyBcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItJFwiICsgdmFsIDogXCIkXCIgKyB2YWw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgY29uc3QgdmFsID0gKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xyXG4gIH07XHJcblxyXG4gIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W1wiZGF0ZVwiXSkpO1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICB1bmlxdWVEYXRlcy5mb3JFYWNoKChkYXRlOiBhbnkpID0+IHtcclxuICAgICAgdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQucHVzaChcclxuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQobW9tZW50KGRhdGUsIFwiTU0vREQvWVlcIikuZm9ybWF0KFwiTU0vREQvWVlZWVwiKSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQsIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQsIGRhdGUpO1xyXG4gICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQ6IGJvb2xlYW4sIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJ1c2VyXCIgJiYgIXRoaXMudG9vbHRpcE1hcC5oYXMoXCJ1c2VyXCIpKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSBjbG9uZURlZXAoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIlxyXG4gICAgICB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRFbmRUaW1lTXVsdGlcIikge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwoXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgKSB8fCAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHwgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgfHwgIXRoaXMuaW5jbHVkZVplcm9UaW1lIHx8ICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5zbGlkZXJEYXRhKTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInBvc3RlZEFkdVwiICYmIHRoaXMuc3ViUmFkaW9CdXR0b24gPT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZGF0ZVwiXHJcbiAgICApIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9XHJcbiAgICAgICAgIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJlxyXG4gICAgICAgICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLmZsaWdodERhdGVSYW5nZSk7XHJcbiAgICAgIGlmICghaXNGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdG90YWxPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuKS5sZW5ndGg7XHJcbiAgICAgIGxldCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4gJiYgeC5pc1NlbGVjdGVkKS5sZW5ndGg7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSBzZWxlY3RlZE9wdGlvbnNDb3VudCA+IDAgJiYgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT0gdG90YWxPcHRpb25zQ291bnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIHJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IHNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICBpZiAoaXNGaWx0ZXJlZCAmJiAhc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH0gZWxzZSBpZiAoaXNGaWx0ZXJlZCAmJiBzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uc2V0XTtcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSwga2V5VG9Ta2lwOiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbLi4ub3JpZ2luYWxEYXRhXTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkgIT0ga2V5VG9Ta2lwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnREYXRlXCIgfHwga2V5ID09PSBcImVuZERhdGVcIiB8fCBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8IGtleSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmlzT2JqZWN0SW5UaGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwZXJpb2RcIiApIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fCBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiXHJcbiAgICAgICAgICB8fCBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcclxuICB9XHJcblxyXG4gIHJldHVybk9yZGVyc0luVGhlUmFuZ2Uob3JkZXI6IGFueSwgcmFuZ2U6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSA9IG1vbWVudChvcmRlcltrZXldKS5pc0JldHdlZW4ocmFuZ2UubWluU2VsZWN0ZWREYXRlLCByYW5nZS5tYXhTZWxlY3RlZERhdGUpO1xyXG4gICAgbGV0IGlzRGF0ZVNhbWVBc1RoZU1pblNlbGVjdGVkRGF0ZSA9IG1vbWVudChvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWluU2VsZWN0ZWREYXRlKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGUgPSBtb21lbnQob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkU3RhcnREYXRlID0gbW9tZW50KHNlbGVjdGVkRGF0YS5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc2VsZWN0ZWRFbmREYXRlID0gbW9tZW50KHNlbGVjdGVkRGF0YS5lbmRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IG1vbWVudChvYmouc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBtb21lbnQob2JqLmVuZFRpbWUsIGZvcm1hdCk7XHJcblxyXG4gICAgbGV0IGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgPSBzdGFydFRpbWUuaXNTYW1lKHNlbGVjdGVkU3RhcnREYXRlKTtcclxuICAgIGxldCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lID0gZW5kVGltZS5pc1NhbWUoc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgIGxldCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIkhIOm1tOnNzXCI7XHJcbiAgICBsZXQgc2VsZWN0ZWRGcm9tVGltZSA9IG1vbWVudChzZWxlY3RlZERhdGEuZnJvbVRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc2VsZWN0ZWRUb1RpbWUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBvYmpUaW1lID0gb2JqW2tleV07XHJcbiAgICBcclxuICAgIGlmIChbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialRpbWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT0gXCIwXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PSBcIjBcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbGV0IG1vbWVudFRpbWUgPSBtb21lbnQob2JqVGltZSxmb3JtYXQpO1xyXG4gICAgXHJcbiAgICBsZXQgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSA9IG1vbWVudFRpbWUuaXNTYW1lKHNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lID0gbW9tZW50VGltZS5pc1NhbWUoc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgbGV0IGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lID0gbW9tZW50VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgfHxcclxuICAgICAgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgfHxcclxuICAgICAgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTphbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkRnJvbVRpbWUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gbW9tZW50KHNlbGVjdGVkRGF0YS50b1RpbWUsIGZvcm1hdCk7XHJcbiAgICBcclxuICAgIGlmKHNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV1bMF0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYoIXNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV1bMF0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09IFwiMFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PSBcIjBcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVUaW1lUmFuZ2UpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGxldCBzdGFydFRpbWUgPSBtb21lbnQob2JqW2tleV1bMV0sIGZvcm1hdCk7XHJcbiAgICBsZXQgZW5kVGltZSA9IG1vbWVudChvYmpba2V5XVsyXSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICBsZXQgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICApO1xyXG5cclxufVxyXG5cclxuICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgcGFyc2luZ0Zvcm1hdDogc3RyaW5nO1xyXG4gICAgaWYgKGtleSA9PT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgbW9tZW50U3RhcnREYXRlID0gbW9tZW50KG9iai5zdGFydERhdGUpO1xyXG4gICAgICBsZXQgbW9tZW50RW5kRGF0ZSA9IG1vbWVudChvYmouZW5kRGF0ZSk7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IG1vbWVudFN0YXJ0RGF0ZS5pc0JldHdlZW4oXHJcbiAgICAgICAgdmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgdmFsdWUudG9EYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IG1vbWVudEVuZERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShtb21lbnRTdGFydERhdGUpO1xyXG4gICAgICBsZXQgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IHZhbHVlLnRvRGF0ZS5pc1NhbWUobW9tZW50RW5kRGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIChzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlIHx8IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlKSAmJlxyXG4gICAgICAgIChlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiKSB7XHJcbiAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgbGV0IGRhdGVJc0JldHdlZW5TZWxEYXRlID0gbW9tZW50KG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc0JldHdlZW4odmFsdWUubWluU2VsZWN0ZWREYXRlLCB2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IG1vbWVudChvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1pblNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgIGxldCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gbW9tZW50KG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc1NhbWUodmFsdWUubWF4U2VsZWN0ZWREYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZVRpbWVGaWx0ZXJEYXRhKGNsb25lZERhdGE6IGFueVtdLCBrZXkgPSBcInN0YXJ0RW5kVGltZVwiKSB7XHJcbiAgICBsZXQgc3RhcnRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgbGV0IGVuZFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJlbmRUaW1lXCIpO1xyXG4gIFxyXG4gICAgc3RhcnRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcoYSwgYik7XHJcbiAgICB9KTtcclxuICBcclxuICAgIGVuZFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcoYSwgYik7XHJcbiAgICB9KTtcclxuICBcclxuICAgIGxldCBpbml0aWFsU3RhcnRFbmRUaW1lID0ge1xyXG4gICAgICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lQXJyWzBdLFxyXG4gICAgICAgIGVuZFRpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgaW5pdGlhbFN0YXJ0RW5kVGltZSk7XHJcbiAgfSBcclxuXHJcbiAgcmV0dXJuQ29sdW1uRmlsdGVyU3RhdHVzKGRhdGE6IGFueVtdLCBoZWFkZXJOYW1lOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuXHJcbiAgICBpZihoZWFkZXJOYW1lID09IFwic3RhcnRFbmRUaW1lXCIpe1xyXG4gICAgICBsZXQgdGltZSA9IGRhdGEubWFwKHUgPT4gdVtoZWFkZXJOYW1lXVswXSk7XHJcbiAgICAgIGxldCB1bmlxVGltZSA9IHVuaXEodGltZSk7XHJcbiAgICAgIHJldHVybiB1bmlxVGltZS5sZW5ndGggPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5pcShkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXSkpLmxlbmd0aCA+IDEgPyBmYWxzZSA6IHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIGdldEZpbHRlck9wdGlvbnNEYXRhKGRhdGE6IGFueVtdLCBjbG9uZWREYXRhOiBhbnlbXSl7XHJcbiAgICBsZXQgYXBwbGllZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIGlmKGFwcGxpZWRGaWx0ZXJTZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpe1xyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhKGNsb25lZERhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlT3JkZXJBcHBsaWVkRmlsdGVyc1N0YXRlKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KXtcclxuICAgIGxldCBpc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YSx2YWx1ZSk7XHJcbiAgICB0aGlzLnJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZCk7XHJcbiAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YTogYW55W10sdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgaW5pdGlhbFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoY2xvbmVkRGF0YS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKTtcclxuICAgIGxldCBjdXJyZW50VmFsdWVPZkNvbHVtbiA9IHNvcnRCeSh0aGlzLmFwcGx5RmlsdGVyKGNsb25lZERhdGEsdmFsdWUpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgcmV0dXJuICFpc0VxdWFsKGluaXRpYWxWYWx1ZU9mQ29sdW1uLCBjdXJyZW50VmFsdWVPZkNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcihkYXRhOiBhbnlbXSx2YWx1ZTogYW55KXtcclxuICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgbGV0IGtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnREYXRlXCIgfHwga2V5ID09PSBcImVuZERhdGVcIiB8fCBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8IGtleSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiICkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgICB8fCBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigodSkgPT4gdmFsdWUuaW5jbHVkZXModVtrZXldKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTsgIFxyXG4gIH1cclxuXHJcbiAgaXNPYmplY3RJblRoZVJhbmdlKG9iajogYW55LCB2YWx1ZToge2Zyb21EYXRlOiBtb21lbnQuTW9tZW50LCB0b0RhdGU6IG1vbWVudC5Nb21lbnR9LGtleTpzdHJpbmcpe1xyXG4gICAgbGV0IG9ialZhbCA9IG9ialtrZXldO1xyXG4gICAgbGV0IG1vbWVudERhdGUgPSBtb21lbnQob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlID0gdmFsdWUudG9EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2UgPSBtb21lbnREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSx2YWx1ZS50b0RhdGUpO1xyXG4gICAgcmV0dXJuIGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSB8fCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlIHx8IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0ZU9mVGhlQ3VycmVudEZpbHRlclRhYihzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pe1xyXG4gICAgbGV0IGFjdGl2ZUtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgIGxldCBrZXlBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZihrZXkuaW5jbHVkZXMoYWN0aXZlS2V5KSl7XHJcbiAgICAgICAga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gIHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPil7XHJcbiAgICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgIGxldCBrZXlBcnIgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFycixzb3J0TWFwKTtcclxuICAgICB9KSAgICAgXHJcbiAgfVxyXG4gICAgXHJcbn1cclxuIl19
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHNUIsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO0lBd0M1QixZQUFvQixxQkFBZ0QsRUFBVSxlQUFnQztRQUExRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEM5RyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBYy9CLHdCQUFtQixHQUFhLEVBQUUsQ0FBQztRQUluQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUMxQixRQUFRO1lBQ1IsS0FBSztZQUNMLEtBQUs7WUFDTCxZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7WUFDWCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBR0gsdUJBQWtCLEdBQVEs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YSxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBOEI7UUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDOztBQTFkYSw0QkFBVSxHQUFHLEVBQUcsQ0FBQTs4R0FyQ25CLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBtaW4sIG1heCwgbWFwLCBzb3J0QnksIHVuaXEsIGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2FubmEtc29ydC5tb2RlbCc7XHJcblxyXG4vLyBVc2VyIGRlZmluZWQgaW1wb3J0IHN0YXRlbWVudHMgXHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsIE5nYkRhdGVUeXBlIH0gZnJvbSAnLi9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFTb3J0U2VydmljZSB9IGZyb20gJy4vYW5uYS1zb3J0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYUZpbHRlclNlcnZpY2Uge1xyXG5cclxuICB0b29sdGlwTWFwID0gbmV3IE1hcCgpO1xyXG4gIHRvb2x0aXBTZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTtcclxuICBpbml0aWFsVmFsdWVNYXA6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgdHJhbnNsYXRlRnVuYzogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUmFkaW86IHN0cmluZztcclxuICBzdWJSYWRpb0J1dHRvbjogc3RyaW5nO1xyXG5cclxuICBjYWxlbmRhclNldDogU2V0PHN0cmluZz47XHJcbiAgc2xpZGVyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICB0aW1lU2V0OiBTZXQ8c3RyaW5nPjtcclxuXHJcbiAgaW5jbHVkZU11bHRpVGltZTogYm9vbGVhbjtcclxuICBpbmNsdWRlWmVyb1RpbWU6IGJvb2xlYW47XHJcbiAgaW5jbHVkZVRpbWVSYW5nZTogYm9vbGVhbjtcclxuXHJcbiAgYXBwbGllZEZpbHRlcnNBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBmbGlnaHREYXRlUmFuZ2U6IHsgbWluU2VsZWN0ZWREYXRlOiBhbnksIG1heFNlbGVjdGVkRGF0ZTogYW55IH07XHJcbiAgc2xpZGVyRGF0YTogeyBtaW46IGFueSwgbWF4OiBhbnkgfTtcclxuICBuZ3hTbGlkZXJPYmo6IE9wdGlvbnM7XHJcbiAgc2xpZGVyQ3VycmVuY3lTZXQgPSBuZXcgU2V0KFtcclxuICAgICdib29rZWQnLFxyXG4gICAgJ2NwcCcsXHJcbiAgICAnY3BtJyxcclxuICAgICdyY3ZQcmVlbXB0JyxcclxuICAgICdvc1ByZWVtcHQnLFxyXG4gICAgJ3Bvc3RlZEFkdScsXHJcbiAgICAnc2NoZWR1bGVkQWR1JyxcclxuICAgICdhdWRpZW5jZURlZmljaXQnLFxyXG4gICAgJ1JhdGUnLFxyXG4gICAgJ3VzZXJBRFVzJyxcclxuICAgICdidXllckNoYW5nZXMnLFxyXG4gICAgJ3VzZXJDaGFuZ2VzJyxcclxuICAgICd1c2VyTUcnLFxyXG4gIF0pO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGJ1ZmZlclNpemUgPSAyMDtcclxuICBpc0ZpbHRlclNvcnRBY3RpdmU6IGFueSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLCBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkFubmFGaWx0ZXJTZXJ2aWNlIHNlcnZpY2UgY3JlYXRlZC5cIilcclxuICAgIGNvbnN0IHNsaWRlckFyciA9IFtcclxuICAgICAgXCJyY3ZQcmVlbXB0XCIsXHJcbiAgICAgIFwib3NQcmVlbXB0XCIsXHJcbiAgICAgIFwicmN2VW5kZXJEbHlcIixcclxuICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgIFwiYm9va2VkXCIsXHJcbiAgICAgIFwic3BvdHNcIixcclxuICAgICAgXCJncnBcIixcclxuICAgICAgXCJjcHBcIixcclxuICAgICAgXCJpbXBzXCIsXHJcbiAgICAgIFwiY3BtXCIsXHJcbiAgICAgIFwib3NVbmRlckRseVwiLFxyXG4gICAgICBcInRvdGFsV2Vla3NcIixcclxuICAgICAgXCJXZWVrTnVtYmVyXCIsXHJcbiAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICBcIk9yZGVyZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICBcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsICxcclxuICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgIFwic2NoZWR1bGVkQWR1XCIsXHJcbiAgICAgIFwiYXVkaWVuY2VEZWZpY2l0XCIsXHJcbiAgICAgIFwib2ZmZXJlZE1Hc1wiLFxyXG4gICAgICBcIm91dHN0YW5kaW5nUEVcIixcclxuICAgICAgXCJvZmZlcmVkQURVc1wiLFxyXG4gICAgICBcInVkRGVmaWNpdFZhbHVlXCIsXHJcbiAgICAgIFwiYm9va2VkVmFsdWVcIixcclxuICAgICAgXCJib29rZWRTcG90c1wiLFxyXG4gICAgICBcInVzZXJBRFVzXCIsXHJcbiAgICAgIFwiYnV5ZXJDaGFuZ2VzXCIsXHJcbiAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgXCJ1c2VyTUdcIlxyXG4gICAgXTtcclxuICAgIGNvbnN0IGNhbGVuZGFyQXJyID0gW1wicGVyaW9kXCIsIFwiQWlyRGF0ZVwiLCBcImZsaWdodFN0YXJ0RGF0ZVwiLCBcImZsaWdodEVuZERhdGVcIixcImRhdGVcIiwgXCJzdGFydERhdGVcIiwgXCJlbmREYXRlXCIsIFwicmV2aXNpb25TdGFydERhdGVcIl07XHJcbiAgICBjb25zdCB0aW1lQXJyID0gW1wiU3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiRW5kVGltZUZvckZpbHRlclwiLFxyXG4gICAgICBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJzdGFydEVuZFRpbWVNdWx0aVwiLCBcInN0YXJ0RW5kVGltZVwiXTtcclxuICAgIHRoaXMuc2xpZGVyU2V0ID0gbmV3IFNldChzbGlkZXJBcnIpO1xyXG4gICAgdGhpcy5jYWxlbmRhclNldCA9IG5ldyBTZXQoY2FsZW5kYXJBcnIpO1xyXG4gICAgdGhpcy50aW1lU2V0ID0gbmV3IFNldCh0aW1lQXJyKTtcclxuICB9XHJcblxyXG4gIHJldHVybk1heEFuZE1pblZhbHVlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZywgaXNNaW46IGJvb2xlYW4pIHtcclxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgY29uc3QgdmFsdWVzID0gZGF0YS5tYXAoKHgpID0+IHhba2V5XSk7XHJcbiAgICBsZXQgdmFsdWVUb1JldHVybiA9IGlzTWluID8gbWluKHZhbHVlcykgOiBtYXgodmFsdWVzKTtcclxuICAgIHJldHVybiB2YWx1ZVRvUmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWluQW5kTWF4RGF0ZShkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgbGV0IERhdGVBcnIgPSBkYXRhLm1hcCgob2JqKSA9PiBtb21lbnQob2JqW2tleV0pKTtcclxuICAgIGxldCBtaW5EYXRlID0gbW9tZW50Lm1pbihEYXRlQXJyKTtcclxuICAgIGxldCBtYXhEYXRlID0gbW9tZW50Lm1heChEYXRlQXJyKTtcclxuICAgIHJldHVybiBbbWluRGF0ZSwgbWF4RGF0ZV07XHJcbiAgfVxyXG5cclxuICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBzdHJpbmdbXSwgc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIGlmKGhlYWRlci5sZW5ndGggPT0gMSl7XHJcbiAgICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSk7XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gKCAoc29ydE1hcC5zaXplID4gMCAmJiBzb3J0TWFwLmdldChoZWFkZXJbMF0pICE9IFwiREVGQVVMVFwiKSB8fCAoc29ydE1hcC5zaXplID4gMCAmJiBzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9IFwiREVGQVVMVFwiKSB8fCBzZXQuaGFzKGhlYWRlclswXSkgfHwgc2V0LmhhcyhoZWFkZXJbMV0pKTsgXHJcbiAgICByZXR1cm4gKCAoc29ydE1hcC5zaXplID4gMCAmJiAgc29ydE1hcC5oYXMoaGVhZGVyWzBdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMF0pICE9IFwiREVGQVVMVFwiKSB8fCAoc29ydE1hcC5zaXplID4gMCAmJiAgc29ydE1hcC5oYXMoaGVhZGVyWzFdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9IFwiREVGQVVMVFwiKSB8fCBzZXQuaGFzKGhlYWRlclswXSkgfHwgc2V0LmhhcyhoZWFkZXJbMV0pKTsgXHJcblxyXG4gIH1cclxuXHJcbiAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICBpZih0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSl7XHJcbiAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICBsZXQgYXBwbGllZEZpbHRlclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgIGFwcGxpZWRGaWx0ZXJTZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5hcHBsaWVkRmlsdGVyU2V0XTsgIFxyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSl7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLFwiREVGQVVMVFwiKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25WYWx1ZXMobWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZmxvb3I6IG1pblZhbHVlLFxyXG4gICAgICBjZWlsOiBtYXhWYWx1ZSxcclxuICAgICAgZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHRyYW5zbGF0ZTogdGhpcy5ub3JtYWxUcmFuc2xhdGVGdW5jdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHBlcmNlbnRUcmFuc2xhdGVGdW5jdGlvbiA9IChkYXRhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3QgdmFsID0gZGF0YS50b0ZpeGVkKDEpICsgXCIlXCI7XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSBcIiRcIiArIChNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSk7ICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiBpc05lZ1ZhbCA/IFwiLVwiICsgdmFsIDogdmFsO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBsZXQgaXNXaG9sZU51bSA9IHBhcnNlSW50KGRhdGEudG9TdHJpbmcoKSkgPT0gZGF0YTtcclxuICAgICAgbGV0IHZhbCA9IGlzV2hvbGVOdW0gPyBNYXRoLmFicyhkYXRhKS50b1N0cmluZygpIDogTWF0aC5hYnMoZGF0YSkudG9GaXhlZCgxKTsgXHJcbiAgICAgIHJldHVybiBpc05lZ1ZhbCA/IFwiLSRcIiArIHZhbCA6IFwiJFwiICsgdmFsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAoZGF0YSA+PSAxMDAwKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IChkYXRhIC8gMTAwMCkudG9GaXhlZCgxKSArIFwia1wiO1xyXG4gICAgICByZXR1cm4gdmFsO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhICE9IE1hdGguZmxvb3IoZGF0YSkpIHtcclxuICAgICAgcmV0dXJuIGRhdGEudG9GaXhlZCgxKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcclxuICB9O1xyXG5cclxuICBmaW5kVW5pcXVlRGF0ZXNXaXRoRGF0YShkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzID0gdW5pcShkYXRhLm1hcCgodSkgPT4gdVtcImRhdGVcIl0pKTtcclxuICAgIGxldCB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdDogTmdiRGF0ZVR5cGVbXSA9IFtdO1xyXG4gICAgdW5pcXVlRGF0ZXMuZm9yRWFjaCgoZGF0ZTogYW55KSA9PiB7XHJcbiAgICAgIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0LnB1c2goXHJcbiAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZVN0YW5kYXJkRm9ybWF0KG1vbWVudChkYXRlLCBcIk1NL0REL1lZXCIpLmZvcm1hdChcIk1NL0REL1lZWVlcIikpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHJlT3JkZXJBcHBsaWVkRmlsdGVyc0FycmF5KGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgIGxldCBpc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZEYXRhSXNGaWx0ZXJlZChpc0ZpbHRlcmVkLCBpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkLCBkYXRlKTtcclxuICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZEYXRhSXNGaWx0ZXJlZChpc0ZpbHRlcmVkOiBib29sZWFuLCBpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkOiBib29sZWFuLCBkYXRlPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwidXNlclwiICYmICF0aGlzLnRvb2x0aXBNYXAuaGFzKFwidXNlclwiKSkge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gY2xvbmVEZWVwKGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RW5kVGltZU11bHRpXCIpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKFxyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLFxyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pXHJcbiAgICAgICkgfHwgIXRoaXMuaW5jbHVkZVplcm9UaW1lIHx8ICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydEVuZFRpbWVcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSAhaXNFcXVhbCh0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykpIHx8ICF0aGlzLmluY2x1ZGVaZXJvVGltZSB8fCAhdGhpcy5pbmNsdWRlTXVsdGlUaW1lO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgJiYgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuc2xpZGVyRGF0YSk7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJwb3N0ZWRBZHVcIiAmJiB0aGlzLnN1YlJhZGlvQnV0dG9uID09IFwibm90UmVxdWlyZWRcIikge1xyXG4gICAgICAgIGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghaXNGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJlbmREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwicGVyaW9kXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImRhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiXHJcbiAgICApIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9XHJcbiAgICAgICAgIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJlxyXG4gICAgICAgICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLmZsaWdodERhdGVSYW5nZSk7XHJcbiAgICAgIGlmICghaXNGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdG90YWxPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuKS5sZW5ndGg7XHJcbiAgICAgIGxldCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4gJiYgeC5pc1NlbGVjdGVkKS5sZW5ndGg7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSBzZWxlY3RlZE9wdGlvbnNDb3VudCA+IDAgJiYgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT0gdG90YWxPcHRpb25zQ291bnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIHJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IHNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICBpZiAoaXNGaWx0ZXJlZCAmJiAhc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH0gZWxzZSBpZiAoaXNGaWx0ZXJlZCAmJiBzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uc2V0XTtcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSwga2V5VG9Ta2lwOiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbLi4ub3JpZ2luYWxEYXRhXTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkgIT0ga2V5VG9Ta2lwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVyU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnREYXRlXCIgfHwga2V5ID09PSBcImVuZERhdGVcIiB8fCBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8IGtleSA9PSBcImRhdGVcIiB8fCBrZXkgPT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiICkge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgICAgIHx8IGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCBrZXkgPT09IFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuT3JkZXJzSW5UaGVSYW5nZShvcmRlcjogYW55LCByYW5nZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlID0gbW9tZW50KG9yZGVyW2tleV0pLmlzQmV0d2VlbihyYW5nZS5taW5TZWxlY3RlZERhdGUsIHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlID0gbW9tZW50KG9yZGVyW2tleV0pLmlzU2FtZShyYW5nZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgbGV0IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZSA9IG1vbWVudChvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgIHJldHVybiBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSB8fCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgfHwgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvclRpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIkhIOm1tOnNzXCI7XHJcbiAgICBsZXQgc2VsZWN0ZWRTdGFydERhdGUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzZWxlY3RlZEVuZERhdGUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLmVuZFRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc3RhcnRUaW1lID0gbW9tZW50KG9iai5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgZW5kVGltZSA9IG1vbWVudChvYmouZW5kVGltZSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRTdGFydERhdGUpO1xyXG4gICAgbGV0IGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gc3RhcnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgbGV0IGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IGVuZFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gbW9tZW50KHNlbGVjdGVkRGF0YS5mcm9tVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzZWxlY3RlZFRvVGltZSA9IG1vbWVudChzZWxlY3RlZERhdGEudG9UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IG9ialRpbWUgPSBvYmpba2V5XTtcclxuICAgIFxyXG4gICAgaWYgKFtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqVGltZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlTXVsdGkgJiYgb2JqW2tleV0gPT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PSBcIjBcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09IFwiMFwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVUaW1lUmFuZ2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgbW9tZW50VGltZSA9IG1vbWVudChvYmpUaW1lLGZvcm1hdCk7XHJcbiAgICBcclxuICAgIGxldCBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lID0gbW9tZW50VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICBsZXQgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgPSBtb21lbnRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWUgPSBtb21lbnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSB8fFxyXG4gICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZFRvVGltZSB8fFxyXG4gICAgICBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOmFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIkhIOm1tOnNzXCI7XHJcbiAgICBsZXQgc2VsZWN0ZWRGcm9tVGltZSA9IG1vbWVudChzZWxlY3RlZERhdGEuZnJvbVRpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgc2VsZWN0ZWRUb1RpbWUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIFxyXG4gICAgaWYoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZihzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV1bMF0gPT0gXCIwXCIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09IFwiMFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbGV0IHN0YXJ0VGltZSA9IG1vbWVudChvYmpba2V5XVsxXSwgZm9ybWF0KTtcclxuICAgIGxldCBlbmRUaW1lID0gbW9tZW50KG9ialtrZXldWzJdLCBmb3JtYXQpO1xyXG5cclxuICAgIGxldCBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lID0gc3RhcnRUaW1lLmlzU2FtZShzZWxlY3RlZEZyb21UaW1lKTtcclxuICAgIGxldCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgbGV0IGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSA9IGVuZFRpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSlcclxuICAgICk7XHJcblxyXG59XHJcblxyXG4gIGdldERhdGFJblRoZURhdGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBwYXJzaW5nRm9ybWF0OiBzdHJpbmc7XHJcbiAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgICAgXHJcbiAgICAgIGxldCBtb21lbnRTdGFydERhdGUgPSBtb21lbnQob2JqLnN0YXJ0RGF0ZSk7XHJcbiAgICAgIGxldCBtb21lbnRFbmREYXRlID0gbW9tZW50KG9iai5lbmREYXRlKTtcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlID0gbW9tZW50U3RhcnREYXRlLmlzQmV0d2VlbihcclxuICAgICAgICB2YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgICB2YWx1ZS50b0RhdGVcclxuICAgICAgKTtcclxuICAgICAgbGV0IGVuZERhdGVJc0JldHdlZW5TZWxEYXRlID0gbW9tZW50RW5kRGF0ZS5pc0JldHdlZW4oXHJcbiAgICAgICAgdmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgdmFsdWUudG9EYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgbGV0IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKG1vbWVudFN0YXJ0RGF0ZSk7XHJcbiAgICAgIGxldCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gdmFsdWUudG9EYXRlLmlzU2FtZShtb21lbnRFbmREYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgc3RhcnREYXRlSXNTYW1lQXNTZWxTdGFydERhdGUpICYmXHJcbiAgICAgICAgKGVuZERhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGVuZERhdGVJc1NhbWVBc1NlbEVuZERhdGUpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJBaXJEYXRlXCIgfHwga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIpIHtcclxuICAgICAgcGFyc2luZ0Zvcm1hdCA9IFwiTU0vREQvWVlZWVwiO1xyXG4gICAgICBsZXQgZGF0ZUlzQmV0d2VlblNlbERhdGUgPSBtb21lbnQob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzQmV0d2Vlbih2YWx1ZS5taW5TZWxlY3RlZERhdGUsIHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICBsZXQgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gbW9tZW50KG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc1NhbWUodmFsdWUubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSBtb21lbnQob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGRhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBpbml0aWFsaXplVGltZUZpbHRlckRhdGEoY2xvbmVkRGF0YTogYW55W10sIGtleSA9IFwic3RhcnRFbmRUaW1lXCIpIHtcclxuICAgIGxldCBzdGFydFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJzdGFydFRpbWVcIik7XHJcbiAgICBsZXQgZW5kVGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcImVuZFRpbWVcIik7XHJcbiAgXHJcbiAgICBzdGFydFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKTtcclxuICAgIH0pO1xyXG4gIFxyXG4gICAgZW5kVGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lRGVzY2VuZGluZyhhLCBiKTtcclxuICAgIH0pO1xyXG4gIFxyXG4gICAgbGV0IGluaXRpYWxTdGFydEVuZFRpbWUgPSB7XHJcbiAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgZW5kVGltZTogZW5kVGltZUFyclswXSxcclxuICAgIH07XHJcbiAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBpbml0aWFsU3RhcnRFbmRUaW1lKTtcclxuICB9IFxyXG5cclxuICByZXR1cm5Db2x1bW5GaWx0ZXJTdGF0dXMoZGF0YTogYW55W10sIGhlYWRlck5hbWU6IHN0cmluZyB8IG51bWJlcikge1xyXG5cclxuICAgIGlmKGhlYWRlck5hbWUgPT0gXCJzdGFydEVuZFRpbWVcIil7XHJcbiAgICAgIGxldCB0aW1lID0gZGF0YS5tYXAodSA9PiB1W2hlYWRlck5hbWVdWzBdKTtcclxuICAgICAgbGV0IHVuaXFUaW1lID0gdW5pcSh0aW1lKTtcclxuICAgICAgcmV0dXJuIHVuaXFUaW1lLmxlbmd0aCA9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W2hlYWRlck5hbWVdKSkubGVuZ3RoID4gMSA/IGZhbHNlIDogdHJ1ZTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0RmlsdGVyT3B0aW9uc0RhdGEoZGF0YTogYW55W10sIGNsb25lZERhdGE6IGFueVtdKXtcclxuICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgaWYoYXBwbGllZEZpbHRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSl7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRhdGEoY2xvbmVkRGF0YSwgdGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzU3RhdGUoY2xvbmVkRGF0YTogYW55W10sIHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkZpbHRlcklzQXBwbGllZChjbG9uZWREYXRhLHZhbHVlKTtcclxuICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgIHJldHVybiBpc0ZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkZpbHRlcklzQXBwbGllZChjbG9uZWREYXRhOiBhbnlbXSx2YWx1ZTogYW55KXtcclxuICAgIGxldCBpbml0aWFsVmFsdWVPZkNvbHVtbiA9IHNvcnRCeShjbG9uZWREYXRhLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgbGV0IGN1cnJlbnRWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KHRoaXMuYXBwbHlGaWx0ZXIoY2xvbmVkRGF0YSx2YWx1ZSkubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSk7XHJcbiAgICByZXR1cm4gIWlzRXF1YWwoaW5pdGlhbFZhbHVlT2ZDb2x1bW4sIGN1cnJlbnRWYWx1ZU9mQ29sdW1uKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVyKGRhdGE6IGFueVtdLHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGZpbHRlcmVkRGF0YSA9IGRhdGE7XHJcbiAgICBsZXQga2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IG9ialtrZXldID49IHZhbHVlLm1pbiAmJiBvYmpba2V5XSA8PSB2YWx1ZS5tYXgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZW5kRGF0ZVwiIHx8IGtleSA9PT0gXCJBaXJEYXRlXCIgfHwga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHwga2V5ID09IFwiZGF0ZVwiIHx8IGtleSA9PSBcInJldmlzaW9uU3RhcnREYXRlXCIpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwZXJpb2RcIiApIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fCBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiXHJcbiAgICAgICAgfHwga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIpIHtcclxuICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lTXVsdGlcIiB8fCBrZXkgPT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7ICBcclxuICB9XHJcblxyXG4gIGlzT2JqZWN0SW5UaGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IHtmcm9tRGF0ZTogbW9tZW50Lk1vbWVudCwgdG9EYXRlOiBtb21lbnQuTW9tZW50fSxrZXk6c3RyaW5nKXtcclxuICAgIGxldCBvYmpWYWwgPSBvYmpba2V5XTtcclxuICAgIGxldCBtb21lbnREYXRlID0gbW9tZW50KG9ialZhbCk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzU3RhcnRPZlRoZVJhbmdlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKG9ialZhbCk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzRW5kT2ZUaGVSYW5nZSA9IHZhbHVlLnRvRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVCZXR3ZWVuVGhlU3RhcnRBbmRFbmRPZlJhbmdlID0gbW9tZW50RGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsdmFsdWUudG9EYXRlKTtcclxuICAgIHJldHVybiBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgfHwgaXNEYXRlU2FtZUFzRW5kT2ZUaGVSYW5nZSB8fCBpc0RhdGVCZXR3ZWVuVGhlU3RhcnRBbmRFbmRPZlJhbmdlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KXtcclxuICAgIGxldCBhY3RpdmVLZXkgPSB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICBsZXQga2V5QXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYoa2V5LmluY2x1ZGVzKGFjdGl2ZUtleSkpe1xyXG4gICAgICAgIGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9ICB0aGlzLmlzVG9vbHRpcEFjdGl2ZShrZXlBcnIsIHNvcnRNYXApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0ZU9mQWxsVGhlS2V5cyhzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pe1xyXG4gICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICBsZXQga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgIHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSB0aGlzLmlzVG9vbHRpcEFjdGl2ZShrZXlBcnIsc29ydE1hcCk7XHJcbiAgICAgfSkgICAgIFxyXG4gIH1cclxuICAgIFxyXG59XHJcbiJdfQ==