@sumaris-net/ngx-components 2.12.2 → 2.12.4-beta1

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.
@@ -474,6 +474,8 @@ export class MatDateTime {
474
474
  dateStr =
475
475
  dateStr &&
476
476
  dateStr
477
+ // Keep digits and slashes
478
+ .replace(/[^\d/]/g, '')
477
479
  .replace('//', '/0/')
478
480
  // Force '0' for empty year (otherwise moment will use the current year)
479
481
  .replace(/\/$/, '/0');
@@ -502,9 +504,10 @@ export class MatDateTime {
502
504
  if (this._formControl.value !== dateStr) {
503
505
  // DEBUG
504
506
  //console.debug('[mat-date-time] Emit new value: ' + dateStr);
505
- // Apply to form control. => Will call writeValue()
506
- // NOT NEED, because a formControl should NOT be used by multiple fields
507
- //this.formControl.setValue(dateStr, {emitEvent: false});
507
+ if (value?.isValid()) {
508
+ // Update formControl value (will update datePicker also)
509
+ this.formControl.setValue(dateStr, { emitEvent: false });
510
+ }
508
511
  // Changes comes from inside function: use the callback
509
512
  this._onChangeCallback(dateStr);
510
513
  // Check if need to update controls
@@ -643,4 +646,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
643
646
  type: ContentChild,
644
647
  args: [MatError]
645
648
  }] } });
646
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGV0aW1lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFHUixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsUUFBUSxHQUlULE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakosT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxF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QkFBcUIsYUFHcEIsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFDbEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUg1QyxRQUFROzswQkFDUixNQUFNOzJCQUFDLDhCQUE4Qjt5Q0ExRi9CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBU0YsZUFBZTtzQkFEbEIsS0FBSztnQkFRTyxXQUFXO3NCQUF2QixLQUFLO2dCQU9PLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT08sUUFBUTtzQkFBcEIsS0FBSztnQkFZTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBbUJtQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNHLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVTtnQkFDQSxRQUFRO3NCQUEvQixZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFByb3ZpZGVyLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyxcbiAgTWF0RXJyb3IsXG4gIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsXG4gIE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLFxuICBTdWJzY3JpcHRTaXppbmcsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5wdXRFbGVtZW50LCBzZXRUYWJJbmRleCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBpc0ZvY3VzYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgaXNCbGFua1N0cmluZywgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsQm9vbGVhbiwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL2RhdGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IE1vbWVudERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHsgQXBwRmxvYXRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IE1hc2tpdG9PcHRpb25zIH0gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQgeyBNYXNraXRvRGF0ZU1vZGUsIG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvciwgTWFza2l0b1RpbWVNb2RlLCBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIgfSBmcm9tICdAbWFza2l0by9raXQnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkcgfSBmcm9tICcuLi9tYXRlcmlhbC5jb25maWcnO1xuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gJ0ByeC1hbmd1bGFyL2Nkay96b25lLWxlc3MvYnJvd3Nlcic7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZVRpbWUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IFRJTUVfUkVHRVhQID0gL15bMDEyXVswLTldWzpdWzAxMjM0NV1bMC05XSQvO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmRlY2xhcmUgaW50ZXJmYWNlIE5neFRpbWVQaWNrZXIge1xuICBzZWxlY3RlZEhvdXI6IHsgdGltZTogbnVtYmVyIH07XG4gIHNlbGVjdGVkTWludXRlOiB7IHRpbWU6IG51bWJlciB9O1xuICBvcGVuKCk7XG4gIGNsb3NlKCk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kYXRlLXRpbWUtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuZGF0ZXRpbWUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmRhdGV0aW1lLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlVGltZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9jb250cm9sU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3dyaXRpbmcgPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHJpdmF0ZSBfY29udHJvbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBwcm90ZWN0ZWQgZGF0ZUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHJvdGVjdGVkIHRpbWVDb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIHByb3RlY3RlZCBkaXNwbGF5UGF0dGVybjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGF0ZVBhdHRlcm46IHN0cmluZztcbiAgcHJvdGVjdGVkIHRpbWVQYXR0ZXJuOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1hc2tpdG9EYXRlT3B0aW9uczogTWFza2l0b09wdGlvbnM7XG4gIHByb3RlY3RlZCBtYXNraXRvVGltZU9wdGlvbnM6IE1hc2tpdG9PcHRpb25zO1xuICBwcm90ZWN0ZWQgZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB0aW1lUGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSBjb21wYWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KClcbiAgc2V0IGFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2UgfHwgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLl9kZWZhdWx0U3Vic2NyaXB0U2l6aW5nO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1Db250cm9sKHZhbHVlOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICB0aGlzLl9zZXRGb3JtQ29udHJvbCh2YWx1ZSk7XG4gIH1cbiAgZ2V0IGZvcm1Db250cm9sKCk6IFVudHlwZWRGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250cm9sO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1Db250cm9sTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2V0Rm9ybUNvbnRyb2xOYW1lKHZhbHVlKTtcbiAgfVxuICBnZXQgZm9ybUNvbnRyb2xOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xOYW1lO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgYW55KSB7XG4gICAgaWYgKHRoaXMuX3JlcXVpcmVkID09PSB2YWx1ZSkgcmV0dXJuOyAvLyBTS2lwXG5cbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnModGhpcy5fZm9ybUNvbnRyb2wsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRpbmcpIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RpbWVQaWNrZXInKSB0aW1lUGlja2VyOiBOZ3hUaW1lUGlja2VyO1xuICBAVmlld0NoaWxkcmVuKCdtYXRJbnB1dCcpIG1hdElucHV0czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAQ29udGVudENoaWxkKE1hdEVycm9yKSBtYXRFcnJvcjogTWF0RXJyb3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSAodHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZykuc3Vic3RyaW5nKDAsIDIpO1xuICAgIHRoaXMuX2RlZmF1bHRTdWJzY3JpcHRTaXppbmcgPSBkZWZhdWx0T3B0aW9ucz8uc3Vic2NyaXB0U2l6aW5nIHx8IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfU1VCU0NSSVBUX1NJWklORztcbiAgICB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9IGRlZmF1bHRPcHRpb25zPy5hcHBlYXJhbmNlIHx8IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfQVBQRUFSQU5DRTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9mb3JtQ29udHJvbCB8fCAodGhpcy5fY29udHJvbE5hbWUgJiYgKHRoaXMuZm9ybUdyb3VwRGlyPy5mb3JtLmdldCh0aGlzLl9jb250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCFjb250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWRhdGUtdGltZS1maWVsZD4uXCIpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGlzTm90TmlsQm9vbGVhbih0aGlzLl9yZXF1aXJlZCkgPyB0aGlzLl9yZXF1aXJlZCA6IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5fcmVxdWlyZWQpO1xuXG4gICAgdGhpcy5fc2V0Rm9ybUNvbnRyb2woY29udHJvbCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRhdGUgY29udHJvbFxuICAgIHRoaXMuZGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHRpbWUgY29udHJvbFxuICAgIHRoaXMudGltZUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgdGhpcy5tb2JpbGUgPyBudWxsIDogVmFsaWRhdG9ycy5wYXR0ZXJuKFRJTUVfUkVHRVhQKSk7XG5cbiAgICAvLyBHZXQgcGF0dGVybnMgdG8gZGlzcGxheSBkYXRlIGFuZCBkYXRlK3RpbWVcbiAgICBjb25zdCBpMThuS2V5cyA9IFsnQ09NTU9OLkRBVEVfUEFUVEVSTicsICdDT01NT04uVElNRV9QQVRURVJOJywgJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTicsICdDT01NT04uREFURV9QTEFDRUhPTERFUicsICdDT01NT04uVElNRV9QTEFDRUhPTERFUiddO1xuICAgIHRoaXMudXBkYXRlVHJhbnNsYXRpb25zKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoaTE4bktleXMpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgLmdldChpMThuS2V5cylcbiAgICAgICAgLnBpcGUoc2tpcCgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgodHJhbnNsYXRlKSA9PiB0aGlzLnVwZGF0ZVRyYW5zbGF0aW9ucyh0cmFuc2xhdGUpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKG1lcmdlKHRoaXMuZGF0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLCB0aGlzLnRpbWVDb250cm9sLnZhbHVlQ2hhbmdlcykuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSgpKSk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIC8vIEVuYWJsZSBhbmltYXRpb25zIG5vdy4gVGhpcyBlbnN1cmVzIHdlIGRvbid0IGFuaW1hdGUgb24gaW5pdGlhbCByZW5kZXIuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIHdyaXRlVmFsdWUoKSB3aXRoOlwiLCB2YWx1ZSk7XG5cbiAgICAvLyBDb252ZXJ0IGludG8gZGF0ZVxuICAgIGNvbnN0IG1vbWVudCA9IGlzTW9tZW50KHZhbHVlKSA/IHZhbHVlIDogZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuXG4gICAgaWYgKCFtb21lbnQgfHwgIW1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLnRpbWVDb250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50XG4gICAgICAgIC8vIEltcG9ydGFudDogY2xvbmUsIGJlY2F1c2Ugc3RhcnRPZigpIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBkYXRlXG4gICAgICAgIC5jbG9uZSgpXG4gICAgICAgIC8vIFJlc2V0IHRpbWVcbiAgICAgICAgLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuZGF0ZVBhdHRlcm4pO1xuXG4gICAgICAvLyBGb3JtYXQgdGltZVxuICAgICAgbGV0IHRpbWVTdHI7XG4gICAgICBpZiAoRGF0ZVV0aWxzLmlzTm9UaW1lKG1vbWVudCkpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGltZVxuICAgICAgICB0aW1lU3RyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC0gRm9ybWF0IGhoXG4gICAgICAgIGxldCBob3VyOiBudW1iZXIgfCBzdHJpbmcgPSBtb21lbnQuaG91cigpO1xuICAgICAgICBob3VyID0gaG91ciA8IDEwID8gJzAnICsgaG91ciA6IGhvdXI7XG4gICAgICAgIC8vIC0gRm9ybWF0IG1tXG4gICAgICAgIGxldCBtaW51dGVzOiBudW1iZXIgfCBzdHJpbmcgPSBtb21lbnQubWludXRlcygpO1xuICAgICAgICBtaW51dGVzID0gbWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXM7XG4gICAgICAgIHRpbWVTdHIgPSBgJHtob3VyfToke21pbnV0ZXN9YDtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmRhdGVDb250cm9sLnBhdGNoVmFsdWUoZGF0ZVN0ciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5wYXRjaFZhbHVlKHRpbWVTdHIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcblxuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmRhdGVDb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc2FibGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvcGVuRGF0ZVBpY2tlcihldmVudD86IEV2ZW50LCBkYXRlUGlja2VyPzogTWF0RGF0ZXBpY2tlcjxhbnk+KSB7XG4gICAgZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXIgfHwgdGhpcy5kYXRlUGlja2VyO1xuICAgIGlmIChkYXRlUGlja2VyKSB7XG4gICAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgICBpZiAoIWRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAgIGRhdGVQaWNrZXIub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5UaW1lUGlja2VyKGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMudGltZVBpY2tlcikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy50aW1lUGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5tYXRJbnB1dHMuZmlyc3Q7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KGlucHV0Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50PzogRXZlbnQpIHtcbiAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICB9XG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgX3NldEZvcm1Db250cm9sTmFtZShjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250cm9sTmFtZSB8fCB0aGlzLl9jb250cm9sTmFtZSA9PT0gY29udHJvbE5hbWUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgdGhpcy5fY29udHJvbE5hbWUgPSBjb250cm9sTmFtZTtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cERpcj8uZm9ybT8uZ2V0KGNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2wpIHRoaXMuX3NldEZvcm1Db250cm9sKGNvbnRyb2wpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXRGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sICE9PSBjb250cm9sKSB7XG4gICAgICB0aGlzLl9mb3JtQ29udHJvbCA9IGNvbnRyb2w7XG5cbiAgICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgICB0aGlzLl9jb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fY29udHJvbFN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLl9yZWFkb25seSAmJiAhdGhpcy5fd3JpdGluZyAmJiAhdGhpcy5fZGlzYWJsaW5nKSAvLyBTa2lwXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy50aW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGVDb250cm9sLnRvdWNoZWQpIHRoaXMuZGF0ZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVDb250cm9sLnRvdWNoZWQpIHRoaXMudGltZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdmFsaWRhdG9yc1xuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzKGNvbnRyb2wsIHRoaXMuX3JlcXVpcmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfdXBkYXRlQ29udHJvbFZhbGlkYXRvcnMoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCByZXF1aXJlZDogYm9vbGVhbikge1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvclxuICAgIGlmICghY29udHJvbC5oYXNWYWxpZGF0b3IoU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUpKSB7XG4gICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnMoU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUpO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXF1aXJlZCB2YWxpZGF0b3IgKGlmIG5lZWQpXG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICBpZiAoIWNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICAgIGNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICBjb250cm9sLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoYFske3RoaXMuY29uc3RydWN0b3IubmFtZX0uX29uRGF0ZVBpY2tlckNoYW5nZV1gKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBldmVudCBpcyB2YWxpZFxuICAgIGlmICghZXZlbnQgfHwgKGV2ZW50LnZhbHVlICE9PSBudWxsICYmICFpc01vbWVudChldmVudC52YWx1ZSkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgTWF0RGF0ZXBpY2tlciBldmVudC4gU2tpcHBpbmcnLCBldmVudCk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBsZXQgbW9tZW50ID0gZXZlbnQudmFsdWU7XG5cbiAgICAvLyBObyB2YWx1ZSwgYnV0IG1vYmlsZSBtb2RlOiB1c2UgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmICghbW9tZW50ICYmIHRoaXMubW9iaWxlKSB7XG4gICAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICAgIG1vbWVudCA9IERhdGVVdGlscy5yZXNldFRpbWUoRGF0ZVV0aWxzLm1vbWVudCgpLmxvY2FsZSh0aGlzLmxvY2FsZSkpO1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobW9tZW50LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gdXNhYmxlIGRhdGUsIHRoZW4gY29udmVydCB0byBkYXRlIHBhdHRlcm4gKGUuZyBERC9NTS9ZWVlZKVxuICAgIGNvbnN0IGRhdGUgPSBtb21lbnRcbiAgICAgID8ubG9jYWxlKHRoaXMubG9jYWxlKSAvLyBzZXQgbG9jYWxlXG4gICAgICAuaG91cigwKVxuICAgICAgLm1pbnV0ZSgwKVxuICAgICAgLnNlY29uZHMoMClcbiAgICAgIC5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBob3VyXG4gICAgICAudXRjKHRydWUpO1xuICAgIGNvbnN0IGRhdGVTdHIgPSAoZGF0ZSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLmRhdGVQYXR0ZXJuKSkgfHwgbnVsbDtcblxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0ZSBjb250cm9sXG4gICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wudmFsdWUgIT09IGRhdGVTdHIpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIG9uRGF0ZVBpY2tlckNoYW5nZSgpIG5ldyB2YWx1ZTpcIiwgZGF0ZVN0cik7XG5cbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVN0ciwge1xuICAgICAgICBlbWl0RXZlbnQ6IHRydWUsIC8vIFdpbGwgY2FsbCBvbkZvcm1DaGFuZ2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgLy8gTG9vcCBpZiBpbnZhbGlkXG4gICAgICBpZiAoIWV2ZW50LnZhbHVlICYmIHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHRoaXMuX29wZW5EYXRlUGlja2VySWZNb2JpbGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX29wZW5UaW1lUGlja2VySWZNb2JpbGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vblRpbWVQaWNrZXJDaGFuZ2UodGltZVN0cjogc3RyaW5nKSB7XG4gICAgLy8gVXBkYXRlIHRoZSB0aW1lIGNvbnRyb2wsIGlmIG5lZWRcbiAgICBpZiAodGhpcy50aW1lQ29udHJvbC52YWx1ZSAhPT0gdGltZVN0cikge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJbbWF0LWRhdGUtdGltZV0gb25UaW1lUGlja2VyQ2hhbmdlKCkgbmV3IHZhbHVlOlwiLCB0aW1lU3RyKTtcblxuICAgICAgdGhpcy50aW1lQ29udHJvbC5zZXRWYWx1ZSh0aW1lU3RyLCB7XG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSwgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50PzogRXZlbnQsIGRhdGVQaWNrZXI/OiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50Py5kZWZhdWx0UHJldmVudGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuX3ByZXZlbnRFdmVudChldmVudCk7XG5cbiAgICAvLyBPcGVuIHRoZSBwaWNrZXJcbiAgICB0aGlzLm9wZW5EYXRlUGlja2VyKG51bGwsIGRhdGVQaWNrZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuVGltZVBpY2tlcklmTW9iaWxlKGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50Py5kZWZhdWx0UHJldmVudGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlblRpbWVQaWNrZXIoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLnRpbWVDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmRhdGVDb250cm9sLnZhbHVlO1xuXG4gICAgICAvLyBBdXRvIGZpbGwgZGF0YSB0aW1lL2luIGNhc2Ugb2YgcGFydGlhbCBpbnB1dFxuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhkYXRlU3RyKSkge1xuICAgICAgICBjb25zdCBkYXRlOiBNb21lbnQgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGRhdGVTdHIsIHRoaXMuZGF0ZVBhdHRlcm4pO1xuICAgICAgICBjb25zdCB0aW1lU3RyID0gdGhpcy50aW1lQ29udHJvbC52YWx1ZTtcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aW1lU3RyKSkge1xuICAgICAgICAgIGNvbnN0IGhvdXJQYXJ0cyA9ICh0aW1lU3RyIHx8ICcnKS5zcGxpdCgnOicpO1xuICAgICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChob3VyUGFydHNbMF0gfHwgMCk7XG4gICAgICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KGhvdXJQYXJ0c1sxXSB8fCAwKTtcbiAgICAgICAgICBkYXRlLmxvY2FsZSh0aGlzLmxvY2FsZSkuaG91cihob3VyKS5taW51dGUobWludXRlcykuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBEYXRlVXRpbHMubWFya05vVGltZShkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndyaXRlVmFsdWUoZGF0ZSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRvdWNoZWRcbiAgICB0aGlzLl9jaGVja0lmVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRlQ29udHJvbC50b3VjaGVkIHx8IHRoaXMudGltZUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3ByZXZlbnRFdmVudChldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgdXBkYXRlVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuZGlzcGxheVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJyA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJ10gOiAnTCBMVCc7XG4gICAgdGhpcy5kYXRlUGF0dGVybiA9IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfUEFUVEVSTicgPyB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nXSA6ICdERC9NTS9ZWVlZJztcbiAgICB0aGlzLnRpbWVQYXR0ZXJuID0gdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QQVRURVJOJ10gIT09ICdDT01NT04uVElNRV9QQVRURVJOJyA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLlRJTUVfUEFUVEVSTiddIDogJ0hIOk1NJztcbiAgICB0aGlzLnVwZGF0ZURhdGVNYXNrT3B0aW9ucyhcbiAgICAgIHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInXSAhPT0gJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ1xuICAgICAgICA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInXVxuICAgICAgICA6IHRoaXMuZGF0ZVBhdHRlcm4/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVGltZU1hc2tPcHRpb25zKFxuICAgICAgdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QTEFDRUhPTERFUiddICE9PSAnQ09NTU9OLlRJTUVfUExBQ0VIT0xERVInXG4gICAgICAgID8gdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QTEFDRUhPTERFUiddXG4gICAgICAgIDogdGhpcy50aW1lUGF0dGVybj8udG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgbGV0IGRhdGVTdHIgPSB0aGlzLmRhdGVDb250cm9sLnZhbHVlO1xuICAgIGxldCB0aW1lU3RyID0gdGhpcy50aW1lQ29udHJvbC52YWx1ZTtcblxuICAgIGlmIChkYXRlU3RyID09PSB0aGlzLmRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgZGF0ZVN0ciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRpbWVTdHIgPT09IHRoaXMudGltZVBsYWNlaG9sZGVyKSB7XG4gICAgICB0aW1lU3RyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbbWF0LWRhdGUtdGltZV0gb25Gb3JtQ2hhbmdlKCkgZnJvbSBldmVudDogJHtldmVudH0gLSBjb250cm9scyB2YWx1ZXM6IGAsIFtkYXRlU3RyLCB0aW1lXSk7XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlVmFsdWUgPSBpc05pbE9yQmxhbmsodGltZVN0cikgIT09IGlzTmlsT3JCbGFuayhkYXRlU3RyKTtcbiAgICBpZiAoaW5jb21wbGV0ZVZhbHVlIHx8IHRoaXMuZGF0ZUNvbnRyb2wuaW52YWxpZCB8fCB0aGlzLnRpbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIHZhbGlkRGF0ZTogaW5jb21wbGV0ZVZhbHVlLFxuICAgICAgICAuLi50aGlzLl9mb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMuZGF0ZUNvbnRyb2wuZXJyb3JzLFxuICAgICAgICAuLi50aGlzLnRpbWVDb250cm9sLmVycm9ycyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wuZGlydHkgfHwgdGhpcy50aW1lQ29udHJvbC5kaXJ0eSkge1xuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvcmNlICcwJyBmb3IgZW1wdHkgbW9udGggKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbW9udGgpXG4gICAgZGF0ZVN0ciA9XG4gICAgICBkYXRlU3RyICYmXG4gICAgICBkYXRlU3RyXG4gICAgICAgIC5yZXBsYWNlKCcvLycsICcvMC8nKVxuICAgICAgICAvLyBGb3JjZSAnMCcgZm9yIGVtcHR5IHllYXIgKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgeWVhcilcbiAgICAgICAgLnJlcGxhY2UoL1xcLyQvLCAnLzAnKTtcblxuICAgIC8vIFBhcnNlIGRhdGVcbiAgICBjb25zdCBkYXRlOiBNb21lbnQgPSAoZGF0ZVN0ciAmJiB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGRhdGVTdHIsIHRoaXMuZGF0ZVBhdHRlcm4pKSB8fCBudWxsO1xuXG4gICAgLy8gUGFyc2UgdGltZVxuICAgIGNvbnN0IGhvdXJQYXJ0cyA9ICh0aW1lU3RyIHx8ICcnKS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChob3VyUGFydHNbMF0gfHwgMCk7XG4gICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KGhvdXJQYXJ0c1sxXSB8fCAwKTtcbiAgICBjb25zdCBkYXRlVGltZSA9XG4gICAgICBkYXRlICYmXG4gICAgICBkYXRlXG4gICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUpIC8vIHNldCBhcyB0aW1lIGFzIGxvY2FsZSB0aW1lXG4gICAgICAgIC5ob3VyKGhvdXIpXG4gICAgICAgIC5taW51dGUobWludXRlcykgLy8gU2V0IGxvY2FsIGhvdXJcbiAgICAgICAgLnNlY29uZHMoMClcbiAgICAgICAgLm1pbGxpc2Vjb25kKDApIC8vIFJlc2V0IHNlY29uZHMvbWlsbGlzZWNvbmRcbiAgICAgICAgLnV0YygpOyAvLyBDb252ZXJ0IHRvIFVUQyAoYXZvaWQgVFogb2Zmc2V0IGluIGZpbmFsIHN0cmluZylcblxuICAgIC8vIFNldCBtb2RlbCB2YWx1ZVxuICAgIHRoaXMuZW1pdENoYW5nZShkYXRlVGltZSk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSh2YWx1ZTogTW9tZW50KSB7XG4gICAgLy8gR2V0IHRoZSBtb2RlbCB2YWx1ZVxuICAgIGNvbnN0IGRhdGVTdHIgPSB0b0RhdGVJU09TdHJpbmcodmFsdWUpIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgIT09IGRhdGVTdHIpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZS10aW1lXSBFbWl0IG5ldyB2YWx1ZTogJyArIGRhdGVTdHIpO1xuXG4gICAgICAvLyBBcHBseSB0byBmb3JtIGNvbnRyb2wuID0+IFdpbGwgY2FsbCB3cml0ZVZhbHVlKClcbiAgICAgIC8vIE5PVCBORUVELCBiZWNhdXNlIGEgZm9ybUNvbnRyb2wgc2hvdWxkIE5PVCBiZSB1c2VkIGJ5IG11bHRpcGxlIGZpZWxkc1xuICAgICAgLy90aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRhdGVTdHIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIC8vIENoYW5nZXMgY29tZXMgZnJvbSBpbnNpZGUgZnVuY3Rpb246IHVzZSB0aGUgY2FsbGJhY2tcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZGF0ZVN0cik7XG5cbiAgICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gdXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLl9jaGVja0lmVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gRm9jdXMgdG8gZmlyc3QgaW5wdXRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWF0SW5wdXRzLmZvckVhY2goKGVsZW1lbnRSZWYsIGluZGV4KSA9PiB7XG4gICAgICAgIHNldFRhYkluZGV4KGVsZW1lbnRSZWYsIHRoaXMuX3RhYmluZGV4ICsgaW5kZXgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5kYXRlQ29udHJvbC5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICAgIHRoaXMudGltZUNvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RpcnR5KG9wdHM/OiBhbnkpIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVNYXNrT3B0aW9ucyhkYXRlUGxhY2Vob2xkZXI6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRhdGVQbGFjZWhvbGRlciAhPT0gZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmRhdGVQbGFjZWhvbGRlciA9IGRhdGVQbGFjZWhvbGRlcjtcblxuICAgICAgY29uc3QgZGF0ZU9wdGlvbnMgPSBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICBtb2RlOiB0aGlzLmRhdGVQYXR0ZXJuLnRvTG93ZXJDYXNlKCkgYXMgTWFza2l0b0RhdGVNb2RlLFxuICAgICAgICBzZXBhcmF0b3I6ICcvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsdWdpbnMsIC8vIHBsdWdpbnMga2VlcHMgY2FyZXQgaW5zaWRlIGFjdHVhbCB2YWx1ZSBhbmQgcmVtb3ZlIHBsYWNlaG9sZGVyIG9uIGJsdXJcbiAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zXG4gICAgICAgIC8vIHBhc3MgJ3RydWUnIGFzIHNlY29uZCBhcmd1bWVudCB0byBhZGQgcGx1Z2luIHRvIGhpZGUgcGxhY2Vob2xkZXIgd2hlbiBpbnB1dCBpcyBub3QgZm9jdXNlZFxuICAgICAgfSA9IG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIodGhpcy5kYXRlUGxhY2Vob2xkZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm1hc2tpdG9EYXRlT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZGF0ZU9wdGlvbnMsXG4gICAgICAgIHBsdWdpbnM6IHBsdWdpbnMuY29uY2F0KGRhdGVPcHRpb25zLnBsdWdpbnMgfHwgW10pLFxuICAgICAgICBwcmVwcm9jZXNzb3JzOiBbXG4gICAgICAgICAgLy8gQWx3YXlzIHB1dCBpdCBCRUZPUkUgYWxsIG90aGVyIHByZXByb2Nlc3NvcnNcbiAgICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgICAuLi5kYXRlT3B0aW9ucy5wcmVwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgICBwb3N0cHJvY2Vzc29yczogW1xuICAgICAgICAgIC4uLmRhdGVPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQUZURVIgYWxsIG90aGVyIHBvc3Rwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgfSBhcyBSZXF1aXJlZDxNYXNraXRvT3B0aW9ucz47XG5cbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lTWFza09wdGlvbnModGltZVBsYWNlaG9sZGVyOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50aW1lUGxhY2Vob2xkZXIgIT09IHRpbWVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy50aW1lUGxhY2Vob2xkZXIgPSB0aW1lUGxhY2Vob2xkZXI7XG5cbiAgICAgIGNvbnN0IHRpbWVPcHRpb25zID0gbWFza2l0b1RpbWVPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgbW9kZTogdGhpcy50aW1lUGF0dGVybi50b1VwcGVyQ2FzZSgpIGFzIE1hc2tpdG9UaW1lTW9kZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsdWdpbnMsIC8vIHBsdWdpbnMga2VlcHMgY2FyZXQgaW5zaWRlIGFjdHVhbCB2YWx1ZSBhbmQgcmVtb3ZlIHBsYWNlaG9sZGVyIG9uIGJsdXJcbiAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zXG4gICAgICAgIC8vIHBhc3MgJ3RydWUnIGFzIHNlY29uZCBhcmd1bWVudCB0byBhZGQgcGx1Z2luIHRvIGhpZGUgcGxhY2Vob2xkZXIgd2hlbiBpbnB1dCBpcyBub3QgZm9jdXNlZFxuICAgICAgfSA9IG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIodGhpcy50aW1lUGxhY2Vob2xkZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm1hc2tpdG9UaW1lT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGltZU9wdGlvbnMsXG4gICAgICAgIHBsdWdpbnM6IHBsdWdpbnMuY29uY2F0KHRpbWVPcHRpb25zLnBsdWdpbnMgfHwgW10pLFxuICAgICAgICBwcmVwcm9jZXNzb3JzOiBbXG4gICAgICAgICAgLy8gQWx3YXlzIHB1dCBpdCBCRUZPUkUgYWxsIG90aGVyIHByZXByb2Nlc3NvcnNcbiAgICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgICAuLi50aW1lT3B0aW9ucy5wcmVwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgICBwb3N0cHJvY2Vzc29yczogW1xuICAgICAgICAgIC4uLnRpbWVPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQUZURVIgYWxsIG90aGVyIHBvc3Rwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgfSBhcyBSZXF1aXJlZDxNYXNraXRvT3B0aW9ucz47XG5cbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIHJlYWRvbmx5IC0tPlxuQGlmIChyZWFkb25seSkge1xuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWRcIlxuICA+XG4gICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgfVxuXG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0Pnt7IGZvcm1Db250cm9sLnZhbHVlIHwgZGF0ZUZvcm1hdDogeyBwYXR0ZXJuOiBkaXNwbGF5UGF0dGVybiB9IH19PC9pb24tdGV4dD5cblxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGhpbnRzIC0tPlxuICAgIDxtYXQtaGludCBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0SGludFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtaGludD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbn0gQGVsc2Uge1xuICA8IS0tIHdyaXRhYmxlICsgdGltZSAtLT5cbiAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcge3sgYXBwZWFyYW5jZSB9fVwiPlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgbm8td3JhcFwiPlxuICAgICAgPCEtLSBkYXkgLS0+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImRheSBpb24tbm8tcGFkZGluZ1wiIFtzdHlsZS4tLWJ1dHRvbi1jb3VudF09XCJjbGVhcmFibGUgPyAyIDogMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCInZHluYW1pYydcIlxuICAgICAgICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0taW52YWxpZF09XCJmb3JtQ29udHJvbC50b3VjaGVkICYmIChkYXRlQ29udHJvbC5pbnZhbGlkIHx8IGZvcm1Db250cm9sLmludmFsaWQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiX29wZW5EYXRlUGlja2VySWZNb2JpbGUoJGV2ZW50LCBkYXRlUGlja2VyKVwiXG4gICAgICAgICAgKGZvY3VzKT1cIl9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBEZXNrdG9wIC0tPlxuICAgICAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICNtYXRJbnB1dFxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWlucHV0LWVsZW1lbnRcIlxuICAgICAgICAgICAgICBbbWFza2l0b109XCJtYXNraXRvRGF0ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZGF0ZUNvbnRyb2xcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0ZVBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiX29uQmx1cigpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmFycm93RG93bik9XCJvcGVuRGF0ZVBpY2tlcigkZXZlbnQsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVzY2FwZSk9XCJfcHJldmVudEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8IS0tIE1vYmlsZSAtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sIG1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoJGV2ZW50LCBkYXRlUGlja2VyKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj57eyBtb2JpbGUgPyAnZGF0ZV9yYW5nZScgOiAna2V5Ym9hcmRfYXJyb3dfZG93bicgfX08L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtoaWRkZW5dPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWQgfHwgIWZvcm1Db250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8IS0tIFRoZSBkYXRlIHBpY2tlciAtLT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlUGlja2VyIFt0b3VjaFVpXT1cIm1vYmlsZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtzdGFydEF0XT1cInN0YXJ0RGF0ZVwiPlxuICAgICAgICAgIDwhLS0gRGF0ZSBwaWNrZXIgYnV0dG9ucyAtLT5cbiAgICAgICAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLWFjdGlvbnM+XG4gICAgICAgICAgICAgIDwhLS0gQ2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgbWF0RGF0ZXBpY2tlckNhbmNlbD5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0NBTkNFTDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIDwhLS0gQXBwbHkgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBjb2xvcj1cInRlcnRpYXJ5XCIgbWF0RGF0ZXBpY2tlckFwcGx5PlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgdGltZUNvbnRyb2wudmFsdWUgfHwgKCdDT01NT04uVElNRScgfCB0cmFuc2xhdGUpIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPCEtLSBob3VyIC0tPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJob3VyIGlvbi1uby1wYWRkaW5nXCIgW3N0eWxlLi0tYnV0dG9uLWNvdW50XT1cIiFjb21wYWN0ID8gMSA6IDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCJcbiAgICAgICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWludmFsaWRdPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiAodGltZUNvbnRyb2wuaW52YWxpZCB8fCBmb3JtQ29udHJvbC5pbnZhbGlkKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLlRJTUU8L21hdC1sYWJlbD5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGltZUNvbnRyb2xcIlxuICAgICAgICAgICAgICBbbWFza2l0b109XCJtYXNraXRvVGltZU9wdGlvbnNcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1pbnB1dC1lbGVtZW50XCJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRpbWVQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwib3BlblRpbWVQaWNrZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lc2NhcGUpPVwiX3ByZXZlbnRFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwiX29uQmx1cigpXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4ICE9PSB1bmRlZmluZWQgPyB0YWJpbmRleCArIDEgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sIG1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0aW1lQ29udHJvbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJfb3BlblRpbWVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBIaWRlIHRoZSBmaW5hbCAoaGlkZGVuKSBpbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGltZUNvbnRyb2xcIlxuICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgW25neFRpbWVwaWNrZXJdPVwidGltZVBpY2tlclwiXG4gICAgICAgICAgICBbZm9ybWF0XT1cIjI0XCJcbiAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIEBpZiAoIWNvbXBhY3QgJiYgIW1vYmlsZSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UaW1lUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9IEBlbHNlIGlmICghY29tcGFjdCAmJiBtb2JpbGUpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJfb3BlblRpbWVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFjY2Vzc190aW1lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxuZ3gtbWF0ZXJpYWwtdGltZXBpY2tlclxuICAgICAgICAgICAgI3RpbWVQaWNrZXJcbiAgICAgICAgICAgIFtALmRpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgKHRpbWVTZXQpPVwiX29uVGltZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtFU0NdPVwiIW1vYmlsZVwiXG4gICAgICAgICAgICBbZGVmYXVsdFRpbWVdPVwiJzAwOjAwJ1wiXG4gICAgICAgICAgICBbY2FuY2VsQnRuVG1wbF09XCJ0aW1lUGlja2VyQ2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgIFtjb25maXJtQnRuVG1wbF09XCJ0aW1lUGlja2VyT2tCdXR0b25cIlxuICAgICAgICAgICAgW3ByZXZlbnRPdmVybGF5Q2xpY2tdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtlbmFibGVLZXlib2FyZElucHV0XT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlQW5pbWF0aW9uXT1cInRydWVcIlxuICAgICAgICAgID48L25neC1tYXRlcmlhbC10aW1lcGlja2VyPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cblxuICA8IS0tIERvIHRoZSBzYW1lIGFzIE1hdEZvcm1GaWVsZCBzaW5jZSBhbmd1bGFyIDE1IChzZWUgY29tcG9uZW50IHNvdXJjZSktLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyXCJcbiAgICBbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbl09XCJzdWJzY3JpcHRTaXppbmcgPT09ICdmaXhlZCdcIlxuICAgIFtjbGFzcy5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZV09XCJzdWJzY3JpcHRTaXppbmcgPT09ICdkeW5hbWljJ1wiXG4gID5cbiAgICBAaWYgKGZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJcIj5cbiAgICAgICAgQGlmIChmb3JtQ29udHJvbC5lcnJvcnMgfCBtYXBLZXlzIHwgYXJyYXlGaXJzdDsgYXMgZXJyb3JLZXkpIHtcbiAgICAgICAgICBAc3dpdGNoIChlcnJvcktleSkge1xuICAgICAgICAgICAgQGNhc2UgKCdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgndmFsaWREYXRlJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9USU1FPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2RhdGVJc0FmdGVyJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIHt7ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5kYXRlSXNBZnRlciB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZGF0ZUlzQmVmb3JlJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIHt7ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9CRUZPUkUnIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQmVmb3JlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdkYXRlUmFuZ2UnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX1JBTkdFPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2RhdGVNYXhEdXJhdGlvbicpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUFYX0RVUkFUSU9OPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2RhdGVNaW5EdXJhdGlvbicpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ21zZycpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICB7eyBmb3JtQ29udHJvbC5lcnJvcnMubXNnPy5rZXkgfHwgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ucGFyYW1zIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0RXJyb3JUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIGhpbnRzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG59XG5cbjwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjdGltZVBpY2tlckNhbmNlbEJ1dHRvbj5cbiAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgPC9pb24tYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBjb25maXJtIGJ1dHRvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjdGltZVBpY2tlck9rQnV0dG9uPlxuICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9WQUxJREFURTwvaW9uLWxhYmVsPlxuICA8L2lvbi1idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0U3VmZml4VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRFcnJvclRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtZXJyb3IsW21hdEVycm9yXVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0SGludFRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSxbbWF0SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXNwYWNlclwiPjwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50W2FsaWduPSdlbmQnXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGV0aW1lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFHUixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsUUFBUSxHQUlULE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakosT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxF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QUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQzt3R0Fyb0JVLFdBQVcsd01Bc0haLDhCQUE4Qjs0RkF0SDdCLFdBQVcsb2NBSFgsQ0FBQyxzQkFBc0IsQ0FBQyxnRUFpSHJCLFFBQVEsZ1VDbEx4Qix5OFdBb1VBOzs0RkRoUWEsV0FBVztrQkFQdkIsU0FBUzsrQkFDRSxxQkFBcUIsYUFHcEIsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFDbEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUg1QyxRQUFROzswQkFDUixNQUFNOzJCQUFDLDhCQUE4Qjt5Q0ExRi9CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBU0YsZUFBZTtzQkFEbEIsS0FBSztnQkFRTyxXQUFXO3NCQUF2QixLQUFLO2dCQU9PLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT08sUUFBUTtzQkFBcEIsS0FBSztnQkFZTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBbUJtQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNHLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVTtnQkFDQSxRQUFRO3NCQUEvQixZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFByb3ZpZGVyLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyxcbiAgTWF0RXJyb3IsXG4gIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsXG4gIE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLFxuICBTdWJzY3JpcHRTaXppbmcsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5wdXRFbGVtZW50LCBzZXRUYWJJbmRleCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBpc0ZvY3VzYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgaXNCbGFua1N0cmluZywgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsQm9vbGVhbiwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL2RhdGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IE1vbWVudERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHsgQXBwRmxvYXRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IE1hc2tpdG9PcHRpb25zIH0gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQgeyBNYXNraXRvRGF0ZU1vZGUsIG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvciwgTWFza2l0b1RpbWVNb2RlLCBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIgfSBmcm9tICdAbWFza2l0by9raXQnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkcgfSBmcm9tICcuLi9tYXRlcmlhbC5jb25maWcnO1xuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gJ0ByeC1hbmd1bGFyL2Nkay96b25lLWxlc3MvYnJvd3Nlcic7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZVRpbWUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IFRJTUVfUkVHRVhQID0gL15bMDEyXVswLTldWzpdWzAxMjM0NV1bMC05XSQvO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmRlY2xhcmUgaW50ZXJmYWNlIE5neFRpbWVQaWNrZXIge1xuICBzZWxlY3RlZEhvdXI6IHsgdGltZTogbnVtYmVyIH07XG4gIHNlbGVjdGVkTWludXRlOiB7IHRpbWU6IG51bWJlciB9O1xuICBvcGVuKCk7XG4gIGNsb3NlKCk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kYXRlLXRpbWUtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuZGF0ZXRpbWUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmRhdGV0aW1lLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlVGltZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9jb250cm9sU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3dyaXRpbmcgPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHJpdmF0ZSBfY29udHJvbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBwcm90ZWN0ZWQgZGF0ZUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHJvdGVjdGVkIHRpbWVDb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIHByb3RlY3RlZCBkaXNwbGF5UGF0dGVybjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGF0ZVBhdHRlcm46IHN0cmluZztcbiAgcHJvdGVjdGVkIHRpbWVQYXR0ZXJuOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1hc2tpdG9EYXRlT3B0aW9uczogTWFza2l0b09wdGlvbnM7XG4gIHByb3RlY3RlZCBtYXNraXRvVGltZU9wdGlvbnM6IE1hc2tpdG9PcHRpb25zO1xuICBwcm90ZWN0ZWQgZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB0aW1lUGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSBjb21wYWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KClcbiAgc2V0IGFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2UgfHwgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLl9kZWZhdWx0U3Vic2NyaXB0U2l6aW5nO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1Db250cm9sKHZhbHVlOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICB0aGlzLl9zZXRGb3JtQ29udHJvbCh2YWx1ZSk7XG4gIH1cbiAgZ2V0IGZvcm1Db250cm9sKCk6IFVudHlwZWRGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250cm9sO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1Db250cm9sTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2V0Rm9ybUNvbnRyb2xOYW1lKHZhbHVlKTtcbiAgfVxuICBnZXQgZm9ybUNvbnRyb2xOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xOYW1lO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgYW55KSB7XG4gICAgaWYgKHRoaXMuX3JlcXVpcmVkID09PSB2YWx1ZSkgcmV0dXJuOyAvLyBTS2lwXG5cbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnModGhpcy5fZm9ybUNvbnRyb2wsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRpbmcpIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RpbWVQaWNrZXInKSB0aW1lUGlja2VyOiBOZ3hUaW1lUGlja2VyO1xuICBAVmlld0NoaWxkcmVuKCdtYXRJbnB1dCcpIG1hdElucHV0czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAQ29udGVudENoaWxkKE1hdEVycm9yKSBtYXRFcnJvcjogTWF0RXJyb3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSAodHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZykuc3Vic3RyaW5nKDAsIDIpO1xuICAgIHRoaXMuX2RlZmF1bHRTdWJzY3JpcHRTaXppbmcgPSBkZWZhdWx0T3B0aW9ucz8uc3Vic2NyaXB0U2l6aW5nIHx8IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfU1VCU0NSSVBUX1NJWklORztcbiAgICB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9IGRlZmF1bHRPcHRpb25zPy5hcHBlYXJhbmNlIHx8IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfQVBQRUFSQU5DRTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9mb3JtQ29udHJvbCB8fCAodGhpcy5fY29udHJvbE5hbWUgJiYgKHRoaXMuZm9ybUdyb3VwRGlyPy5mb3JtLmdldCh0aGlzLl9jb250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCFjb250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWRhdGUtdGltZS1maWVsZD4uXCIpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGlzTm90TmlsQm9vbGVhbih0aGlzLl9yZXF1aXJlZCkgPyB0aGlzLl9yZXF1aXJlZCA6IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5fcmVxdWlyZWQpO1xuXG4gICAgdGhpcy5fc2V0Rm9ybUNvbnRyb2woY29udHJvbCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRhdGUgY29udHJvbFxuICAgIHRoaXMuZGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHRpbWUgY29udHJvbFxuICAgIHRoaXMudGltZUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgdGhpcy5tb2JpbGUgPyBudWxsIDogVmFsaWRhdG9ycy5wYXR0ZXJuKFRJTUVfUkVHRVhQKSk7XG5cbiAgICAvLyBHZXQgcGF0dGVybnMgdG8gZGlzcGxheSBkYXRlIGFuZCBkYXRlK3RpbWVcbiAgICBjb25zdCBpMThuS2V5cyA9IFsnQ09NTU9OLkRBVEVfUEFUVEVSTicsICdDT01NT04uVElNRV9QQVRURVJOJywgJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTicsICdDT01NT04uREFURV9QTEFDRUhPTERFUicsICdDT01NT04uVElNRV9QTEFDRUhPTERFUiddO1xuICAgIHRoaXMudXBkYXRlVHJhbnNsYXRpb25zKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoaTE4bktleXMpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgLmdldChpMThuS2V5cylcbiAgICAgICAgLnBpcGUoc2tpcCgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgodHJhbnNsYXRlKSA9PiB0aGlzLnVwZGF0ZVRyYW5zbGF0aW9ucyh0cmFuc2xhdGUpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKG1lcmdlKHRoaXMuZGF0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLCB0aGlzLnRpbWVDb250cm9sLnZhbHVlQ2hhbmdlcykuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSgpKSk7XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIC8vIEVuYWJsZSBhbmltYXRpb25zIG5vdy4gVGhpcyBlbnN1cmVzIHdlIGRvbid0IGFuaW1hdGUgb24gaW5pdGlhbCByZW5kZXIuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIHdyaXRlVmFsdWUoKSB3aXRoOlwiLCB2YWx1ZSk7XG5cbiAgICAvLyBDb252ZXJ0IGludG8gZGF0ZVxuICAgIGNvbnN0IG1vbWVudCA9IGlzTW9tZW50KHZhbHVlKSA/IHZhbHVlIDogZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuXG4gICAgaWYgKCFtb21lbnQgfHwgIW1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLnRpbWVDb250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50XG4gICAgICAgIC8vIEltcG9ydGFudDogY2xvbmUsIGJlY2F1c2Ugc3RhcnRPZigpIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBkYXRlXG4gICAgICAgIC5jbG9uZSgpXG4gICAgICAgIC8vIFJlc2V0IHRpbWVcbiAgICAgICAgLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuZGF0ZVBhdHRlcm4pO1xuXG4gICAgICAvLyBGb3JtYXQgdGltZVxuICAgICAgbGV0IHRpbWVTdHI7XG4gICAgICBpZiAoRGF0ZVV0aWxzLmlzTm9UaW1lKG1vbWVudCkpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGltZVxuICAgICAgICB0aW1lU3RyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIC0gRm9ybWF0IGhoXG4gICAgICAgIGxldCBob3VyOiBudW1iZXIgfCBzdHJpbmcgPSBtb21lbnQuaG91cigpO1xuICAgICAgICBob3VyID0gaG91ciA8IDEwID8gJzAnICsgaG91ciA6IGhvdXI7XG4gICAgICAgIC8vIC0gRm9ybWF0IG1tXG4gICAgICAgIGxldCBtaW51dGVzOiBudW1iZXIgfCBzdHJpbmcgPSBtb21lbnQubWludXRlcygpO1xuICAgICAgICBtaW51dGVzID0gbWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXM7XG4gICAgICAgIHRpbWVTdHIgPSBgJHtob3VyfToke21pbnV0ZXN9YDtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmRhdGVDb250cm9sLnBhdGNoVmFsdWUoZGF0ZVN0ciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5wYXRjaFZhbHVlKHRpbWVTdHIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcblxuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmRhdGVDb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy50aW1lQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc2FibGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvcGVuRGF0ZVBpY2tlcihldmVudD86IEV2ZW50LCBkYXRlUGlja2VyPzogTWF0RGF0ZXBpY2tlcjxhbnk+KSB7XG4gICAgZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXIgfHwgdGhpcy5kYXRlUGlja2VyO1xuICAgIGlmIChkYXRlUGlja2VyKSB7XG4gICAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgICBpZiAoIWRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAgIGRhdGVQaWNrZXIub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5UaW1lUGlja2VyKGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMudGltZVBpY2tlcikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy50aW1lUGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5tYXRJbnB1dHMuZmlyc3Q7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KGlucHV0Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50PzogRXZlbnQpIHtcbiAgICB0aGlzLl9wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICB9XG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgX3NldEZvcm1Db250cm9sTmFtZShjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250cm9sTmFtZSB8fCB0aGlzLl9jb250cm9sTmFtZSA9PT0gY29udHJvbE5hbWUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgdGhpcy5fY29udHJvbE5hbWUgPSBjb250cm9sTmFtZTtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cERpcj8uZm9ybT8uZ2V0KGNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2wpIHRoaXMuX3NldEZvcm1Db250cm9sKGNvbnRyb2wpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXRGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sICE9PSBjb250cm9sKSB7XG4gICAgICB0aGlzLl9mb3JtQ29udHJvbCA9IGNvbnRyb2w7XG5cbiAgICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgICB0aGlzLl9jb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fY29udHJvbFN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLl9yZWFkb25seSAmJiAhdGhpcy5fd3JpdGluZyAmJiAhdGhpcy5fZGlzYWJsaW5nKSAvLyBTa2lwXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy50aW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGVDb250cm9sLnRvdWNoZWQpIHRoaXMuZGF0ZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVDb250cm9sLnRvdWNoZWQpIHRoaXMudGltZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdmFsaWRhdG9yc1xuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzKGNvbnRyb2wsIHRoaXMuX3JlcXVpcmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfdXBkYXRlQ29udHJvbFZhbGlkYXRvcnMoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCByZXF1aXJlZDogYm9vbGVhbikge1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvclxuICAgIGlmICghY29udHJvbC5oYXNWYWxpZGF0b3IoU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUpKSB7XG4gICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnMoU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUpO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXF1aXJlZCB2YWxpZGF0b3IgKGlmIG5lZWQpXG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICBpZiAoIWNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICAgIGNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICBjb250cm9sLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoYFske3RoaXMuY29uc3RydWN0b3IubmFtZX0uX29uRGF0ZVBpY2tlckNoYW5nZV1gKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBldmVudCBpcyB2YWxpZFxuICAgIGlmICghZXZlbnQgfHwgKGV2ZW50LnZhbHVlICE9PSBudWxsICYmICFpc01vbWVudChldmVudC52YWx1ZSkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgTWF0RGF0ZXBpY2tlciBldmVudC4gU2tpcHBpbmcnLCBldmVudCk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBsZXQgbW9tZW50ID0gZXZlbnQudmFsdWU7XG5cbiAgICAvLyBObyB2YWx1ZSwgYnV0IG1vYmlsZSBtb2RlOiB1c2UgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmICghbW9tZW50ICYmIHRoaXMubW9iaWxlKSB7XG4gICAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICAgIG1vbWVudCA9IERhdGVVdGlscy5yZXNldFRpbWUoRGF0ZVV0aWxzLm1vbWVudCgpLmxvY2FsZSh0aGlzLmxvY2FsZSkpO1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobW9tZW50LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gdXNhYmxlIGRhdGUsIHRoZW4gY29udmVydCB0byBkYXRlIHBhdHRlcm4gKGUuZyBERC9NTS9ZWVlZKVxuICAgIGNvbnN0IGRhdGUgPSBtb21lbnRcbiAgICAgID8ubG9jYWxlKHRoaXMubG9jYWxlKSAvLyBzZXQgbG9jYWxlXG4gICAgICAuaG91cigwKVxuICAgICAgLm1pbnV0ZSgwKVxuICAgICAgLnNlY29uZHMoMClcbiAgICAgIC5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBob3VyXG4gICAgICAudXRjKHRydWUpO1xuICAgIGNvbnN0IGRhdGVTdHIgPSAoZGF0ZSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLmRhdGVQYXR0ZXJuKSkgfHwgbnVsbDtcblxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0ZSBjb250cm9sXG4gICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wudmFsdWUgIT09IGRhdGVTdHIpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIG9uRGF0ZVBpY2tlckNoYW5nZSgpIG5ldyB2YWx1ZTpcIiwgZGF0ZVN0cik7XG5cbiAgICAgIHRoaXMuZGF0ZUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVN0ciwge1xuICAgICAgICBlbWl0RXZlbnQ6IHRydWUsIC8vIFdpbGwgY2FsbCBvbkZvcm1DaGFuZ2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgLy8gTG9vcCBpZiBpbnZhbGlkXG4gICAgICBpZiAoIWV2ZW50LnZhbHVlICYmIHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHRoaXMuX29wZW5EYXRlUGlja2VySWZNb2JpbGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX29wZW5UaW1lUGlja2VySWZNb2JpbGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vblRpbWVQaWNrZXJDaGFuZ2UodGltZVN0cjogc3RyaW5nKSB7XG4gICAgLy8gVXBkYXRlIHRoZSB0aW1lIGNvbnRyb2wsIGlmIG5lZWRcbiAgICBpZiAodGhpcy50aW1lQ29udHJvbC52YWx1ZSAhPT0gdGltZVN0cikge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJbbWF0LWRhdGUtdGltZV0gb25UaW1lUGlja2VyQ2hhbmdlKCkgbmV3IHZhbHVlOlwiLCB0aW1lU3RyKTtcblxuICAgICAgdGhpcy50aW1lQ29udHJvbC5zZXRWYWx1ZSh0aW1lU3RyLCB7XG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSwgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50PzogRXZlbnQsIGRhdGVQaWNrZXI/OiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50Py5kZWZhdWx0UHJldmVudGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuX3ByZXZlbnRFdmVudChldmVudCk7XG5cbiAgICAvLyBPcGVuIHRoZSBwaWNrZXJcbiAgICB0aGlzLm9wZW5EYXRlUGlja2VyKG51bGwsIGRhdGVQaWNrZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuVGltZVBpY2tlcklmTW9iaWxlKGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50Py5kZWZhdWx0UHJldmVudGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlblRpbWVQaWNrZXIoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLnRpbWVDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmRhdGVDb250cm9sLnZhbHVlO1xuXG4gICAgICAvLyBBdXRvIGZpbGwgZGF0YSB0aW1lL2luIGNhc2Ugb2YgcGFydGlhbCBpbnB1dFxuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhkYXRlU3RyKSkge1xuICAgICAgICBjb25zdCBkYXRlOiBNb21lbnQgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGRhdGVTdHIsIHRoaXMuZGF0ZVBhdHRlcm4pO1xuICAgICAgICBjb25zdCB0aW1lU3RyID0gdGhpcy50aW1lQ29udHJvbC52YWx1ZTtcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aW1lU3RyKSkge1xuICAgICAgICAgIGNvbnN0IGhvdXJQYXJ0cyA9ICh0aW1lU3RyIHx8ICcnKS5zcGxpdCgnOicpO1xuICAgICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChob3VyUGFydHNbMF0gfHwgMCk7XG4gICAgICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KGhvdXJQYXJ0c1sxXSB8fCAwKTtcbiAgICAgICAgICBkYXRlLmxvY2FsZSh0aGlzLmxvY2FsZSkuaG91cihob3VyKS5taW51dGUobWludXRlcykuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBEYXRlVXRpbHMubWFya05vVGltZShkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndyaXRlVmFsdWUoZGF0ZSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRvdWNoZWRcbiAgICB0aGlzLl9jaGVja0lmVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRlQ29udHJvbC50b3VjaGVkIHx8IHRoaXMudGltZUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3ByZXZlbnRFdmVudChldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgdXBkYXRlVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuZGlzcGxheVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJyA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJ10gOiAnTCBMVCc7XG4gICAgdGhpcy5kYXRlUGF0dGVybiA9IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfUEFUVEVSTicgPyB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nXSA6ICdERC9NTS9ZWVlZJztcbiAgICB0aGlzLnRpbWVQYXR0ZXJuID0gdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QQVRURVJOJ10gIT09ICdDT01NT04uVElNRV9QQVRURVJOJyA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLlRJTUVfUEFUVEVSTiddIDogJ0hIOk1NJztcbiAgICB0aGlzLnVwZGF0ZURhdGVNYXNrT3B0aW9ucyhcbiAgICAgIHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInXSAhPT0gJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ1xuICAgICAgICA/IHRyYW5zbGF0aW9uc1snQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInXVxuICAgICAgICA6IHRoaXMuZGF0ZVBhdHRlcm4/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVGltZU1hc2tPcHRpb25zKFxuICAgICAgdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QTEFDRUhPTERFUiddICE9PSAnQ09NTU9OLlRJTUVfUExBQ0VIT0xERVInXG4gICAgICAgID8gdHJhbnNsYXRpb25zWydDT01NT04uVElNRV9QTEFDRUhPTERFUiddXG4gICAgICAgIDogdGhpcy50aW1lUGF0dGVybj8udG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgbGV0IGRhdGVTdHIgPSB0aGlzLmRhdGVDb250cm9sLnZhbHVlO1xuICAgIGxldCB0aW1lU3RyID0gdGhpcy50aW1lQ29udHJvbC52YWx1ZTtcblxuICAgIGlmIChkYXRlU3RyID09PSB0aGlzLmRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgZGF0ZVN0ciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRpbWVTdHIgPT09IHRoaXMudGltZVBsYWNlaG9sZGVyKSB7XG4gICAgICB0aW1lU3RyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbbWF0LWRhdGUtdGltZV0gb25Gb3JtQ2hhbmdlKCkgZnJvbSBldmVudDogJHtldmVudH0gLSBjb250cm9scyB2YWx1ZXM6IGAsIFtkYXRlU3RyLCB0aW1lXSk7XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlVmFsdWUgPSBpc05pbE9yQmxhbmsodGltZVN0cikgIT09IGlzTmlsT3JCbGFuayhkYXRlU3RyKTtcbiAgICBpZiAoaW5jb21wbGV0ZVZhbHVlIHx8IHRoaXMuZGF0ZUNvbnRyb2wuaW52YWxpZCB8fCB0aGlzLnRpbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIHZhbGlkRGF0ZTogaW5jb21wbGV0ZVZhbHVlLFxuICAgICAgICAuLi50aGlzLl9mb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMuZGF0ZUNvbnRyb2wuZXJyb3JzLFxuICAgICAgICAuLi50aGlzLnRpbWVDb250cm9sLmVycm9ycyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZGF0ZUNvbnRyb2wuZGlydHkgfHwgdGhpcy50aW1lQ29udHJvbC5kaXJ0eSkge1xuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvcmNlICcwJyBmb3IgZW1wdHkgbW9udGggKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbW9udGgpXG4gICAgZGF0ZVN0ciA9XG4gICAgICBkYXRlU3RyICYmXG4gICAgICBkYXRlU3RyXG4gICAgICAgIC8vIEtlZXAgZGlnaXRzIGFuZCBzbGFzaGVzXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcZC9dL2csICcnKVxuICAgICAgICAucmVwbGFjZSgnLy8nLCAnLzAvJylcbiAgICAgICAgLy8gRm9yY2UgJzAnIGZvciBlbXB0eSB5ZWFyIChvdGhlcndpc2UgbW9tZW50IHdpbGwgdXNlIHRoZSBjdXJyZW50IHllYXIpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJy8wJyk7XG5cbiAgICAvLyBQYXJzZSBkYXRlXG4gICAgY29uc3QgZGF0ZTogTW9tZW50ID0gKGRhdGVTdHIgJiYgdGhpcy5kYXRlQWRhcHRlci5wYXJzZShkYXRlU3RyLCB0aGlzLmRhdGVQYXR0ZXJuKSkgfHwgbnVsbDtcblxuICAgIC8vIFBhcnNlIHRpbWVcbiAgICBjb25zdCBob3VyUGFydHMgPSAodGltZVN0ciB8fCAnJykuc3BsaXQoJzonKTtcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoaG91clBhcnRzWzBdIHx8IDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZUludChob3VyUGFydHNbMV0gfHwgMCk7XG4gICAgY29uc3QgZGF0ZVRpbWUgPVxuICAgICAgZGF0ZSAmJlxuICAgICAgZGF0ZVxuICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKSAvLyBzZXQgYXMgdGltZSBhcyBsb2NhbGUgdGltZVxuICAgICAgICAuaG91cihob3VyKVxuICAgICAgICAubWludXRlKG1pbnV0ZXMpIC8vIFNldCBsb2NhbCBob3VyXG4gICAgICAgIC5zZWNvbmRzKDApXG4gICAgICAgIC5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBzZWNvbmRzL21pbGxpc2Vjb25kXG4gICAgICAgIC51dGMoKTsgLy8gQ29udmVydCB0byBVVEMgKGF2b2lkIFRaIG9mZnNldCBpbiBmaW5hbCBzdHJpbmcpXG5cbiAgICAvLyBTZXQgbW9kZWwgdmFsdWVcbiAgICB0aGlzLmVtaXRDaGFuZ2UoZGF0ZVRpbWUpO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UodmFsdWU6IE1vbWVudCkge1xuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICBjb25zdCBkYXRlU3RyID0gdG9EYXRlSVNPU3RyaW5nKHZhbHVlKSB8fCBudWxsO1xuXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlICE9PSBkYXRlU3RyKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGUtdGltZV0gRW1pdCBuZXcgdmFsdWU6ICcgKyBkYXRlU3RyKTtcblxuICAgICAgaWYgKHZhbHVlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgLy8gVXBkYXRlIGZvcm1Db250cm9sIHZhbHVlICh3aWxsIHVwZGF0ZSBkYXRlUGlja2VyIGFsc28pXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVN0ciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGFuZ2VzIGNvbWVzIGZyb20gaW5zaWRlIGZ1bmN0aW9uOiB1c2UgdGhlIGNhbGxiYWNrXG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGRhdGVTdHIpO1xuXG4gICAgICAvLyBDaGVjayBpZiBuZWVkIHRvIHVwZGF0ZSBjb250cm9sc1xuICAgICAgdGhpcy5fY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hdElucHV0cy5mb3JFYWNoKChlbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUYWJJbmRleChlbGVtZW50UmVmLCB0aGlzLl90YWJpbmRleCArIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZGF0ZUNvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLnRpbWVDb250cm9sLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEaXJ0eShvcHRzPzogYW55KSB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2wubWFya0FzRGlydHkob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlTWFza09wdGlvbnMoZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kYXRlUGxhY2Vob2xkZXIgIT09IGRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5kYXRlUGxhY2Vob2xkZXIgPSBkYXRlUGxhY2Vob2xkZXI7XG5cbiAgICAgIGNvbnN0IGRhdGVPcHRpb25zID0gbWFza2l0b0RhdGVPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgbW9kZTogdGhpcy5kYXRlUGF0dGVybi50b0xvd2VyQ2FzZSgpIGFzIE1hc2tpdG9EYXRlTW9kZSxcbiAgICAgICAgc2VwYXJhdG9yOiAnLycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBwbHVnaW5zLCAvLyBwbHVnaW5zIGtlZXBzIGNhcmV0IGluc2lkZSBhY3R1YWwgdmFsdWUgYW5kIHJlbW92ZSBwbGFjZWhvbGRlciBvbiBibHVyXG4gICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9uc1xuICAgICAgICAvLyBwYXNzICd0cnVlJyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gYWRkIHBsdWdpbiB0byBoaWRlIHBsYWNlaG9sZGVyIHdoZW4gaW5wdXQgaXMgbm90IGZvY3VzZWRcbiAgICAgIH0gPSBtYXNraXRvV2l0aFBsYWNlaG9sZGVyKHRoaXMuZGF0ZVBsYWNlaG9sZGVyLCB0cnVlKTtcblxuICAgICAgdGhpcy5tYXNraXRvRGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmRhdGVPcHRpb25zLFxuICAgICAgICBwbHVnaW5zOiBwbHVnaW5zLmNvbmNhdChkYXRlT3B0aW9ucy5wbHVnaW5zIHx8IFtdKSxcbiAgICAgICAgcHJlcHJvY2Vzc29yczogW1xuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQkVGT1JFIGFsbCBvdGhlciBwcmVwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnByZXByb2Nlc3NvcnMsXG4gICAgICAgICAgLi4uZGF0ZU9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgICAgcG9zdHByb2Nlc3NvcnM6IFtcbiAgICAgICAgICAuLi5kYXRlT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgICAvLyBBbHdheXMgcHV0IGl0IEFGVEVSIGFsbCBvdGhlciBwb3N0cHJvY2Vzc29yc1xuICAgICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgUmVxdWlyZWQ8TWFza2l0b09wdGlvbnM+O1xuXG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGltZU1hc2tPcHRpb25zKHRpbWVQbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudGltZVBsYWNlaG9sZGVyICE9PSB0aW1lUGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMudGltZVBsYWNlaG9sZGVyID0gdGltZVBsYWNlaG9sZGVyO1xuXG4gICAgICBjb25zdCB0aW1lT3B0aW9ucyA9IG1hc2tpdG9UaW1lT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgIG1vZGU6IHRoaXMudGltZVBhdHRlcm4udG9VcHBlckNhc2UoKSBhcyBNYXNraXRvVGltZU1vZGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBwbHVnaW5zLCAvLyBwbHVnaW5zIGtlZXBzIGNhcmV0IGluc2lkZSBhY3R1YWwgdmFsdWUgYW5kIHJlbW92ZSBwbGFjZWhvbGRlciBvbiBibHVyXG4gICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9uc1xuICAgICAgICAvLyBwYXNzICd0cnVlJyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gYWRkIHBsdWdpbiB0byBoaWRlIHBsYWNlaG9sZGVyIHdoZW4gaW5wdXQgaXMgbm90IGZvY3VzZWRcbiAgICAgIH0gPSBtYXNraXRvV2l0aFBsYWNlaG9sZGVyKHRoaXMudGltZVBsYWNlaG9sZGVyLCB0cnVlKTtcblxuICAgICAgdGhpcy5tYXNraXRvVGltZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRpbWVPcHRpb25zLFxuICAgICAgICBwbHVnaW5zOiBwbHVnaW5zLmNvbmNhdCh0aW1lT3B0aW9ucy5wbHVnaW5zIHx8IFtdKSxcbiAgICAgICAgcHJlcHJvY2Vzc29yczogW1xuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQkVGT1JFIGFsbCBvdGhlciBwcmVwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnByZXByb2Nlc3NvcnMsXG4gICAgICAgICAgLi4udGltZU9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgICAgcG9zdHByb2Nlc3NvcnM6IFtcbiAgICAgICAgICAuLi50aW1lT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgICAvLyBBbHdheXMgcHV0IGl0IEFGVEVSIGFsbCBvdGhlciBwb3N0cHJvY2Vzc29yc1xuICAgICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgUmVxdWlyZWQ8TWFza2l0b09wdGlvbnM+O1xuXG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLSByZWFkb25seSAtLT5cbkBpZiAocmVhZG9ubHkpIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgPlxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgIH1cblxuICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seSBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICAgIDxpb24tdGV4dD57eyBmb3JtQ29udHJvbC52YWx1ZSB8IGRhdGVGb3JtYXQ6IHsgcGF0dGVybjogZGlzcGxheVBhdHRlcm4gfSB9fTwvaW9uLXRleHQ+XG5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBoaW50cyAtLT5cbiAgICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiZm9ybUNvbnRyb2wuaW52YWxpZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWhpbnQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG59IEBlbHNlIHtcbiAgPCEtLSB3cml0YWJsZSArIHRpbWUgLS0+XG4gIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nIHt7IGFwcGVhcmFuY2UgfX1cIj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nIG5vLXdyYXBcIj5cbiAgICAgIDwhLS0gZGF5IC0tPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJkYXkgaW9uLW5vLXBhZGRpbmdcIiBbc3R5bGUuLS1idXR0b24tY291bnRdPVwiY2xlYXJhYmxlID8gMiA6IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCJcbiAgICAgICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWludmFsaWRdPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiAoZGF0ZUNvbnRyb2wuaW52YWxpZCB8fCBmb3JtQ29udHJvbC5pbnZhbGlkKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIl9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKCRldmVudCwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAgIChmb2N1cyk9XCJfb3BlbkRhdGVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gRGVza3RvcCAtLT5cbiAgICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1pbnB1dC1lbGVtZW50XCJcbiAgICAgICAgICAgICAgW21hc2tpdG9dPVwibWFza2l0b0RhdGVPcHRpb25zXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRhdGVDb250cm9sXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGVQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChibHVyKT1cIl9vbkJsdXIoKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwib3BlbkRhdGVQaWNrZXIoJGV2ZW50LCBkYXRlUGlja2VyKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lc2NhcGUpPVwiX3ByZXZlbnRFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlUGlja2VyXCJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZVBpY2tlckZpbHRlclwiXG4gICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIl9vbkRhdGVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPCEtLSBNb2JpbGUgLS0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgI21hdElucHV0XG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbCBtZGMtdGV4dC1maWVsZF9faW5wdXRcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZGF0ZUNvbnRyb2xcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlUGlja2VyXCJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZVBpY2tlckZpbHRlclwiXG4gICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIl9vbkRhdGVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKCRldmVudCwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+e3sgbW9iaWxlID8gJ2RhdGVfcmFuZ2UnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKGNsZWFyYWJsZSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICBbaGlkZGVuXT1cImZvcm1Db250cm9sLmRpc2FibGVkIHx8ICFmb3JtQ29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPCEtLSBUaGUgZGF0ZSBwaWNrZXIgLS0+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZVBpY2tlciBbdG91Y2hVaV09XCJtb2JpbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbc3RhcnRBdF09XCJzdGFydERhdGVcIj5cbiAgICAgICAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgICAgICAgQGlmIChtb2JpbGUpIHtcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxuICAgICAgICAgICAgICA8IS0tIENhbmNlbCBidXR0b24gLS0+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIG1hdERhdGVwaWNrZXJDYW5jZWw+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICA8IS0tIEFwcGx5IGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7IHRpbWVDb250cm9sLnZhbHVlIHx8ICgnQ09NTU9OLlRJTUUnIHwgdHJhbnNsYXRlKSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiZW5kXCIgbmFtZT1cImNoZXZyb24tZm9yd2FyZFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICA8L2lvbi1jb2w+XG5cbiAgICAgIDwhLS0gaG91ciAtLT5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaG91ciBpb24tbm8tcGFkZGluZ1wiIFtzdHlsZS4tLWJ1dHRvbi1jb3VudF09XCIhY29tcGFjdCA/IDEgOiAwXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiXG4gICAgICAgICAgW2NsYXNzLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkXT1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgKHRpbWVDb250cm9sLmludmFsaWQgfHwgZm9ybUNvbnRyb2wuaW52YWxpZClcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5USU1FPC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmICghbW9iaWxlKSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgI21hdElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRpbWVDb250cm9sXCJcbiAgICAgICAgICAgICAgW21hc2tpdG9dPVwibWFza2l0b1RpbWVPcHRpb25zXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtaW5wdXQtZWxlbWVudFwiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0aW1lUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cIm9wZW5UaW1lUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZXNjYXBlKT1cIl9wcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChibHVyKT1cIl9vbkJsdXIoKVwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleCAhPT0gdW5kZWZpbmVkID8gdGFiaW5kZXggKyAxIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgI21hdElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbCBtZGMtdGV4dC1maWVsZF9faW5wdXRcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGltZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX29wZW5UaW1lUGlja2VySWZNb2JpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gSGlkZSB0aGUgZmluYWwgKGhpZGRlbikgaW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRpbWVDb250cm9sXCJcbiAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtuZ3hUaW1lcGlja2VyXT1cInRpbWVQaWNrZXJcIlxuICAgICAgICAgICAgW2Zvcm1hdF09XCIyNFwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICBAaWYgKCFjb21wYWN0ICYmICFtb2JpbGUpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVGltZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfSBAZWxzZSBpZiAoIWNvbXBhY3QgJiYgbW9iaWxlKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX29wZW5UaW1lUGlja2VySWZNb2JpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hY2Nlc3NfdGltZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXJcbiAgICAgICAgICAgICN0aW1lUGlja2VyXG4gICAgICAgICAgICBbQC5kaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICh0aW1lU2V0KT1cIl9vblRpbWVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbRVNDXT1cIiFtb2JpbGVcIlxuICAgICAgICAgICAgW2RlZmF1bHRUaW1lXT1cIicwMDowMCdcIlxuICAgICAgICAgICAgW2NhbmNlbEJ0blRtcGxdPVwidGltZVBpY2tlckNhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICBbY29uZmlybUJ0blRtcGxdPVwidGltZVBpY2tlck9rQnV0dG9uXCJcbiAgICAgICAgICAgIFtwcmV2ZW50T3ZlcmxheUNsaWNrXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICBbZW5hYmxlS2V5Ym9hcmRJbnB1dF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZUFuaW1hdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICA+PC9uZ3gtbWF0ZXJpYWwtdGltZXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLWdyaWQ+XG5cbiAgPCEtLSBEbyB0aGUgc2FtZSBhcyBNYXRGb3JtRmllbGQgc2luY2UgYW5ndWxhciAxNSAoc2VlIGNvbXBvbmVudCBzb3VyY2UpLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlclwiXG4gICAgW2NsYXNzLm1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ25dPVwic3Vic2NyaXB0U2l6aW5nID09PSAnZml4ZWQnXCJcbiAgICBbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC1keW5hbWljLXNpemVdPVwic3Vic2NyaXB0U2l6aW5nID09PSAnZHluYW1pYydcIlxuICA+XG4gICAgQGlmIChmb3JtQ29udHJvbC50b3VjaGVkICYmIGZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgIDwhLS0gZXJyb3JzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvci13cmFwcGVyXCI+XG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuZXJyb3JzIHwgbWFwS2V5cyB8IGFycmF5Rmlyc3Q7IGFzIGVycm9yS2V5KSB7XG4gICAgICAgICAgQHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgICAgIEBjYXNlICgncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ3ZhbGlkRGF0ZScpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfVElNRTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdkYXRlSXNBZnRlcicpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQWZ0ZXIgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2RhdGVJc0JlZm9yZScpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLmRhdGVJc0JlZm9yZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZGF0ZVJhbmdlJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdkYXRlTWF4RHVyYXRpb24nKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdkYXRlTWluRHVyYXRpb24nKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01JTl9EVVJBVElPTjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdtc2cnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRFcnJvclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPCEtLSBoaW50cyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG48IS0tIGNhbmNlbCBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI3RpbWVQaWNrZXJDYW5jZWxCdXR0b24+XG4gIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiPlxuICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gIDwvaW9uLWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gY29uZmlybSBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI3RpbWVQaWNrZXJPa0J1dHRvbj5cbiAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fVkFMSURBVEU8L2lvbi1sYWJlbD5cbiAgPC9pb24tYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0RXJyb3JUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yLFttYXRFcnJvcl1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEhpbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSksW21hdEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -77,6 +77,7 @@ export class IsSelectedPipe extends AbstractSelectionModelPipe {
77
77
  return selection.isSelected(value);
78
78
  }
79
79
  _filterSelectionChange(selectionChange, value) {
80
+ console.log('TODO isSelectedPipe._filterSelectionChange()', selectionChange, value);
80
81
  return selectionChange?.added?.includes(value) || selectionChange?.removed?.includes(value) || false;
81
82
  }
82
83
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IsSelectedPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
@@ -176,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
176
177
  pure: false,
177
178
  }]
178
179
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvc2VsZWN0aW9uLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFLdEMsTUFBTSxPQUFnQiwwQkFBMEI7SUFTZDtJQVJ0QixPQUFPLEdBQU0sU0FBUyxDQUFDO0lBRXpCLGNBQWMsR0FBK0IsSUFBSSxDQUFDO0lBQ2xELFVBQVUsQ0FBSTtJQUNkLFNBQVMsQ0FBSTtJQUNYLHlCQUF5QixHQUFHLElBQUksQ0FBQztJQUNuQyxtQkFBbUIsQ0FBMkI7SUFFdEQsWUFBZ0MsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7SUFBRyxDQUFDO0lBRTNELFNBQVMsQ0FBQyxTQUE4QixFQUFFLEtBQVMsRUFBRSxJQUFRO1FBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxjQUFjLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUVoQyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7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QUksRUFBRSxLQUFLO2lCQUNaOztBQWVELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSwwQkFBeUM7SUFDbEYsWUFBWSxJQUF1QjtRQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFDUyxVQUFVLENBQUMsU0FBOEI7UUFDakQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7d0dBUFUscUJBQXFCO3NHQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBSmpDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZXF1YWxzIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuQFBpcGUoe1xuICBuYW1lOiAnYWJzdHJhY3Qtc2VsZWN0aW9uJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8VCwgUiwgTyA9IHZvaWQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIF9yZXN1bHQ6IFIgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0VmFsdWU6IFQ7XG4gIHByaXZhdGUgX2xhc3RPcHRzOiBPO1xuICBwcm90ZWN0ZWQgX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IHRydWU7XG4gIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlczogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU/OiBULCBvcHRzPzogTyk6IFIge1xuICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFzayBhbm90aGVyIHRpbWUgZm9yIHRoZSBzYW1lIGZvcm0gYW5kIG9wdHMsIHJldHVybiB0aGUgbGFzdCB2YWx1ZVxuICAgIGlmIChzZWxlY3Rpb24gPT09IHRoaXMuX2xhc3RTZWxlY3Rpb24gJiYgdmFsdWUgPT09IHRoaXMuX2xhc3RWYWx1ZSAmJiBlcXVhbHMob3B0cywgdGhpcy5fbGFzdE9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIHN0b3JlIHRoZSBxdWVyeSwgaW4gY2FzZSBpdCBjaGFuZ2VzXG4gICAgdGhpcy5fbGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAgIC8vIHN0b3JlIHRoZSBwYXJhbXMsIGluIGNhc2UgdGhleSBjaGFuZ2VcbiAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYXN0T3B0cyA9IG9wdHM7XG5cbiAgICAvLyBzZXQgdGhlIHJlc3VsdFxuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3RyYW5zZm9ybShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdWJzY3JpcHRpb24sIGNsZWFuIGl0XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlcyBldmVudFxuICAgIGlmICh0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3N1YnNjcmliZShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiwgdmFsdWU6IFQsIG9wdHM/OiBPKTogU3Vic2NyaXB0aW9uIHtcbiAgICAvLyBzdWJzY3JpYmUgdG8gdmFsdWVDaGFuZ2VzIGV2ZW50XG4gICAgcmV0dXJuIHNlbGVjdGlvbi5jaGFuZ2VkLnBpcGUoZmlsdGVyKChzZWxlY3Rpb25DaGFuZ2UpID0+IHRoaXMuX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2UsIHZhbHVlLCBvcHRzKSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdHJhbnNmb3JtKHNlbGVjdGlvbiwgdmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX3Jlc3VsdCAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIGFueSBleGlzdGluZyBzdWJzY3JpcHRpb24gdG8gY2hhbmdlIGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIF9kaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZXMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogUjtcblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaXNTZWxlY3RlZCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBJc1NlbGVjdGVkUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPGFueSwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNTZWxlY3RlZCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZT8uYWRkZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBzZWxlY3Rpb25DaGFuZ2U/LnJlbW92ZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc05vdEVtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTm90RW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaGFzVmFsdWUoKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc0VtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzRW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNFbXB0eSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NlbGVjdGlvbkxlbmd0aCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25MZW5ndGhQaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgbnVtYmVyPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKF9yZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoX3JlZik7XG4gIH1cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm0oc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc011bHRpcGxlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTXVsdGlwbGVTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICAgIHRoaXMuX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNNdWx0aXBsZVNlbGVjdGlvbigpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzU2luZ2xlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzU2luZ2xlU2VsZWN0aW9uUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPHZvaWQsIGJvb2xlYW4+IHtcbiAgY29uc3RydWN0b3IoX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihfcmVmKTtcbiAgICB0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXNlbGVjdGlvbi5pc011bHRpcGxlU2VsZWN0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvc2VsZWN0aW9uLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFLdEMsTUFBTSxPQUFnQiwwQkFBMEI7SUFTZDtJQVJ0QixPQUFPLEdBQU0sU0FBUyxDQUFDO0lBRXpCLGNBQWMsR0FBK0IsSUFBSSxDQUFDO0lBQ2xELFVBQVUsQ0FBSTtJQUNkLFNBQVMsQ0FBSTtJQUNYLHlCQUF5QixHQUFHLElBQUksQ0FBQztJQUNuQyxtQkFBbUIsQ0FBMkI7SUFFdEQsWUFBZ0MsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7SUFBRyxDQUFDO0lBRTNELFNBQVMsQ0FBQyxTQUE4QixFQUFFLEtBQVMsRUFBRSxJQUFRO1FBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxjQUFjLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUVoQyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7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RkFBdkIsdUJBQXVCO2tCQUpuQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxLQUFLO2lCQUNaOztBQWVELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSwwQkFBeUM7SUFDbEYsWUFBWSxJQUF1QjtRQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFDUyxVQUFVLENBQUMsU0FBOEI7UUFDakQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7d0dBUFUscUJBQXFCO3NHQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBSmpDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZXF1YWxzIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuQFBpcGUoe1xuICBuYW1lOiAnYWJzdHJhY3Qtc2VsZWN0aW9uJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8VCwgUiwgTyA9IHZvaWQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIF9yZXN1bHQ6IFIgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0VmFsdWU6IFQ7XG4gIHByaXZhdGUgX2xhc3RPcHRzOiBPO1xuICBwcm90ZWN0ZWQgX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IHRydWU7XG4gIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlczogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU/OiBULCBvcHRzPzogTyk6IFIge1xuICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFzayBhbm90aGVyIHRpbWUgZm9yIHRoZSBzYW1lIGZvcm0gYW5kIG9wdHMsIHJldHVybiB0aGUgbGFzdCB2YWx1ZVxuICAgIGlmIChzZWxlY3Rpb24gPT09IHRoaXMuX2xhc3RTZWxlY3Rpb24gJiYgdmFsdWUgPT09IHRoaXMuX2xhc3RWYWx1ZSAmJiBlcXVhbHMob3B0cywgdGhpcy5fbGFzdE9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIHN0b3JlIHRoZSBxdWVyeSwgaW4gY2FzZSBpdCBjaGFuZ2VzXG4gICAgdGhpcy5fbGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAgIC8vIHN0b3JlIHRoZSBwYXJhbXMsIGluIGNhc2UgdGhleSBjaGFuZ2VcbiAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYXN0T3B0cyA9IG9wdHM7XG5cbiAgICAvLyBzZXQgdGhlIHJlc3VsdFxuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3RyYW5zZm9ybShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdWJzY3JpcHRpb24sIGNsZWFuIGl0XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlcyBldmVudFxuICAgIGlmICh0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3N1YnNjcmliZShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiwgdmFsdWU6IFQsIG9wdHM/OiBPKTogU3Vic2NyaXB0aW9uIHtcbiAgICAvLyBzdWJzY3JpYmUgdG8gdmFsdWVDaGFuZ2VzIGV2ZW50XG4gICAgcmV0dXJuIHNlbGVjdGlvbi5jaGFuZ2VkLnBpcGUoZmlsdGVyKChzZWxlY3Rpb25DaGFuZ2UpID0+IHRoaXMuX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2UsIHZhbHVlLCBvcHRzKSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdHJhbnNmb3JtKHNlbGVjdGlvbiwgdmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX3Jlc3VsdCAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIGFueSBleGlzdGluZyBzdWJzY3JpcHRpb24gdG8gY2hhbmdlIGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIF9kaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZXMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogUjtcblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaXNTZWxlY3RlZCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBJc1NlbGVjdGVkUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPGFueSwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNTZWxlY3RlZCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ1RPRE8gaXNTZWxlY3RlZFBpcGUuX2ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpJywgc2VsZWN0aW9uQ2hhbmdlLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZT8uYWRkZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBzZWxlY3Rpb25DaGFuZ2U/LnJlbW92ZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc05vdEVtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTm90RW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaGFzVmFsdWUoKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc0VtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzRW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNFbXB0eSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NlbGVjdGlvbkxlbmd0aCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25MZW5ndGhQaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgbnVtYmVyPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKF9yZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoX3JlZik7XG4gIH1cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm0oc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc011bHRpcGxlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTXVsdGlwbGVTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICAgIHRoaXMuX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNNdWx0aXBsZVNlbGVjdGlvbigpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzU2luZ2xlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzU2luZ2xlU2VsZWN0aW9uUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPHZvaWQsIGJvb2xlYW4+IHtcbiAgY29uc3RydWN0b3IoX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihfcmVmKTtcbiAgICB0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXNlbGVjdGlvbi5pc011bHRpcGxlU2VsZWN0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
@@ -4531,6 +4531,7 @@ class IsSelectedPipe extends AbstractSelectionModelPipe {
4531
4531
  return selection.isSelected(value);
4532
4532
  }
4533
4533
  _filterSelectionChange(selectionChange, value) {
4534
+ console.log('TODO isSelectedPipe._filterSelectionChange()', selectionChange, value);
4534
4535
  return selectionChange?.added?.includes(value) || selectionChange?.removed?.includes(value) || false;
4535
4536
  }
4536
4537
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IsSelectedPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
@@ -8211,6 +8212,8 @@ class MatDate {
8211
8212
  if (value) {
8212
8213
  // Force '0' for empty month (otherwise moment will use the current month)
8213
8214
  value = value
8215
+ // Keep digits and slashes
8216
+ .replace(/[^\d/]/g, '')
8214
8217
  .replace('//', '/0/')
8215
8218
  // Force '0' for empty year (otherwise moment will use the current year)
8216
8219
  .replace(/\/$/, '/0');
@@ -8232,9 +8235,10 @@ class MatDate {
8232
8235
  if (this.formControl.value !== formControlValue) {
8233
8236
  // DEBUG
8234
8237
  //console.debug('[mat-date] Emit new value: ' + dateStr);
8235
- // Apply to form control. => Will call writeValue()
8236
- // NOT NEED, because a formControl should NOT be used by multiple fields
8237
- //this.formControl.setValue(dateStr, {emitEvent: false})
8238
+ if (date?.isValid()) {
8239
+ // Update formControl value (will update datePicker also)
8240
+ this.formControl.setValue(formControlValue, { emitEvent: false });
8241
+ }
8238
8242
  // Changes comes from inside function: use the callback
8239
8243
  this._onChangeCallback(formControlValue);
8240
8244
  // Check if need to update controls
@@ -8786,6 +8790,8 @@ class MatDateTime {
8786
8790
  dateStr =
8787
8791
  dateStr &&
8788
8792
  dateStr
8793
+ // Keep digits and slashes
8794
+ .replace(/[^\d/]/g, '')
8789
8795
  .replace('//', '/0/')
8790
8796
  // Force '0' for empty year (otherwise moment will use the current year)
8791
8797
  .replace(/\/$/, '/0');
@@ -8814,9 +8820,10 @@ class MatDateTime {
8814
8820
  if (this._formControl.value !== dateStr) {
8815
8821
  // DEBUG
8816
8822
  //console.debug('[mat-date-time] Emit new value: ' + dateStr);
8817
- // Apply to form control. => Will call writeValue()
8818
- // NOT NEED, because a formControl should NOT be used by multiple fields
8819
- //this.formControl.setValue(dateStr, {emitEvent: false});
8823
+ if (value?.isValid()) {
8824
+ // Update formControl value (will update datePicker also)
8825
+ this.formControl.setValue(dateStr, { emitEvent: false });
8826
+ }
8820
8827
  // Changes comes from inside function: use the callback
8821
8828
  this._onChangeCallback(dateStr);
8822
8829
  // Check if need to update controls
@@ -9252,9 +9259,10 @@ class MatDateShort {
9252
9259
  if (this.formControl.value !== dateStr) {
9253
9260
  // DEBUG
9254
9261
  //console.debug('[mat-date-time] Emit new value: ' + dateStr);
9255
- // Apply to form control. => Will call writeValue()
9256
- // NOT NEED, because a formControl should NOT be used by multiple fields
9257
- //this.formControl.setValue(dateStr, {emitEvent: false});
9262
+ if (date?.isValid()) {
9263
+ // Update formControl value (will update datePicker also)
9264
+ this.formControl.setValue(dateStr, { emitEvent: false });
9265
+ }
9258
9266
  // Changes comes from inside function: use the callback
9259
9267
  this._onChangeCallback(dateStr);
9260
9268
  // Check if need to update controls