raain-app 1.6.37 → 3.2.2

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.
@@ -18,7 +18,7 @@ export class CompareManager {
18
18
  if (!this.buildCompares?.compareCumulative) {
19
19
  return new XYType(0, 0);
20
20
  }
21
- const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
21
+ const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
22
22
  return new XYType(maxValue, maxValue);
23
23
  }
24
24
  // Default: KGE normalized 0-1 (from raain-model defaults)
@@ -77,7 +77,7 @@ export class CompareManager {
77
77
  date: c.date,
78
78
  name: c.name,
79
79
  comparePoints: c.qualityPoints.map((p) => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),
80
- comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),
80
+ comparePointsMax: new XYType(Math.max(c.maxValue * 1.2, 1), Math.max(c.maxValue * 1.2, 1)),
81
81
  comparePointsHistory: c.qualityPointsLegacy,
82
82
  remarks: c.remarks,
83
83
  qualityIndicator,
@@ -103,7 +103,7 @@ export class CompareManager {
103
103
  return;
104
104
  }
105
105
  const countForAverage = targetsOrdered.length;
106
- const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
106
+ const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
107
107
  const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map((qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));
108
108
  const cumulativePointsMax = new XYType(maxValue, maxValue);
109
109
  // Default: KGE normalized 0-1
@@ -364,4 +364,4 @@ export class CompareManager {
364
364
  this.selectGaugeInCompare();
365
365
  }
366
366
  }
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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QUNYO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgR2F1Z2VOb2RlLFxuICAgIElDb21wYXJlUGVyRGF0ZSxcbiAgICBJQ29tcGFyZXMsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeCxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVSUNvbXBhcmUge1xuICAgIGRhdGU6IERhdGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xuICAgIHF1YWxpdHlJbmRpY2F0b3I6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcbiAgICBwdWJsaWMgZ2F1Z2VzSW5NYXA6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBzZWxlY3RlZEdhdWdlczogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuICAgIHB1YmxpYyBzcGVlZHM6IE1hcExhdExuZ1tdO1xuXG4gICAgLy8gZnJvbSBjb21wYXJlc1RpbWVsaW5lXG4gICAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gICAgcHVibGljIHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVNwZWVkTWF0cml4OiBQb3NpdGlvblZhbHVlW107XG4gICAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG4gICAgcHVibGljIGNvbXBhcmVEYXRlczogRGF0ZVtdO1xuXG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeTogc3RyaW5nO1xuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBwdWJsaWMgZ2xvYmFsUXVhbGl0eUluZGljYXRvcjogbnVtYmVyO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlZCBjdW11bGF0aXZlIGZyb20gZ3JhbnVsYXIgY29tcGFyaXNvbnMgKGNvbXB1dGVkIGZyb20gYnVpbGRDb21wYXJlcylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVBvaW50cygpOiBYWVR5cGVbXSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZT8ucXVhbGl0eVBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgIChxcCkgPT4gbmV3IFhZVHlwZShxcC5nZXRHYXVnZVZhbHVlKCksIHFwLmdldFJhaW5WYWx1ZSgpLCAyLCBxcC5nYXVnZUxhYmVsLCBxcC5nYXVnZUlkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUG9pbnRzTWF4KCk6IFhZVHlwZSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUubWF4VmFsdWUgKiAxLjI7XG4gICAgICAgIHJldHVybiBuZXcgWFlUeXBlKG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xIChmcm9tIHJhYWluLW1vZGVsIGRlZmF1bHRzKVxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUXVhbGl0eUluZGljYXRvcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZUN1bXVsYXRpdmU/LnF1YWxpdHlQb2ludHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKFxuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaW5Ob2RlOiBSYWluTm9kZTtcblxuICAgIHB1YmxpYyBnZXQgcmFpbk5vZGUoKTogUmFpbk5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFpbk5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByYWluTm9kZShyYWluTm9kZTogUmFpbk5vZGUpIHtcbiAgICAgICAgdGhpcy5fcmFpbk5vZGUgPSByYWluTm9kZTtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhbkFsbCgpIHtcbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IFtdO1xuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zcGVlZHMgPSBbXTtcblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSB7XG4gICAgICAgICAgICBjb21wYXJlc1BlckRhdGU6IFtdLFxuICAgICAgICAgICAgY29tcGFyZUN1bXVsYXRpdmU6IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKDAsIDApO1xuICAgICAgICB0aGlzLmdsb2JhbFF1YWxpdHlJbmRpY2F0b3IgPSBudWxsO1xuICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXNcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUgeWV0Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCwgb25seU9uZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjb21wYXJlUGVyRGF0ZSA9IHRoaXMuZ2V0Q29tcGFyZVBlckRhdGUoZnJhbWVTZXQuZGF0ZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlIHx8XG4gICAgICAgICAgICAhY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KFxuICAgICAgICAgICAgLy8gICAgICdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSlcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uQ2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9ubHlPbmUpIHtcbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuZGF0ZS5nZXRUaW1lKCkgPT09IGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdID0gY29tcGFyZVBlckRhdGUuY29tcGFyZVRpbWVsaW5lXG4gICAgICAgICAgICAubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xXG4gICAgICAgICAgICAgICAgY29uc3QgcXVhbGl0eUluZGljYXRvciA9IFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKGMucXVhbGl0eVBvaW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogYy5kYXRlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRSYWluVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdhdWdlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNNYXg6IG5ldyBYWVR5cGUoYy5tYXhWYWx1ZSAqIDEuMiwgYy5tYXhWYWx1ZSAqIDEuMiksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya3M6IGMucmVtYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGljYXRvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGU/LmdldFRpbWUoKSAtIGIuZGF0ZT8uZ2V0VGltZSgpKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkID1cbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFNwZWVkKCk7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gdWlDb21wYXJlcy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IHVpQ29tcGFyZXM7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNSxcbiAgICAgICAgdGltZVN0ZXBNb2RlOiAnZXEnIHwgJ2x0ZScgPSAnZXEnXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkLCBwcm92aWRlciwgdGltZVN0ZXBJbk1pbnV0ZXMsIHRpbWVTdGVwTW9kZSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21wYXJlc1RpbWVsaW5lKHRhcmdldHNPcmRlcmVkLCBwZXJpb2QsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3VudEZvckF2ZXJhZ2UgPSB0YXJnZXRzT3JkZXJlZC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMjtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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SSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUU7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNaO3FCQUFNO29CQUNILENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgR2F1Z2VOb2RlLFxuICAgIElDb21wYXJlUGVyRGF0ZSxcbiAgICBJQ29tcGFyZXMsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeCxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVSUNvbXBhcmUge1xuICAgIGRhdGU6IERhdGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xuICAgIHF1YWxpdHlJbmRpY2F0b3I6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcbiAgICBwdWJsaWMgZ2F1Z2VzSW5NYXA6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBzZWxlY3RlZEdhdWdlczogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuICAgIHB1YmxpYyBzcGVlZHM6IE1hcExhdExuZ1tdO1xuXG4gICAgLy8gZnJvbSBjb21wYXJlc1RpbWVsaW5lXG4gICAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gICAgcHVibGljIHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVNwZWVkTWF0cml4OiBQb3NpdGlvblZhbHVlW107XG4gICAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG4gICAgcHVibGljIGNvbXBhcmVEYXRlczogRGF0ZVtdO1xuXG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeTogc3RyaW5nO1xuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBwdWJsaWMgZ2xvYmFsUXVhbGl0eUluZGljYXRvcjogbnVtYmVyO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlZCBjdW11bGF0aXZlIGZyb20gZ3JhbnVsYXIgY29tcGFyaXNvbnMgKGNvbXB1dGVkIGZyb20gYnVpbGRDb21wYXJlcylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVBvaW50cygpOiBYWVR5cGVbXSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZT8ucXVhbGl0eVBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgIChxcCkgPT4gbmV3IFhZVHlwZShxcC5nZXRHYXVnZVZhbHVlKCksIHFwLmdldFJhaW5WYWx1ZSgpLCAyLCBxcC5nYXVnZUxhYmVsLCBxcC5nYXVnZUlkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUG9pbnRzTWF4KCk6IFhZVHlwZSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUubWF4VmFsdWUgKiAxLjIsIDEpO1xuICAgICAgICByZXR1cm4gbmV3IFhZVHlwZShtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMSAoZnJvbSByYWFpbi1tb2RlbCBkZWZhdWx0cylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWluTm9kZTogUmFpbk5vZGU7XG5cbiAgICBwdWJsaWMgZ2V0IHJhaW5Ob2RlKCk6IFJhaW5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhaW5Ob2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmFpbk5vZGUocmFpbk5vZGU6IFJhaW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuX3JhaW5Ob2RlID0gcmFpbk5vZGU7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBbXTtcbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gW107XG4gICAgICAgIHRoaXMuc3BlZWRzID0gW107XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgICAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gbnVsbDtcbiAgICAgICAgLy8gZ3JhbnVsYXJDdW11bGF0aXZlKiBhcmUgbm93IGdldHRlcnMgY29tcHV0ZWQgZnJvbSBidWlsZENvbXBhcmVzXG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsIG9ubHlPbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgIC8vICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgLy8gdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbmx5T25lKSB7XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZVxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihjLnF1YWxpdHlQb2ludHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGMuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2V0UmFpblZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKE1hdGgubWF4KGMubWF4VmFsdWUgKiAxLjIsIDEpLCBNYXRoLm1heChjLm1heFZhbHVlICogMS4yLCAxKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya3M6IGMucmVtYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGljYXRvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGU/LmdldFRpbWUoKSAtIGIuZGF0ZT8uZ2V0VGltZSgpKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkID1cbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFNwZWVkKCk7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gdWlDb21wYXJlcy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IHVpQ29tcGFyZXM7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNSxcbiAgICAgICAgdGltZVN0ZXBNb2RlOiAnZXEnIHwgJ2x0ZScgPSAnZXEnXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICAgICAgICAgIHRhcmdldHNPcmRlcmVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwTW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQsIHBlcmlvZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlICogMS4yLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1469,7 +1469,7 @@ class CompareManager {
1469
1469
  if (!((_a = this.buildCompares) === null || _a === void 0 ? void 0 : _a.compareCumulative)) {
1470
1470
  return new XYType(0, 0);
1471
1471
  }
1472
- const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
1472
+ const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
1473
1473
  return new XYType(maxValue, maxValue);
1474
1474
  }
1475
1475
  // Default: KGE normalized 0-1 (from raain-model defaults)
@@ -1531,7 +1531,7 @@ class CompareManager {
1531
1531
  date: c.date,
1532
1532
  name: c.name,
1533
1533
  comparePoints: c.qualityPoints.map((p) => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),
1534
- comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),
1534
+ comparePointsMax: new XYType(Math.max(c.maxValue * 1.2, 1), Math.max(c.maxValue * 1.2, 1)),
1535
1535
  comparePointsHistory: c.qualityPointsLegacy,
1536
1536
  remarks: c.remarks,
1537
1537
  qualityIndicator,
@@ -1559,7 +1559,7 @@ class CompareManager {
1559
1559
  return;
1560
1560
  }
1561
1561
  const countForAverage = targetsOrdered.length;
1562
- const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
1562
+ const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
1563
1563
  const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map((qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));
1564
1564
  const cumulativePointsMax = new XYType(maxValue, maxValue);
1565
1565
  // Default: KGE normalized 0-1
@@ -2976,8 +2976,7 @@ class ProfileService {
2976
2976
  // Merge additional qualities (lte mode returns multiple freq groups)
2977
2977
  for (let i = 1; i < allQualities.length; i++) {
2978
2978
  const extra = new RainComputationQuality(allQualities[i]);
2979
- extra.qualitySpeedMatrixContainer =
2980
- SpeedMatrixContainer.CreateFromJson(extra.qualitySpeedMatrixContainer);
2979
+ extra.qualitySpeedMatrixContainer = SpeedMatrixContainer.CreateFromJson(extra.qualitySpeedMatrixContainer);
2981
2980
  rainComputationQuality.merge(extra);
2982
2981
  }
2983
2982
  return rainComputationQuality;