igniteui-angular 12.3.7 → 12.3.8

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.
@@ -1,4 +1,4 @@
1
- import { IgxEditRow } from './common/crud.service';
1
+ import { IgxAddRow, IgxEditRow } from './common/crud.service';
2
2
  import { GridInstanceType, GridSummaryCalculationMode, GridSummaryPosition } from './common/enums';
3
3
  import { IgxGridCell } from './grid-public-cell';
4
4
  import mergeWith from 'lodash.mergewith';
@@ -26,6 +26,18 @@ class BaseRow {
26
26
  const primaryKey = this.grid.primaryKey;
27
27
  return primaryKey ? data[primaryKey] : data;
28
28
  }
29
+ /**
30
+ * Gets if this represents add row UI
31
+ *
32
+ * ```typescript
33
+ * let isAddRow = row.addRowUI;
34
+ * ```
35
+ */
36
+ get addRowUI() {
37
+ return !!this.grid.crudService.row &&
38
+ this.grid.crudService.row.getClassName() === IgxAddRow.name &&
39
+ this.grid.crudService.row.id === this.key;
40
+ }
29
41
  /**
30
42
  * The data record that populates the row.
31
43
  *
@@ -690,4 +702,4 @@ export class IgxSummaryRow {
690
702
  return row;
691
703
  }
692
704
  }
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBT2pELE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE1BQWUsT0FBTztJQVFsQjs7T0FFRztJQUNILElBQVcsU0FBUzs7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLElBQUksS0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsMENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsR0FBRzs7UUFDVixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQVcsSUFBSTs7UUFD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QUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENlbGxUeXBlIH0gZnJvbSAnLi9jb21tb24vY2VsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hFZGl0Um93IH0gZnJvbSAnLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JpZEluc3RhbmNlVHlwZSwgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUsIEdyaWRTdW1tYXJ5UG9zaXRpb24gfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XHJcbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuL2NvbW1vbi9yb3cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSWd4R3JpZENlbGwgfSBmcm9tICcuL2dyaWQtcHVibGljLWNlbGwnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vZ3JpZC9ncmlkLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xyXG5pbXBvcnQgeyBJZ3hUcmVlR3JpZENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCBtZXJnZVdpdGggZnJvbSAnbG9kYXNoLm1lcmdld2l0aCc7XHJcblxyXG5hYnN0cmFjdCBjbGFzcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuICAgIHByb3RlY3RlZCBfZGF0YT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJvdyBrZXkuXHJcbiAgICAgKiBBIHJvdyBpbiB0aGUgZ3JpZCBpcyBpZGVudGlmaWVkIGVpdGhlciBieTpcclxuICAgICAqIC0gcHJpbWFyeUtleSBkYXRhIHZhbHVlLFxyXG4gICAgICogLSB0aGUgd2hvbGUgcm93RGF0YSwgaWYgdGhlIHByaW1hcnlLZXkgaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93S2V5ID0gcm93LmtleTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGtleSgpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XHJcbiAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkgPyBkYXRhW3ByaW1hcnlLZXldIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dEYXRhID0gcm93LmRhdGE7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5FZGl0TW9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKHRoaXMuZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneS5jbG9uZSh0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmtleSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWUgPSBzcmNWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlICdkYXRhJyBpbnN0ZWFkXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRhdGEgcmVjb3JkIHRoYXQgcG9wdWxhdGVzIHRoZSByb3dcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCByb3dEYXRhKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAna2V5JyBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93SUQoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IGluIGVkaXQgbW9kZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdztcclxuICAgICAgICAgICAgcmV0dXJuIChlZGl0Um93U3RhdGUgJiYgZWRpdFJvd1N0YXRlLmlkID09PSB0aGlzLmtleSkgfHwgZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cucGlubmVkID0gIXJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByb3cgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgaW4gZGVsZXRlIHN0YXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRlbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaWYgdGhlIHJvdyBoYXMgY2hpbGQgcm93cy4gQWx3YXlzIHJldHVybiBmYWxzZSBmb3IgSWd4R3JpZFJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzR2hvc3RSZWNvcmQodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlczogQ2VsbFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbDogQ2VsbFR5cGUgPSBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCB0aGlzLmluZGV4LCBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICByZXMucHVzaChjZWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlucyB0aGUgc3BlY2lmaWVkIHJvdy5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd1Bpbm5pbmdgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpblJvdyh0aGlzLmtleSwgdGhpcy5pbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyB1bnBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0udW5waW4oKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5waW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC51bnBpblJvdyh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBzcGVjaWZpZWQgcm93IG9iamVjdCBhbmQgdGhlIGRhdGEgc291cmNlIHJlY29yZCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdXBkYXRlIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93J3MgdmFsdWVcclxuICAgICAqIGxldCBuZXdWYWx1ZSA9IFwiQXBwbGVcIjtcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0udXBkYXRlKG5ld1ZhbHVlKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjcnVkU2VydmljZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZTtcclxuICAgICAgICBpZiAoY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgJiYgY3J1ZFNlcnZpY2UuY2VsbC5pZC5yb3dJRCA9PT0gdGhpcy5rZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEVkaXRSb3codGhpcy5rZXksIHRoaXMuaW5kZXgsIHRoaXMuZGF0YSwgdGhpcy5ncmlkKTtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHJvdywgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcm93IGZyb20gdGhlIGdyaWQncyBkYXRhIHNvdXJjZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd0RlbGV0ZWRgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIGRlbGV0ZSB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0uZGVsZXRlKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQuZGVsZXRlUm93QnlJZCh0aGlzLmtleSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2luYXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdywgaWYgZ3JpZCBpcyBncm91cGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBSb3dUeXBlIHtcclxuICAgICAgICBsZXQgcGFyZW50OiBJZ3hHcm91cEJ5Um93O1xyXG4gICAgICAgIGlmICghdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaW5kZXggLSAxO1xyXG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHJlYykpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IG5ldyBJZ3hHcm91cEJ5Um93KHRoaXMuZ3JpZCwgaSwgcmVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgcHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnksIHByaXZhdGUgX3RyZWVSb3c/OiBJVHJlZUdyaWRSZWNvcmQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMgJiYgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApID4gMCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAvLyBmaXJzdFJvd0luZGV4IGlzIGJhc2VkIG9uIGRhdGEgcmVzdWx0IGFmdGVyIGFsbCBwaXBlcyB0cmlnZ2VyZWQsIGV4Y2x1ZGluZyBzdW1tYXJ5IHBpcGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpICsgMTtcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgc3VtbWFyeSByb3cgZm9yIGVhY2ggcm9vdCByZWNvcmQsIHNvIHdlIGNhbGN1bGF0ZSBob3cgbWFueSByb290IHJlY29yZHMgYXJlIHJlbmRlcmVkIGJlZm9yZSB0aGUgY3VycmVudCByb3dcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dEYXRhID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5yb3dEYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlYyA9IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YSA/IHRoaXMuX2RhdGEgOiB0aGlzLmdyaWQuaXNUcmVlUm93KHJlYykgPyByZWMuZGF0YSA6IHJlYztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNoaWxkIHJvd3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogUm93VHlwZVtdIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbjogSWd4VHJlZUdyaWRSb3dbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVSb3cuZXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlUm93LmNoaWxkcmVuLmZvckVhY2goKHJlYywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneFRyZWVHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBSb3dUeXBlIHtcclxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkodGhpcy50cmVlUm93LnBhcmVudD8ucm93SUQpO1xyXG4gICAgICAgIHJldHVybiByb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgY2hpbGQgcm93cyBleGlzdC4gQWx3YXlzIHJldHVybiBmYWxzZSBmb3IgSWd4R3JpZFJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVSb3cuY2hpbGRyZW4ubGVuZ3RoID4gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGBJVHJlZUdyaWRSZWNvcmRgIHdpdGggbWV0YWRhdGEgYWJvdXQgdGhlIHJvdyBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHJlZSBncmlkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IHJvd1BhcmVudCA9IHRoaXMudHJlZUdyaWQuZ2V0Um93QnlLZXkoMSkudHJlZVJvdy5wYXJlbnQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB0cmVlUm93KCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVSb3cgPz8gdGhpcy5ncmlkLnJlY29yZHMuZ2V0KHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgaXNQaW5uZWQgPSByb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcGlubmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cucGlubmVkID0gIXJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBleHBhbmRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgZXNFeHBhbmRlZCA9IHJvdy5leHBhbmRlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLnRyZWVSb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwYW5kcy9jb2xsYXBzZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgZXhwYW5kZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5rZXksIHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBUT0RPIGNlbGxcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzR2hvc3RSZWNvcmQodGhpcy5kYXRhKSA/IHRoaXMudHJlZVJvdy5pc0ZpbHRlcmVkT3V0UGFyZW50ID09PSB1bmRlZmluZWQgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJvb3RQYXJlbnQocm93OiBJVHJlZUdyaWRSZWNvcmQpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHdoaWxlIChyb3cucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJvdyA9IHJvdy5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3c7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiByb3cgaXNsYW5kcyBleGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdKTtcclxuICAgICAgICBjb25zdCBleHBhbmRlZFJvd3MgPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbHRlcigocmVjLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByZWM7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kICsgZXhwYW5kZWRSb3dzLmxlbmd0aCArIHRoaXMuaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElneEdyb3VwQnlSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcm93IGluZGV4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsd2F5cyB0cnVlLCBiZWNhdXNlIHRoaXMgaXMgaW4gaW5zdGFuY2Ugb2YgYW4gSWd4R3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzR3JvdXBCeVJvdzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBncm91cFJvdygpOiBJR3JvdXBCeVJlY29yZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwUm93ID8gdGhpcy5fZ3JvdXBSb3cgOiB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneEdyaWRSb3dbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEdyaWRSb3codGhpcy5ncmlkLCB0aGlzLmluZGV4ICsgMSArIGksIHJlYyk7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocm93KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0RldGFpbFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93ID0gdGhpcy5ncmlkLmRhdGFWaWV3WzBdO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNEZXRhaWxSb3dzID0gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5zaXplO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgbGV0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gMDtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmluZGV4T2YoZmlyc3RSb3cpO1xyXG5cclxuICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdHcm91cGVkUm93cyAtPiB1c2UgaXQgdG8gcmVzb2x2ZSBzdW1tYXJ5Um93IGZvciBlYWNoIGdyb3VwIGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0RldGFpbFJvd3MgLT4gaXNlIGl0IHRvIHJlc29sdmUgdGhlIGRldGFpbCByb3cgZm9yIGVhY2ggZXhwYW5kZWQgZ3JpZCByb3cgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuZm9yRWFjaCgociwgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdEZXRhaWxSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgZmlyc3RSb3cgaXMgYSBjaGlsZCBvZiB0aGUgbGFzdCBpdGVtIGluIHByZWNlZGluZ0dyb3VwUm93cyxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxyXG4gICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzID0gcHJlY2VkaW5nR3JvdXBSb3dzLmZpbHRlcihnciA9PiB0aGlzLmdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzICs9IC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcHJlY2VkaW5nRGV0YWlsUm93cy5sZW5ndGggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIGZpcnN0Um93SW5kICsgdGhpcy5pbmRleDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGdyaWQ6IElneEdyaWRDb21wb25lbnQsIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX2dyb3VwUm93PzogSUdyb3VwQnlSZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICB0aGlzLmlzR3JvdXBCeVJvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5ldmVyeShyb3cgPT4gcm93LnNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChbcm93LmtleV0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBncm91cCByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBncm91cFJvd0V4cGFuZGVkID0gZ3JvdXBSb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cCh0aGlzLmdyb3VwUm93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkQVBJLnNldF9ncm91cHJvd19leHBhbnNpb25fc3RhdGUodGhpcy5ncm91cFJvdywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZSA/IHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID09PSB0aGlzLmluZGV4IDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2dnbGVzIHRoZSBncm91cCByb3cgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogZ3JvdXBSb3cudG9nZ2xlKClcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVHcm91cCh0aGlzLmdyb3VwUm93KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBncmlkQVBJKCk6IElneEdyaWRBUElTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkgYXMgSWd4R3JpZEFQSVNlcnZpY2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hTdW1tYXJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1N1bW1hcnlSb3c6IGJvb2xlYW47XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VyZW50IGdyaWQgdHlwZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdyaWRUeXBlOiBHcmlkSW5zdGFuY2VUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIElHcm91cEJ5UmVjb3JkIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBncm91cCByZWNvcmQsIGlmIHRoZSByb3cgaXMgYSBHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN1bW1hcmllcygpOiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3VtbWFyaWVzID8gdGhpcy5fc3VtbWFyaWVzIDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdLnN1bW1hcmllcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmIHRoaXMuZ3JpZC5wYWdlID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gR3JpZEluc3RhbmNlVHlwZS5HcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0RldGFpbFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNEZXRhaWxSb3dzID0gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmluZGV4T2YoZmlyc3RSb3cpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0RldGFpbFJvd3MgLT4gaXNlIGl0IHRvIHJlc29sdmUgdGhlIGRldGFpbCByb3cgZm9yIGVhY2ggZXhwYW5kZWQgZ3JpZCByb3cgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdEZXRhaWxSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuVHJlZUdyaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZCA9IHRoaXMuZ3JpZCBhcyBJZ3hUcmVlR3JpZENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kZXggPSB0aGlzLmdyaWQucHJvY2Vzc2VkRXhwYW5kZWRGbGF0RGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyAoKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBhZ2UgfHwgMCkgKiAodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGVyUGFnZSB8fCAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGdyaWQ6IElneEdyaWRDb21wb25lbnQgfCBJZ3hUcmVlR3JpZENvbXBvbmVudCB8IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgaW5kZXg6IG51bWJlciwgcHJpdmF0ZSBfc3VtbWFyaWVzPzogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiwgdHlwZT86IEdyaWRJbnN0YW5jZVR5cGUpIHtcclxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICB0aGlzLmlzU3VtbWFyeVJvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9qRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUV6QyxNQUFlLE9BQU87SUFRbEI7O09BRUc7SUFDSCxJQUFXLFNBQVM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFXLEdBQUc7O1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFX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Q0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sYUFBYSxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzVEO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENlbGxUeXBlIH0gZnJvbSAnLi9jb21tb24vY2VsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hBZGRSb3csIElneEVkaXRSb3cgfSBmcm9tICcuL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSW5zdGFuY2VUeXBlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcclxuaW1wb3J0IHsgUm93VHlwZSB9IGZyb20gJy4vY29tbW9uL3Jvdy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbCB9IGZyb20gJy4vZ3JpZC1wdWJsaWMtY2VsbCc7XHJcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkL2dyaWQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XHJcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcclxuaW1wb3J0IG1lcmdlV2l0aCBmcm9tICdsb2Rhc2gubWVyZ2V3aXRoJztcclxuXHJcbmFic3RyYWN0IGNsYXNzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xyXG4gICAgcHJvdGVjdGVkIF9kYXRhPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGtleS5cclxuICAgICAqIEEgcm93IGluIHRoZSBncmlkIGlzIGlkZW50aWZpZWQgZWl0aGVyIGJ5OlxyXG4gICAgICogLSBwcmltYXJ5S2V5IGRhdGEgdmFsdWUsXHJcbiAgICAgKiAtIHRoZSB3aG9sZSByb3dEYXRhLCBpZiB0aGUgcHJpbWFyeUtleSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dLZXkgPSByb3cua2V5O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQga2V5KCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcclxuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IGRhdGFbcHJpbWFyeUtleV0gOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpZiB0aGlzIHJlcHJlc2VudHMgYWRkIHJvdyBVSVxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCBpc0FkZFJvdyA9IHJvdy5hZGRSb3dVSTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFkZFJvd1VJKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pZCA9PT0gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGF0YSByZWNvcmQgdGhhdCBwb3B1bGF0ZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93RGF0YSA9IHJvdy5kYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAnZGF0YScgaW5zdGVhZFxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93RGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2tleScgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaW5FZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XHJcbiAgICAgICAgICAgIHJldHVybiAoZWRpdFJvd1N0YXRlICYmIGVkaXRSb3dTdGF0ZS5pZCA9PT0gdGhpcy5rZXkpIHx8IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc1Bpbm5lZCA9IHJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwaW5uZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGluIGRlbGV0ZSBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkZWxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5yb3dfZGVsZXRlZF90cmFuc2FjdGlvbih0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaGFzIGNoaWxkIHJvd3MuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbigpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5Sb3codGhpcy5rZXksIHRoaXMuaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5waW5zIHRoZSBzcGVjaWZpZWQgcm93LlxyXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYG9uUm93UGlubmluZ2AgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdW5waW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnVucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgc3BlY2lmaWVkIHJvdyBvYmplY3QgYW5kIHRoZSBkYXRhIHNvdXJjZSByZWNvcmQgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHVwZGF0ZSB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvdydzIHZhbHVlXHJcbiAgICAgKiBsZXQgbmV3VmFsdWUgPSBcIkFwcGxlXCI7XHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2UgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2U7XHJcbiAgICAgICAgaWYgKGNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmIGNydWRTZXJ2aWNlLmNlbGwuaWQucm93SUQgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hFZGl0Um93KHRoaXMua2V5LCB0aGlzLmluZGV4LCB0aGlzLmRhdGEsIHRoaXMuZ3JpZCk7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJvdyBmcm9tIHRoZSBncmlkJ3MgZGF0YSBzb3VyY2UuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dEZWxldGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBkZWxldGUgdGhlIHRoaXJkIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmRlbGV0ZSgpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmRlbGV0ZVJvd0J5SWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdpbmF0b3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCByb3csIGlmIGdyaWQgaXMgZ3JvdXBlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDogSWd4R3JvdXBCeVJvdztcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmluZGV4IC0gMTtcclxuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFwYXJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBuZXcgSWd4R3JvdXBCeVJvdyh0aGlzLmdyaWQsIGksIHJlYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRSb3cgZXh0ZW5kcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55LCBwcml2YXRlIF90cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3RSb3dJbmRleCBpcyBiYXNlZCBvbiBkYXRhIHJlc3VsdCBhZnRlciBhbGwgcGlwZXMgdHJpZ2dlcmVkLCBleGNsdWRpbmcgc3VtbWFyeSBwaXBlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHN1bW1hcnkgcm93IGZvciBlYWNoIHJvb3QgcmVjb3JkLCBzbyB3ZSBjYWxjdWxhdGUgaG93IG1hbnkgcm9vdCByZWNvcmRzIGFyZSByZW5kZXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcm93XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucm93RGF0YTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5pbkVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgodGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5LmNsb25lKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPyB0aGlzLl9kYXRhIDogdGhpcy5ncmlkLmlzVHJlZVJvdyhyZWMpID8gcmVjLmRhdGEgOiByZWM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneFRyZWVHcmlkUm93W10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hUcmVlR3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChyb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdldFJvd0J5S2V5KHRoaXMudHJlZVJvdy5wYXJlbnQ/LnJvd0lEKTtcclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGNoaWxkIHJvd3MgZXhpc3QuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmVlUm93LmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBgSVRyZWVHcmlkUmVjb3JkYCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSByb3cgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRyZWUgZ3JpZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCByb3dQYXJlbnQgPSB0aGlzLnRyZWVHcmlkLmdldFJvd0J5S2V5KDEpLnRyZWVSb3cucGFyZW50O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdHJlZVJvdygpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlUm93ID8/IHRoaXMuZ3JpZC5yZWNvcmRzLmdldCh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGVzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy50cmVlUm93KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gVE9ETyBjZWxsXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSkgPyB0aGlzLnRyZWVSb3cuaXNGaWx0ZXJlZE91dFBhcmVudCA9PT0gdW5kZWZpbmVkIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcm93IGlzbGFuZHMgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmNoaWxkTGF5b3V0S2V5cy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXSk7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kZWRSb3dzID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maWx0ZXIoKHJlYywgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaXJzdFJvd0luZCArIGV4cGFuZGVkUm93cy5sZW5ndGggKyB0aGlzLmluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBDZWxsVHlwZVtdID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsOiBDZWxsVHlwZSA9IG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHRoaXMuaW5kZXgsIGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGNlbGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcm91cEJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0dyb3VwQnlSb3c6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ3JvdXBSb3coKTogSUdyb3VwQnlSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cFJvdyA/IHRoaXMuX2dyb3VwUm93IDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgcm93cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBSb3dUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBJZ3hHcmlkUm93W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyb3VwUm93LnJlY29yZHMuZm9yRWFjaCgocmVjLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9ncm91cFJvdz86IElHcm91cEJ5UmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQnlSb3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkocm93ID0+IHJvdy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFtyb3cua2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogY29uc3QgZ3JvdXBSb3dFeHBhbmRlZCA9IGdyb3VwUm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFQSS5zZXRfZ3JvdXByb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZ3JvdXBSb3csIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPyB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5pbmRleCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGdyb3VwUm93LnRvZ2dsZSgpXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgZ3JpZEFQSSgpOiBJZ3hHcmlkQVBJU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJIGFzIElneEdyaWRBUElTZXJ2aWNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWx3YXlzIHRydWUsIGJlY2F1c2UgdGhpcyBpcyBpbiBpbnN0YW5jZSBvZiBhbiBJZ3hHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTdW1tYXJ5Um93OiBib29sZWFuO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cmVudCBncmlkIHR5cGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBncmlkVHlwZTogR3JpZEluc3RhbmNlVHlwZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdW1tYXJpZXMoKTogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1bW1hcmllcyA/IHRoaXMuX3N1bW1hcmllcyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XS5zdW1tYXJpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucyAmJiB0aGlzLmdyaWQucGFnZSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLlRyZWVHcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4VHJlZUdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSB0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kZXggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX3N1bW1hcmllcz86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIHR5cGU/OiBHcmlkSW5zdGFuY2VUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc1N1bW1hcnlSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um9vdFBhcmVudChyb3c6IElUcmVlR3JpZFJlY29yZCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -122,7 +122,9 @@ export class IgxGridSummaryService {
122
122
  this.summaryHeight = 0;
123
123
  this.grid.summaryPipeTrigger++;
124
124
  if (this.grid.rootSummariesEnabled) {
125
+ this.grid.summariesHeight = 0;
125
126
  this.retriggerRootPipe++;
127
+ Promise.resolve().then(() => this.grid.notifyChanges(true));
126
128
  }
127
129
  }
128
130
  updateSummaryCache(groupingArgs) {
@@ -227,4 +229,4 @@ export class IgxGridSummaryService {
227
229
  IgxGridSummaryService.decorators = [
228
230
  { type: Injectable }
229
231
  ];
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRSxjQUFjO0FBRWQsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUdXLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDckMsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBb0MsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUF3T3BILENBQUM7SUF0T1Usb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFLO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0Is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QVEsRUFBRSxDQUFDO1lBQ3BFLElBQUksUUFBUSxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE9BQU87YUFDVjtZQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELElBQVksVUFBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLHVCQUF1QixDQUFDO0lBQ3JGLENBQUM7OztZQWhQSixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgRmxhdEdyaWRUeXBlLCBUcmVlR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdW1tYXJ5U2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyByb290U3VtbWFyeUlEID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG4gICAgcHVibGljIHN1bW1hcnlIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBtYXhTdW1tYXJpZXNMZW5naHQgPSAwO1xuICAgIHB1YmxpYyBncm91cGluZ0V4cHJlc3Npb25zID0gW107XG4gICAgcHVibGljIHJldHJpZ2dlclJvb3RQaXBlID0gMDtcbiAgICBwdWJsaWMgZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgc3VtbWFyeUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVTdW1tYXJpZXMoKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdW1tYXJ5SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclN1bW1hcnlDYWNoZShhcmdzPykge1xuICAgICAgICBpZiAoIXRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5kYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IGFyZ3MuZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3VtbWFyaWVzKHJvd0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5yb3dJRCAhPT0gdW5kZWZpbmVkICYmIGFyZ3Mucm93SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lID0gYXJncy5jZWxsSUQgPyB0aGlzLmdyaWQuY29sdW1uTGlzdC5maW5kKGNvbCA9PiBjb2wuaW5kZXggPT09IGFyZ3MuY2VsbElELmNvbHVtbklEKS5maWVsZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNHcm91cGVkQ29sdW1uID0gKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zLm1hcChleHByID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIGlzR3JvdXBlZENvbHVtbiApIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lPykge1xuICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZSh0aGlzLnJvb3RTdW1tYXJ5SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA9PT0gMSAmJiB0aGlzLnN1bW1hcnlDYWNoZU1hcC5oYXModGhpcy5yb290U3VtbWFyeUlEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVHJlZUdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMucmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIGNvbnN0IHN1bW1hcnlJZHMgPSB0aGlzLmdldFN1bW1hcnlJRChyb3dJRCwgKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICAgICBzdW1tYXJ5SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTdW1tYXJpZXNDYWNoZVBlckNvbHVtbihjb2x1bW5OYW1lKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmZvckVhY2goKGNhY2hlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuZ2V0KGNvbHVtbk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJSb290UGlwZSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGNNYXhTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXhTdW1tYXJ5TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlsdGVyKChjb2wpID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uID0gY29sdW1uLnN1bW1hcmllcy5vcGVyYXRlKFtdLCBbXSwgY29sdW1uLmZpZWxkKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4U3VtbWFyeUxlbmd0aCA8IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFN1bW1hcnlMZW5ndGggPSBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1heFN1bW1hcmllc0xlbmdodCA9IG1heFN1bW1hcnlMZW5ndGg7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9ICBtYXhTdW1tYXJ5TGVuZ3RoICogdGhpcy5ncmlkLmRlZmF1bHRTdW1tYXJ5SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTdW1tYXJpZXMocm93SUQsIGRhdGEpIHtcbiAgICAgICAgbGV0IHJvd1N1bW1hcmllcyA9IHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93U3VtbWFyaWVzKSB7XG4gICAgICAgICAgICByb3dTdW1tYXJpZXMgPSBuZXcgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPigpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2V0KHJvd0lELCByb3dTdW1tYXJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5oYXNTdW1tYXJpemVkQ29sdW1ucyB8fCAhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5KS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmICghcm93U3VtbWFyaWVzLmdldChjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlc3VsdCA9IGNvbHVtbi5zdW1tYXJpZXMub3BlcmF0ZShkYXRhLm1hcChyID0+IHJlc29sdmVOZXN0ZWRQYXRoKHIsIGNvbHVtbi5maWVsZCkpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLCBjb2x1bW4uZmllbGQsIHRoaXMuZ3JpZC5sb2NhbGUsIGNvbHVtbi5waXBlQXJncyk7XG4gICAgICAgICAgICAgICAgcm93U3VtbWFyaWVzLnNldChjb2x1bW4uZmllbGQsIHN1bW1hcnlSZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdW1tYXJ5Q2FjaGUoZ3JvdXBpbmdBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAwIHx8ICF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cGluZ0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucywgZ3JvdXBpbmdBcmdzKTtcbiAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNTdW1tYXJpemVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc3VtbWFyaXplZENvbHVtbnMgPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcml6ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ0FwcGxpZWQgPSBjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5tYXAoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkuZ2V0KGNvbHVtbk5hbWUpICYmICFmaWx0ZXJpbmdBcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMucm9vdFN1bW1hcnlJRCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlJRChyb3dJRCwgZ3JvdXBpbmdFeHByZXNzaW9ucykge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW1tYXJ5SURzID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KHRoaXMuZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmQocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IHJvd0lEO1xuICAgICAgICBsZXQgaWQgPSAneyAnO1xuICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICBpZCArPSBgJyR7ZXhwci5maWVsZE5hbWV9JzogJyR7cm93RGF0YVtleHByLmZpZWxkTmFtZV19J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUlEcy5wdXNoKGlkLmNvbmNhdCgnIH0nKSk7XG4gICAgICAgICAgICAgICAgaWQgKz0gJywgJztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdW1tYXJ5SURzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsVHJlZUdyaWRTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgICAgIGxldCByb3cgPSAodGhpcy5ncmlkIGFzIFRyZWVHcmlkVHlwZSkucmVjb3Jkcy5nZXQocm93SUQpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJvdyA9IHJvdy5jaGlsZHJlbiA/IHJvdyA6IHJvdy5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChyb3cpIHtcbiAgICAgICAgICAgIHJvd0lEID0gcm93LnJvd0lEO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSBvbmx5IGRlbGV0ZWQgcm93c1xuICAgIC8vIHByaXZhdGUgcmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlR3JvdXBpbmdFeHByZXNzaW9ucyhjdXJyZW50LCBncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgY29uc3QgbmV3RXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENvbHMgPSBncm91cGluZ0FyZ3MudW5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoIDw9IG5ld0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhwciA9IG5ld0V4cHJlc3Npb25zLnNsaWNlKDAsIGN1cnJlbnQubGVuZ3RoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQudG9TdHJpbmcoKSAhPT0gbmV3RXhwcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJFeHByID0gY3VycmVudC5zbGljZSgwLCBuZXdFeHByZXNzaW9ucy5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VyckV4cHIgIT09IG5ld0V4cHJlc3Npb25zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlZENvbHMubWFwKGNvbCA9PiBjb2wuZmllbGQpLmZvckVhY2goY29sTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUsIGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGlkLmluZGV4T2YoY29sTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RyZWVHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LXRyZWUtZ3JpZCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNIaWVyYXJjaGljYWxHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICB9XG5cbn1cbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRSxjQUFjO0FBRWQsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUdXLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDckMsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBb0MsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUEwT3BILENBQUM7SUF4T1Usb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFLO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDNUI7WUFDRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pGLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2pELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0SCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDckMsT0FBTzthQUNWO1lBRUQsTUFBTSxlQUFlLEdBQUksSUFBSSxDQUFDLElBQXFCLENBQUMsbUJBQW1CO2dCQUN0RSxJQUFJLENBQUMsSUFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksVUFBVSxJQUFJLGVBQWUsRUFBRztnQkFDaEMsVUFBVSxHQUFHLFNBQVMsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBSyxFQUFFLFVBQVc7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2pGLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IseURBQXlEO2dCQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3REO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEM7U0FDSjthQUFNO1lBQ0osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLElBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RixVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRU0sNkJBQTZCLENBQUMsVUFBVTtRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVNLG9CQUFvQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkYsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEYsSUFBSSx1QkFBdUIsRUFBRTtnQkFDekIsSUFBSSxnQkFBZ0IsR0FBRyx1QkFBdUIsRUFBRTtvQkFDNUMsZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUM7aUJBQzlDO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUNqQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsWUFBWSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1lBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDckMsT0FBTyxZQUFZLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM1RixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNELFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQzthQUNqRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFZLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDL0Q7SUFDTCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsWUFBWTtRQUNsQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMvRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzNCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixPQUFPLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVO1FBQ3JDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0I7Z0JBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RILElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUNqRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkM7WUFDRCxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzVCO1NBQ0o7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBbUI7UUFDM0MsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7WUFDaEMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDN0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FDOUIsQ0FBQztTQUNMO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNkLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUN0RCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqQyxFQUFFLElBQUksSUFBSSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQUssRUFBRSxVQUFXO1FBQ2pELElBQUksR0FBRyxHQUFJLElBQUksQ0FBQyxJQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU87U0FDVjtRQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDdEMsT0FBTyxHQUFHLEVBQUU7WUFDUixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVELGlDQUFpQztJQUNqQyx3REFBd0Q7SUFDeEQsSUFBSTtJQUVJLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxZQUFZO1FBQ3BELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUM1QjtTQUNKO2FBQU07WUFDSCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEUsSUFBSSxRQUFRLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsT0FBTzthQUNWO1lBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO29CQUN4QyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNuQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBWSxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssdUJBQXVCLENBQUM7SUFDckYsQ0FBQzs7O1lBbFBKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgcmVzb2x2ZU5lc3RlZFBhdGggfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBGbGF0R3JpZFR5cGUsIFRyZWVHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIHJvb3RTdW1tYXJ5SUQgPSAnaWd4R3JpZFJvb3RTdW1tYXJ5JztcbiAgICBwdWJsaWMgc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgcHVibGljIG1heFN1bW1hcmllc0xlbmdodCA9IDA7XG4gICAgcHVibGljIGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICBwdWJsaWMgcmV0cmlnZ2VyUm9vdFBpcGUgPSAwO1xuICAgIHB1YmxpYyBkZWxldGVPcGVyYXRpb24gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBzdW1tYXJ5Q2FjaGVNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIGFueVtdPj4gPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4oKTtcblxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZVN1bW1hcmllcygpIHtcbiAgICAgICAgdGhpcy5yZXNldFN1bW1hcnlIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU3VtbWFyeUNhY2hlKGFyZ3M/KSB7XG4gICAgICAgIGlmICghdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLnJvb3RTdW1tYXJpZXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJSb290UGlwZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBhcmdzLmRhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogYXJncy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMocm93SUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLnJvd0lEICE9PSB1bmRlZmluZWQgJiYgYXJncy5yb3dJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSBhcmdzLmNlbGxJRCA/IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbmQoY29sID0+IGNvbC5pbmRleCA9PT0gYXJncy5jZWxsSUQuY29sdW1uSUQpLmZpZWxkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgdGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0dyb3VwZWRDb2x1bW4gPSAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucyAmJlxuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMubWFwKGV4cHIgPT4gZXhwci5maWVsZE5hbWUpLmluZGV4T2YoY29sdW1uTmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgaXNHcm91cGVkQ29sdW1uICkge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1bW1hcmllcyhhcmdzLnJvd0lELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlU3VtbWFyeUNhY2hlKHRoaXMucm9vdFN1bW1hcnlJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAxICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmhhcyh0aGlzLnJvb3RTdW1tYXJ5SUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNUcmVlR3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCAmJiB0aGlzLmRlbGV0ZU9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcy5yZW1vdmVDaGlsZFJvd1N1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFRyZWVHcmlkU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCAmJiB0aGlzLmRlbGV0ZU9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgY29uc3Qgc3VtbWFyeUlkcyA9IHRoaXMuZ2V0U3VtbWFyeUlEKHJvd0lELCAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgICAgIHN1bW1hcnlJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZShpZCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVN1bW1hcmllc0NhY2hlUGVyQ29sdW1uKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUpID0+IHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5nZXQoY29sdW1uTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvb3RTdW1tYXJpZXNFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY01heFN1bW1hcnlIZWlnaHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1heFN1bW1hcnlMZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoKGNvbCkgPT4gY29sLmhhc1N1bW1hcnkgJiYgIWNvbC5oaWRkZW4pLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4gPSBjb2x1bW4uc3VtbWFyaWVzLm9wZXJhdGUoW10sIFtdLCBjb2x1bW4uZmllbGQpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChnZXRDdXJyZW50U3VtbWFyeUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmIChtYXhTdW1tYXJ5TGVuZ3RoIDwgZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3VtbWFyeUxlbmd0aCA9IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWF4U3VtbWFyaWVzTGVuZ2h0ID0gbWF4U3VtbWFyeUxlbmd0aDtcbiAgICAgICAgdGhpcy5zdW1tYXJ5SGVpZ2h0ID0gIG1heFN1bW1hcnlMZW5ndGggKiB0aGlzLmdyaWQuZGVmYXVsdFN1bW1hcnlIZWlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZVN1bW1hcmllcyhyb3dJRCwgZGF0YSkge1xuICAgICAgICBsZXQgcm93U3VtbWFyaWVzID0gdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KHJvd0lEKTtcbiAgICAgICAgaWYgKCFyb3dTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgIHJvd1N1bW1hcmllcyA9IG5ldyBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+KCk7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5zZXQocm93SUQsIHJvd1N1bW1hcmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93U3VtbWFyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcihjb2wgPT4gY29sLmhhc1N1bW1hcnkpLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFyb3dTdW1tYXJpZXMuZ2V0KGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVzdWx0ID0gY29sdW1uLnN1bW1hcmllcy5vcGVyYXRlKGRhdGEubWFwKHIgPT4gcmVzb2x2ZU5lc3RlZFBhdGgociwgY29sdW1uLmZpZWxkKSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsIGNvbHVtbi5maWVsZCwgdGhpcy5ncmlkLmxvY2FsZSwgY29sdW1uLnBpcGVBcmdzKTtcbiAgICAgICAgICAgICAgICByb3dTdW1tYXJpZXMuc2V0KGNvbHVtbi5maWVsZCwgc3VtbWFyeVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93U3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFN1bW1hcnlIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5UGlwZVRyaWdnZXIrKztcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLnN1bW1hcmllc0hlaWdodCA9IDA7XG4gICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdW1tYXJ5Q2FjaGUoZ3JvdXBpbmdBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAwIHx8ICF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cGluZ0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucywgZ3JvdXBpbmdBcmdzKTtcbiAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNTdW1tYXJpemVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc3VtbWFyaXplZENvbHVtbnMgPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcml6ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ0FwcGxpZWQgPSBjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5tYXAoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkuZ2V0KGNvbHVtbk5hbWUpICYmICFmaWx0ZXJpbmdBcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMucm9vdFN1bW1hcnlJRCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlJRChyb3dJRCwgZ3JvdXBpbmdFeHByZXNzaW9ucykge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW1tYXJ5SURzID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KHRoaXMuZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmQocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IHJvd0lEO1xuICAgICAgICBsZXQgaWQgPSAneyAnO1xuICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICBpZCArPSBgJyR7ZXhwci5maWVsZE5hbWV9JzogJyR7cm93RGF0YVtleHByLmZpZWxkTmFtZV19J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUlEcy5wdXNoKGlkLmNvbmNhdCgnIH0nKSk7XG4gICAgICAgICAgICAgICAgaWQgKz0gJywgJztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdW1tYXJ5SURzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsVHJlZUdyaWRTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgICAgIGxldCByb3cgPSAodGhpcy5ncmlkIGFzIFRyZWVHcmlkVHlwZSkucmVjb3Jkcy5nZXQocm93SUQpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJvdyA9IHJvdy5jaGlsZHJlbiA/IHJvdyA6IHJvdy5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChyb3cpIHtcbiAgICAgICAgICAgIHJvd0lEID0gcm93LnJvd0lEO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSBvbmx5IGRlbGV0ZWQgcm93c1xuICAgIC8vIHByaXZhdGUgcmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlR3JvdXBpbmdFeHByZXNzaW9ucyhjdXJyZW50LCBncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgY29uc3QgbmV3RXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENvbHMgPSBncm91cGluZ0FyZ3MudW5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoIDw9IG5ld0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhwciA9IG5ld0V4cHJlc3Npb25zLnNsaWNlKDAsIGN1cnJlbnQubGVuZ3RoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQudG9TdHJpbmcoKSAhPT0gbmV3RXhwcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJFeHByID0gY3VycmVudC5zbGljZSgwLCBuZXdFeHByZXNzaW9ucy5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VyckV4cHIgIT09IG5ld0V4cHJlc3Npb25zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlZENvbHMubWFwKGNvbCA9PiBjb2wuZmllbGQpLmZvckVhY2goY29sTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUsIGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGlkLmluZGV4T2YoY29sTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RyZWVHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LXRyZWUtZ3JpZCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNIaWVyYXJjaGljYWxHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICB9XG5cbn1cbiJdfQ==
@@ -76,16 +76,20 @@ export class IgxTreeGridGroupingPipe {
76
76
  const value = isDateTime
77
77
  ? this.grid.datePipe.transform(record[key])
78
78
  : record[key];
79
+ let valueCase = value;
79
80
  let groupByRecord;
80
- if (map.has(value)) {
81
- groupByRecord = map.get(value);
81
+ if (groupingExpression.ignoreCase) {
82
+ valueCase = value === null || value === void 0 ? void 0 : value.toString().toLowerCase();
83
+ }
84
+ if (map.has(valueCase)) {
85
+ groupByRecord = map.get(valueCase);
82
86
  }
83
87
  else {
84
88
  groupByRecord = new GroupByRecord();
85
89
  groupByRecord.key = key;
86
90
  groupByRecord.value = value;
87
91
  groupByRecord.records = [];
88
- map.set(value, groupByRecord);
92
+ map.set(valueCase, groupByRecord);
89
93
  }
90
94
  groupByRecord.records.push(record);
91
95
  }
@@ -97,4 +101,4 @@ IgxTreeGridGroupingPipe.decorators = [
97
101
  name: 'treeGridGrouping'
98
102
  },] }
99
103
  ];
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmdyb3VwaW5nLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5ncm91cGluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdwRSxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBRTlDOzs7R0FHRztBQUNILE1BQU0sYUFBYTtDQUtsQjtBQUVELE1BQU0sT0FBTyxvQkFBb0I7Q0FHaEM7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsVUFBVTtJQUc5QyxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFUyxhQUFhLENBQUMsR0FBUSxFQUFFLEdBQVcsRUFBRSxTQUFrQixLQUFLLEVBQUUsU0FBa0IsS0FBSztRQUMzRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2RSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDOztBQVZjLG1DQUFTLEdBQThCLElB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WUFFRCxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7WUFuR0osSUFBSSxTQUFDO2dCQUNGLElBQUksRUFBRSxrQkFBa0I7YUFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4U29ydGluZyB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQuY29tcG9uZW50JztcblxuY29uc3QgSElEREVOX0ZJRUxEX05BTUUgPSAnX0lneF9IaWRkZW5fRGF0YV8nO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBHcm91cEJ5UmVjb3JkIHtcbiAgICBwdWJsaWMga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG4gICAgcHVibGljIGdyb3VwczogR3JvdXBCeVJlY29yZFtdO1xuICAgIHB1YmxpYyByZWNvcmRzOiBhbnlbXTtcbn1cblxuZXhwb3J0IGNsYXNzIElUcmVlR3JpZEFnZ3JlZ2F0aW9uIHtcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgYWdncmVnYXRlOiAocGFyZW50OiBhbnksIGNoaWxkcmVuOiBhbnlbXSkgPT4gYW55O1xufVxuXG5leHBvcnQgY2xhc3MgSWd4R3JvdXBlZFRyZWVHcmlkU29ydGluZyBleHRlbmRzIElneFNvcnRpbmcge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogSWd4R3JvdXBlZFRyZWVHcmlkU29ydGluZyA9IG51bGw7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IElneEdyb3VwZWRUcmVlR3JpZFNvcnRpbmcoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEZpZWxkVmFsdWUob2JqOiBhbnksIGtleTogc3RyaW5nLCBpc0RhdGU6IGJvb2xlYW4gPSBmYWxzZSwgaXNUaW1lOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuICAgICAgICByZXR1cm4gb2JqLmRhdGFbSElEREVOX0ZJRUxEX05BTUVdID9cbiAgICAgICAgICAgIHN1cGVyLmdldEZpZWxkVmFsdWUob2JqLmRhdGFbSElEREVOX0ZJRUxEX05BTUVdLCBrZXksIGlzRGF0ZSwgaXNUaW1lKSA6XG4gICAgICAgICAgICBzdXBlci5nZXRGaWVsZFZhbHVlKG9iai5kYXRhLCBrZXksIGlzRGF0ZSwgaXNUaW1lKTtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RyZWVHcmlkR3JvdXBpbmcnXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkR3JvdXBpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSBncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudDtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sXG4gICAgICAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW10sXG4gICAgICAgICAgICAgICAgICAgICBncm91cEtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICBncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9ucz86IElUcmVlR3JpZEFnZ3JlZ2F0aW9uW11cbiAgICAgICAgICAgICAgICAgICAgKTogYW55W10ge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyb3VwS2V5Py50b0xvd2VyQ2FzZSgpID09PSBjaGlsZERhdGFLZXk/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JvdXAga2V5IGFuZCBjaGlsZCBkYXRhIGtleSBjYW5ub3QgYmUgdGhlIHNhbWUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBncm91cGVkUmVjb3JkcyA9IHRoaXMuZ3JvdXBCeU11bHRpcGxlKGNvbGxlY3Rpb24sIGdyb3VwaW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5Hcm91cGluZyhncm91cGVkUmVjb3JkcywgZ3JvdXBLZXksXG4gICAgICAgICAgICBjaGlsZERhdGFLZXksIHJlc3VsdCwgYWdncmVnYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbkdyb3VwaW5nKGdyb3VwUmVjb3JkczogR3JvdXBCeVJlY29yZFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwS2V5OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREYXRhS2V5OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYW55W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25zOiBJVHJlZUdyaWRBZ2dyZWdhdGlvbltdID0gW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cFJlY29yZCBvZiBncm91cFJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBncm91cFJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICBwYXJlbnRbY2hpbGREYXRhS2V5XSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9ucykge1xuICAgICAgICAgICAgICAgIHBhcmVudFthZ2dyZWdhdGlvbi5maWVsZF0gPSBhZ2dyZWdhdGlvbi5hZ2dyZWdhdGUocGFyZW50LCBjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmVudFtncm91cEtleV0gPSBncm91cFJlY29yZC52YWx1ZSArIGAgKCR7Z3JvdXBSZWNvcmQucmVjb3Jkcy5sZW5ndGh9KWA7XG4gICAgICAgICAgICBwYXJlbnRbSElEREVOX0ZJRUxEX05BTUVdID0geyBbZ3JvdXBSZWNvcmQua2V5XTogZ3JvdXBSZWNvcmQudmFsdWUgfTtcbiAgICAgICAgICAgIGRhdGEucHVzaChwYXJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBSZWNvcmQuZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBpbmcoZ3JvdXBSZWNvcmQuZ3JvdXBzLCBncm91cEtleSwgY2hpbGREYXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRbY2hpbGREYXRhS2V5XSwgYWdncmVnYXRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50W2NoaWxkRGF0YUtleV0gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBCeU11bHRpcGxlKGFycmF5OiBhbnlbXSwgZ3JvdXBpbmdFeHByZXNzaW9uczogSUdyb3VwaW5nRXhwcmVzc2lvbltdLCBpbmRleCA9IDApOiBHcm91cEJ5UmVjb3JkW10ge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdyb3VwQnkoYXJyYXksIGdyb3VwaW5nRXhwcmVzc2lvbnNbaW5kZXhdKTtcblxuICAgICAgICBpZiAoaW5kZXggKyAxIDwgZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgZm9yIChjb25zdCBncm91cEJ5UmVjb3JkIG9mIHJlcykge1xuICAgICAgICAgICAgICAgIGdyb3VwQnlSZWNvcmQuZ3JvdXBzID0gdGhpcy5ncm91cEJ5TXVsdGlwbGUoZ3JvdXBCeVJlY29yZC5yZWNvcmRzLCBncm91cGluZ0V4cHJlc3Npb25zLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwQnkoYXJyYXk6IGFueVtdLCBncm91cGluZ0V4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24pOiBHcm91cEJ5UmVjb3JkW10ge1xuICAgICAgICBjb25zdCBrZXkgPSBncm91cGluZ0V4cHJlc3Npb24uZmllbGROYW1lO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQ/LmdldENvbHVtbkJ5TmFtZShrZXkpO1xuICAgICAgICBjb25zdCBpc0RhdGVUaW1lID0gY29sdW1uPy5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHxcbiAgICAgICAgICAgIGNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSB8fFxuICAgICAgICAgICAgY29sdW1uPy5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWU7XG4gICAgICAgIGNvbnN0IG1hcDogTWFwPGFueSwgR3JvdXBCeVJlY29yZD4gPSBuZXcgTWFwPGFueSwgR3JvdXBCeVJlY29yZD4oKTtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNEYXRlVGltZVxuICAgICAgICAgICAgICAgID8gdGhpcy5ncmlkLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmRba2V5XSlcbiAgICAgICAgICAgICAgICA6IHJlY29yZFtrZXldO1xuXG4gICAgICAgICAgICBsZXQgZ3JvdXBCeVJlY29yZDogR3JvdXBCeVJlY29yZDtcblxuICAgICAgICAgICAgaWYgKG1hcC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZCA9IG1hcC5nZXQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cEJ5UmVjb3JkID0gbmV3IEdyb3VwQnlSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICBncm91cEJ5UmVjb3JkLmtleSA9IGtleTtcbiAgICAgICAgICAgICAgICBncm91cEJ5UmVjb3JkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZC5yZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgbWFwLnNldCh2YWx1ZSwgZ3JvdXBCeVJlY29yZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwQnlSZWNvcmQucmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xuICAgIH1cbn1cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmdyb3VwaW5nLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5ncm91cGluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdwRSxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBRTlDOzs7R0FHRztBQUNILE1BQU0sYUFBYTtDQUtsQjtBQUVELE1BQU0sT0FBTyxvQkFBb0I7Q0FHaEM7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsVUFBVTtJQUc5QyxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFUyxhQUFhLENBQUMsR0FBUSxFQUFFLEdBQVcsRUFBRSxTQUFrQixLQUFLLEVBQUUsU0FBa0IsS0FBSztRQUMzRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2RSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDOztBQVZjLG1DQUFTLEdBQThCLElB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R0FBRyxDQUFDO2dCQUN4QixhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsYUFBYSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7O1lBdkdKLElBQUksU0FBQztnQkFDRixJQUFJLEVBQUUsa0JBQWtCO2FBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFNvcnRpbmcgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hUcmVlR3JpZENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ncmlkLmNvbXBvbmVudCc7XG5cbmNvbnN0IEhJRERFTl9GSUVMRF9OQU1FID0gJ19JZ3hfSGlkZGVuX0RhdGFfJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgR3JvdXBCeVJlY29yZCB7XG4gICAgcHVibGljIGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuICAgIHB1YmxpYyBncm91cHM6IEdyb3VwQnlSZWNvcmRbXTtcbiAgICBwdWJsaWMgcmVjb3JkczogYW55W107XG59XG5cbmV4cG9ydCBjbGFzcyBJVHJlZUdyaWRBZ2dyZWdhdGlvbiB7XG4gICAgcHVibGljIGZpZWxkOiBzdHJpbmc7XG4gICAgcHVibGljIGFnZ3JlZ2F0ZTogKHBhcmVudDogYW55LCBjaGlsZHJlbjogYW55W10pID0+IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIElneEdyb3VwZWRUcmVlR3JpZFNvcnRpbmcgZXh0ZW5kcyBJZ3hTb3J0aW5nIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IElneEdyb3VwZWRUcmVlR3JpZFNvcnRpbmcgPSBudWxsO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBJZ3hHcm91cGVkVHJlZUdyaWRTb3J0aW5nKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaWVsZFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZywgaXNEYXRlOiBib29sZWFuID0gZmFsc2UsIGlzVGltZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG9iai5kYXRhW0hJRERFTl9GSUVMRF9OQU1FXSA/XG4gICAgICAgICAgICBzdXBlci5nZXRGaWVsZFZhbHVlKG9iai5kYXRhW0hJRERFTl9GSUVMRF9OQU1FXSwga2V5LCBpc0RhdGUsIGlzVGltZSkgOlxuICAgICAgICAgICAgc3VwZXIuZ2V0RmllbGRWYWx1ZShvYmouZGF0YSwga2V5LCBpc0RhdGUsIGlzVGltZSk7XG4gICAgfVxufVxuXG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd0cmVlR3JpZEdyb3VwaW5nJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZEdyb3VwaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLFxuICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uczogSUdyb3VwaW5nRXhwcmVzc2lvbltdLFxuICAgICAgICAgICAgICAgICAgICAgZ3JvdXBLZXk6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGF0YUtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbnM/OiBJVHJlZUdyaWRBZ2dyZWdhdGlvbltdXG4gICAgICAgICAgICAgICAgICAgICk6IGFueVtdIHtcbiAgICAgICAgaWYgKGdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncm91cEtleT8udG9Mb3dlckNhc2UoKSA9PT0gY2hpbGREYXRhS2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyb3VwIGtleSBhbmQgY2hpbGQgZGF0YSBrZXkgY2Fubm90IGJlIHRoZSBzYW1lLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlY29yZHMgPSB0aGlzLmdyb3VwQnlNdWx0aXBsZShjb2xsZWN0aW9uLCBncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBpbmcoZ3JvdXBlZFJlY29yZHMsIGdyb3VwS2V5LFxuICAgICAgICAgICAgY2hpbGREYXRhS2V5LCByZXN1bHQsIGFnZ3JlZ2F0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsYXR0ZW5Hcm91cGluZyhncm91cFJlY29yZHM6IEdyb3VwQnlSZWNvcmRbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGF0YUtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGFueVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uczogSVRyZWVHcmlkQWdncmVnYXRpb25bXSA9IFtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXBSZWNvcmQgb2YgZ3JvdXBSZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JvdXBSZWNvcmQucmVjb3JkcztcblxuICAgICAgICAgICAgcGFyZW50W2NoaWxkRGF0YUtleV0gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhZ2dyZWdhdGlvbiBvZiBhZ2dyZWdhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRbYWdncmVnYXRpb24uZmllbGRdID0gYWdncmVnYXRpb24uYWdncmVnYXRlKHBhcmVudCwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJlbnRbZ3JvdXBLZXldID0gZ3JvdXBSZWNvcmQudmFsdWUgKyBgICgke2dyb3VwUmVjb3JkLnJlY29yZHMubGVuZ3RofSlgO1xuICAgICAgICAgICAgcGFyZW50W0hJRERFTl9GSUVMRF9OQU1FXSA9IHsgW2dyb3VwUmVjb3JkLmtleV06IGdyb3VwUmVjb3JkLnZhbHVlIH07XG4gICAgICAgICAgICBkYXRhLnB1c2gocGFyZW50KTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwUmVjb3JkLmdyb3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbkdyb3VwaW5nKGdyb3VwUmVjb3JkLmdyb3VwcywgZ3JvdXBLZXksIGNoaWxkRGF0YUtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50W2NoaWxkRGF0YUtleV0sIGFnZ3JlZ2F0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmVudFtjaGlsZERhdGFLZXldID0gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwQnlNdWx0aXBsZShhcnJheTogYW55W10sIGdyb3VwaW5nRXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXSwgaW5kZXggPSAwKTogR3JvdXBCeVJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5ncm91cEJ5KGFycmF5LCBncm91cGluZ0V4cHJlc3Npb25zW2luZGV4XSk7XG5cbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IGdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXBCeVJlY29yZCBvZiByZXMpIHtcbiAgICAgICAgICAgICAgICBncm91cEJ5UmVjb3JkLmdyb3VwcyA9IHRoaXMuZ3JvdXBCeU11bHRpcGxlKGdyb3VwQnlSZWNvcmQucmVjb3JkcywgZ3JvdXBpbmdFeHByZXNzaW9ucywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cEJ5KGFycmF5OiBhbnlbXSwgZ3JvdXBpbmdFeHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uKTogR3JvdXBCeVJlY29yZFtdIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZ3JvdXBpbmdFeHByZXNzaW9uLmZpZWxkTmFtZTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkPy5nZXRDb2x1bW5CeU5hbWUoa2V5KTtcbiAgICAgICAgY29uc3QgaXNEYXRlVGltZSA9IGNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlIHx8XG4gICAgICAgICAgICBjb2x1bW4/LmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUgfHxcbiAgICAgICAgICAgIGNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lO1xuICAgICAgICBjb25zdCBtYXA6IE1hcDxhbnksIEdyb3VwQnlSZWNvcmQ+ID0gbmV3IE1hcDxhbnksIEdyb3VwQnlSZWNvcmQ+KCk7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGFycmF5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRGF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZC5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW2tleV0pXG4gICAgICAgICAgICAgICAgOiByZWNvcmRba2V5XTtcblxuICAgICAgICAgICAgbGV0IHZhbHVlQ2FzZSA9IHZhbHVlO1xuICAgICAgICAgICAgbGV0IGdyb3VwQnlSZWNvcmQ6IEdyb3VwQnlSZWNvcmQ7XG5cbiAgICAgICAgICAgIGlmIChncm91cGluZ0V4cHJlc3Npb24uaWdub3JlQ2FzZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2FzZSA9IHZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWFwLmhhcyh2YWx1ZUNhc2UpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZCA9IG1hcC5nZXQodmFsdWVDYXNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZCA9IG5ldyBHcm91cEJ5UmVjb3JkKCk7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZC5rZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgZ3JvdXBCeVJlY29yZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGdyb3VwQnlSZWNvcmQucmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgIG1hcC5zZXQodmFsdWVDYXNlLCBncm91cEJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBCeVJlY29yZC5yZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG1hcC52YWx1ZXMoKSk7XG4gICAgfVxufVxuIl19