@fundamental-ngx/core 0.52.2-rc.2 → 0.52.2-rc.21

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.
Files changed (33) hide show
  1. package/dialog/base/dialog-ref-base.class.d.ts +1 -1
  2. package/esm2022/datetime-picker/datetime-picker.component.mjs +9 -5
  3. package/esm2022/dialog/base/dialog-ref-base.class.mjs +4 -2
  4. package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +154 -38
  5. package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +45 -17
  6. package/esm2022/grid-list/models/grid-list-selection.models.mjs +10 -1
  7. package/esm2022/multi-combobox/base-multi-combobox.class.mjs +1 -1
  8. package/esm2022/multi-combobox/multi-announcer/multi-announcer.directive.mjs +7 -12
  9. package/esm2022/multi-combobox/multi-combobox.component.mjs +10 -5
  10. package/esm2022/shared/interfaces/popover-position.mjs +19 -1
  11. package/esm2022/slider/slider.component.mjs +3 -3
  12. package/esm2022/wizard/wizard.component.mjs +12 -12
  13. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +8 -4
  14. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -1
  16. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-grid-list.mjs +203 -50
  18. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +14 -14
  20. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-shared.mjs +19 -1
  22. package/fesm2022/fundamental-ngx-core-shared.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-slider.mjs +2 -2
  24. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-core-wizard.mjs +11 -11
  26. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  27. package/grid-list/components/grid-list/grid-list.component.d.ts +20 -0
  28. package/grid-list/components/grid-list-item/grid-list-item.component.d.ts +7 -2
  29. package/grid-list/models/grid-list-selection.models.d.ts +8 -0
  30. package/multi-combobox/base-multi-combobox.class.d.ts +1 -1
  31. package/multi-combobox/multi-combobox.component.d.ts +9 -2
  32. package/package.json +3 -3
  33. package/shared/interfaces/popover-position.d.ts +17 -0
@@ -23,7 +23,7 @@ export declare class DialogRefBase<T, P = any> {
23
23
  /** @hidden */
24
24
  constructor();
25
25
  /**
26
- * Closes the dialog and passes the argument to the afterClosed observable.
26
+ * Closes the dialog and emits the result to the afterClosed observable.
27
27
  * @param result Value passed back to the observable as a result.
28
28
  */
29
29
  close(result?: P): void;
@@ -384,10 +384,14 @@ export class DatetimePickerComponent {
384
384
  * Method that is triggered when 'OK' button is pressed.
385
385
  */
386
386
  submit() {
387
- // marking date & time as not null, errors will be caught below
388
- const currentDate = this._tempDate;
387
+ // Initialize date and time values, defaulting to the current date if invalid
388
+ let currentDate = this._tempDate;
389
389
  let currentTime = this._tempTime;
390
- if (!currentTime) {
390
+ // Initialize date and time values, defaulting to the current date if invalid
391
+ if (!this._tempDate || !this._dateTimeAdapter.isValid(this._tempDate)) {
392
+ currentDate = this._dateTimeAdapter.today();
393
+ }
394
+ if (!this._tempTime || !this._dateTimeAdapter.isValid(this._tempTime)) {
391
395
  currentTime = this._dateTimeAdapter.today();
392
396
  }
393
397
  try {
@@ -518,7 +522,7 @@ export class DatetimePickerComponent {
518
522
  }
519
523
  /** @hidden */
520
524
  _parseDate(date) {
521
- return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);
525
+ return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateTimeInput);
522
526
  }
523
527
  /** @hidden */
524
528
  _setTempDateTime() {
@@ -738,4 +742,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
738
742
  }], disableFunction: [{
739
743
  type: Input
740
744
  }] } });
741
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUNILGlCQUFpQixFQUlqQixrQkFBa0IsRUFDckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFtQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3JHLE9BQU8sRUFBbUIseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxN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RUFBRSxLQUFLLEVBQUU7Z0JBYS9DLGtCQUFrQjtzQkFIakIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDOUIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELGFBQWE7c0JBSFosU0FBUzt1QkFBQyx3QkFBd0IsRUFBRTt3QkFDakMsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQUtnQixvQkFBb0I7c0JBRHBDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUtmLGVBQWU7c0JBRC9CLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWlHM0IsZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyWWVhckdyaWQsXG4gICAgRGF5c09mV2VlayxcbiAgICBGZENhbGVuZGFyVmlldyxcbiAgICBGZENhbGVuZGFyVmlld0VudW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRm9ybU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFNlZ21lbnRlZEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zZWdtZW50ZWQtYnV0dG9uJztcbmltcG9ydCB7IFRpbWVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGltZSc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci5tb2RlbCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBGRF9EQVRFVElNRV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRyB9IGZyb20gJy4vdG9rZW5zJztcblxuLyoqXG4gKiBUaGUgZGF0ZXRpbWUgcGlja2VyIGNvbXBvbmVudCBpcyBhbiBvcGluaW9uYXRlZCBjb21wb3NpdGlvbiBvZiB0aGUgZmQtcG9wb3ZlcixcbiAqIGZkLWNhbGVuZGFyIGFuZCBmZC10aW1lIGNvbXBvbmVudHMgdG8gYWNjb21wbGlzaCB0aGUgVUkgcGF0dGVybiBmb3IgcGlja2luZyBhIGRhdGUgYW5kIHRpbWUuXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtdGltZS1waWNrZXIgWyhuZ01vZGVsKV09XCJkYXRlVGltZVwiPjwvZmQtZGF0ZS10aW1lLXBpY2tlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGV0aW1lLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogRGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBQb3BvdmVyU2VydmljZSxcbiAgICAgICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLWRhdGV0aW1lJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgICAgIElucHV0R3JvdXBNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgU2VnbWVudGVkQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBUaW1lTW9kdWxlLFxuICAgICAgICBCYXJNb2R1bGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD5cbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIERhdGVUaW1lUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBpbm5lciBpbnB1dCBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogRGVmaW5lIGEgY3VzdG9tIGRhdGV0aW1lIGZvcm1hdC4gQ2FuIGJlIGEgc3RyaW5nIGZvciBEYXlqc0RhdGV0aW1lQWRhcHRlciBvciBvYmplY3QgZm9yIEZkRGF0ZXRpbWVBZGFwdGVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgbWVyaWRpYW4gKGFtL3BtKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3Mgc2Vjb25kcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIG1pbnV0ZXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TWludXRlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIGhvdXJzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gcGVyZm9ybSB2aXN1YWwgdmFsaWRhdGlvbiBvbiB0aGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudCBzZWxlY3RlZCBkYXRlLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBpcyBvcGVuLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGRpc2FibGVGdW5jdGlvbiBmb3IgdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWsgPSAxO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKiBXaGV0aGVyIGEgbnVsbCBpbnB1dCBpcyBjb25zaWRlcmVkIHZhbGlkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dOdWxsID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCB3aGVuIHNldCB0byB0cnVlIHRpbWUgY29tcG9uZW50IHdpbGwgdXNlIDIgZGlnaXRzIGZvciBlYWNoIG51bWJlci5cbiAgICAgKiBGb3IgZXhhbXBsZSA5IHdpbGwgYmVjb21lIDA5XG4gICAgICogYnV0IDEyIHdpbGwgYmUga2VwdCBhcyAxMi5cbiAgICAgKiBPbmx5IHVzZXMgYnkgdGltZSBjb21wb25lbnQgYW5kIGRvZXMgbm90IGNoYW5nZSBpbnB1dCBmb3JtYXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGtlZXBUd29EaWdpdHNUaW1lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9faXRlbS0tbGVnZW5kLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRmREYXRlIG9iamVjdCBhcyBhIHBhcmFtZXRlci4gZXg6XG4gICAgICogYHJ1bGU6IChmZERhdGU6IEZkRGF0ZSkgPT4gZmREYXRlLmdldERheSgpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lhbERheXNSdWxlczogU3BlY2lhbERheVJ1bGU8RD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBkYXRldGltZSBwaWNrZXIgZm9vdGVyIHdpdGggT0svY2FuY2VsIGJ1dHRvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93Rm9vdGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldmVudCBwYWdlIHNjcm9sbGluZyB3aGVuIGZvY3VzaW5nIGRhdGUgcGlja2VyIGlucHV0IGZpZWxkIGFmdGVyIGNhbGVuZGFyIGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byByZW5kZXIgZGF0ZXRpbWUgcGlja2VyIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTW9iaWxlIG1vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBsYW5kc2NhcGUgbW9kZSwgaXQgYWxzbyBhZGRzIGNsb3NlIGJ1dHRvbiBvbiByaWdodCBzaWRlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBwb3J0cmFpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZGF0ZSBjaGFuZ2VzLiBUaGlzIGNhbiBiZSBhIHRpbWUgb3IgZGF5IGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXkgY2hhbmdlcyBmcm9tIHRoZSBjYWxlbmRhci4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjYWxlbmRhckNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGltZSBjaGFuZ2VzIGZyb20gdGhlIHRpbWUgY29tcG9uZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRpbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcG9wb3ZlciBjbG9zZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25DbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRlcGlja2VyIGNoYW5nZXMgaXQncyBcInRvdWNoZWRcIiBzdGF0ZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0b3VjaGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZW4gZGF0ZXRpbWUgaW5wdXQgaXMgaW4gaW52YWxpZCBzdGF0ZS4gKi9cbiAgICBnZXQgaXNJbnZhbGlkRGF0ZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ICYmIHRoaXMuX3RvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBjYWxlbmRhciBjb21wb25lbnQuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSBzZXQgX2NhbGVuZGFyQ21wKGNhbGVuZGFyOiBDYWxlbmRhckNvbXBvbmVudDxEPikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICBjYWxlbmRhcj8uaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCA9IGNhbGVuZGFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdmb3JtTWVzc2FnZVRlbXBsYXRlJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtTWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdwaWNrZXJUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIG9mIHRoZSBpbnB1dCBmaWVsZC4gSW50ZXJuYWwgdXNlLlxuICAgICAqIEZvciBwcm9ncmFtbWF0aWMgc2VsZWN0aW9uLCB1c2UgdHdvLXdheSBiaW5kaW5nIG9uIHRoZSBkYXRlIGlucHV0LlxuICAgICAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0ludmFsaWREYXRlSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgVGltZSBvYmplY3QgZm9yIHVzZSBiZWZvcmUgJ09LJyBpcyBwcmVzc2VkLiBJbnRlcm5hbCB1c2UuICovXG4gICAgX3RlbXBUaW1lOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgQ2FsZW5kYXJEYXkgb2JqZWN0IGZvciB1c2UgYmVmb3JlICdPSycgaXMgcHJlc3NlZC4gSW50ZXJuYWwgdXNlLiAqL1xuICAgIF90ZW1wRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXJpZGlhbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5SG91cnM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZSBvciB0aW1lIGluIG1vYmlsZSBtb2RlICovXG4gICAgX2Rpc3BsYXlUeXBlOiAnZGF0ZScgfCAndGltZScgPSAnZGF0ZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxlbmRhclBlbmRpbmdEYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2UgPSBpbmplY3QoRm9jdXNUcmFwU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGVDb21wb25lbnRSZWY6IE51bGxhYmxlPENvbXBvbmVudFJlZjxEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPj4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b3VjaGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9wb3BvdmVyRm9ybU1lc3NhZ2U6IFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignRGF0ZVRpbWVBZGFwdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignREFURV9USU1FX0ZPUk1BVFMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbW9kZWwgdmFsdWVcbiAgICAgICAgdGhpcy5kYXRlID0gX2RhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGZkRGF0ZSBGZERhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IEQgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFsnZGlzcGxheUhvdXJzJywgJ2Rpc3BsYXlNaW51dGVzJywgJ2Rpc3BsYXlTZWNvbmRzJywgJ21lcmlkaWFuJ10uc29tZSgoaW5wdXQpID0+IGlucHV0IGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVUaW1lT3B0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdpc09wZW4nIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0aGlzLmlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiB0aGlzLl9pbnB1dEZpZWxkRGF0ZSAhPT0gJycpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgYmluZGluZ3MgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgICAgIC8vIGlzIG5lZWRlZCB0byBwcmVwZXJseSByZWZsZWN0IGVycm9yIHN0YXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpICYmICF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXRcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBUb2dnbGVzIHRoZSBwb3BvdmVyLiAqL1xuICAgIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZXMgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KGFjdGl2ZVZpZXcpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGJsdXIgZXZlbnRzIG9uIGRhdGV0aW1lIHBpY2tlciBpbnB1dCAqL1xuICAgIGhhbmRsZU9uVG91Y2hlZChldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMudG91Y2hlZC5uZXh0KCk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyLiAqL1xuICAgIG9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBwb3BvdmVyIGFuZCByZWZyZXNoIG1vZGVsICovXG4gICAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fb25PcGVuU3RhdGVDaGFuZ2VkKHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZT8udW5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0SW52YWxpZERhdGVJbnB1dEhhbmRsZXIoaXNJbnZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9IGlzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55KSA9PiB7IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VkLlxuICAgICAqIElmIGludmFsaWQgdGltZSBtb2RlbCBpcyBkZXRlY3RlZCwgaXQgdGFrZXMgdGltZSBtb2RlbCBkYXRhIGZyb20gVGltZUNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSBkYXRlO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGltZSBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGltZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlVGltZUNoYW5nZSh0aW1lOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGltZTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gJ09LJyBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIG1hcmtpbmcgZGF0ZSAmIHRpbWUgYXMgbm90IG51bGwsIGVycm9ycyB3aWxsIGJlIGNhdWdodCBiZWxvd1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuX3RlbXBEYXRlITtcbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lID0gdGhpcy5fdGVtcFRpbWU7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VGltZSkge1xuICAgICAgICAgICAgY3VycmVudFRpbWUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0VGltZShcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnMoY3VycmVudFRpbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKGN1cnJlbnRUaW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyhjdXJyZW50VGltZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuICdDYW5jZWwnIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMb29rcyBsaWtlIG5vIG9uZSB1c2VzIGl0LiBTaG91bGQgYmUgcmVtb3ZlZD9cbiAgICAgKi9cbiAgICBmb2N1c0Fycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pZCArICctbGVmdC1hcnJvdycpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaWQgKyAnLWxlZnQtYXJyb3cnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRyYW5zZm9ybWluZyBzdHJpbmcgdG8gZGF0ZXRpbWUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dC5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFN0cjogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBpbnB1dFN0ciA/PyAnJztcbiAgICAgICAgaWYgKCFpbnB1dFN0cikge1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKGlucHV0U3RyKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlIGZvciBtb2JpbGUgbW9kZS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHZhbHVlOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uT3BlblN0YXRlQ2hhbmdlZChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICAvLyBmb2N1cyBpbnB1dCBjb250cm9sIGV2ZXJ5IHRpbWUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgIGlmICghaXNPcGVuICYmIHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRoaXMucHJldmVudFNjcm9sbE9uRm9jdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNDdXJyZW50TW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBGZERhdGVUaW1lIHBhc3NlZCBhcyBhcmcgaGFzIHByb3Blcmx5IHR5cGVzIGFuZCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKGRhdGUgPT09IG51bGwgJiYgdGhpcy5hbGxvd051bGwpIHx8IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXQoZGF0ZVRpbWU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVRpbWUgPyB0aGlzLl9mb3JtYXREYXRlVGltZShkYXRlVGltZSkgOiAnJztcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm1hdCBkYXRlIHRpbWUgZW50aXR5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVUaW1lKGRhdGVUaW1lOiBEKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZTogc3RyaW5nID0gdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdFxuICAgICAgICAgICAgPyB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLmN1c3RvbURhdGVUaW1lRm9ybWF0KVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlVGltZUlucHV0KTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX2Zvcm1NZXNzYWdlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VGVtcERhdGVUaW1lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZW1wRGF0ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgdGhpcy5fdGVtcFRpbWUgPSB0aGlzLmRhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVUaW1lT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZVRpbWVJbnB1dDtcblxuICAgICAgICAvLyBkZWZhdWx0IG1lcmlkaWFuIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX21lcmlkaWFuID1cbiAgICAgICAgICAgIHRoaXMubWVyaWRpYW4gIT0gbnVsbCA/IHRoaXMubWVyaWRpYW4gOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNEYXlQZXJpb2QoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IHNlY29uZHMgb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fZGlzcGxheVNlY29uZHMgPVxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2Vjb25kcyAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRpc3BsYXlTZWNvbmRzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNTZWNvbmRzKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtaW51dGVzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlNaW51dGVzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1pbnV0ZXMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXNwbGF5TWludXRlc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzTWludXRlcyhmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgaG91cnMgb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fZGlzcGxheUhvdXJzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUhvdXJzICE9IG51bGwgPyB0aGlzLmRpc3BsYXlIb3VycyA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc0hvdXJzKGZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcE1vYmlsZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RBVEVUSU1FX1BJQ0tFUl9NT0JJTEVfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogeyBwaWNrZXJUZW1wbGF0ZTogdGhpcy5fcGlja2VyVGVtcGxhdGUgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZiA9IHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIERhdGV0aW1lUGlja2VyTW9iaWxlQ29tcG9uZW50PEQ+LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ2JvZHknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluamVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vYmlsZSA/IGNvbnRyb2xUZW1wbGF0ZSA6IGRlc2t0b3BUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUZW1wbGF0ZT5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICBbKGlzT3BlbildPVwiaXNPcGVuXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJfb25PcGVuU3RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbZm9jdXNUcmFwcGVkXT1cInRydWVcIlxuICAgICAgICBbZm9jdXNBdXRvQ2FwdHVyZV09XCJmYWxzZVwiXG4gICAgICAgIFt0cmlnZ2Vyc109XCJbXVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHlcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImZkLWZvcm0tbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidibG9jaydcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKF9zaG93UG9wb3ZlckNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBpY2tlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxuICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAjaW5wdXRHcm91cENvbXBvbmVudFxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbYnV0dG9uXT1cInRydWVcIlxuICAgICAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImJ1dHRvbkZvY3VzYWJsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1kYXRldGltZV9fbW9iaWxlLWNvbnRyb2xdPVwibW9iaWxlXCJcbiAgICAgICAgZ2x5cGg9XCJkYXRlLXRpbWVcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtpY29uVGl0bGVdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwidG9nZ2xlUG9wb3ZlcigpXCJcbiAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dFwiXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZUlucHV0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJoYW5kbGVJbnB1dENoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCBmYWxzZSlcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVPblRvdWNoZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwibW9iaWxlICYmIG9wZW5Qb3BvdmVyKClcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmb3JtTWVzc2FnZVRlbXBsYXRlPlxuICAgIEBpZiAoX21lc3NhZ2UpIHtcbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBpZD1cImZkLWZvcm0tbWVzc2FnZVwiIFtlbWJlZGRlZF09XCJ0cnVlXCIgW3R5cGVdPVwic3RhdGVcIj5cbiAgICAgICAgICAgIHt7IF9tZXNzYWdlIH19XG4gICAgICAgIDwvZmQtZm9ybS1tZXNzYWdlPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3BpY2tlclRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fd3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9ybU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlclwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlci0tZGVza3RvcF09XCIhbW9iaWxlIHx8IChtb2JpbGUgJiYgbW9iaWxlTGFuZHNjYXBlKVwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlci0tbW9iaWxlXT1cIm1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC1zZWdtZW50ZWQtYnV0dG9uIFsobmdNb2RlbCldPVwiX2Rpc3BsYXlUeXBlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheVR5cGVEYXRlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5VHlwZVRpbWVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mZC1zZWdtZW50ZWQtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2NvbnRhaW5lclwiIFtjbGFzcy5mZC1kYXRldGltZV9fY29udGFpbmVyLS1tb2JpbGUtcG9ydHJhaXRdPVwibW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0XCI+XG4gICAgICAgICAgICA8ZmQtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgICFtb2JpbGUgJiYgX2Rpc3BsYXlUeXBlID09PSAnZGF0ZScgPyAnZmQtZGF0ZXRpbWVfX2FjdGl2ZS1kaXNwbGF5LXR5cGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdCAmJiBfZGlzcGxheVR5cGUgPT09ICdkYXRlJyA/ICdmZC1kYXRldGltZV9fbW9iaWxlLWRpc3BsYXknIDogJydcbiAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICBjYWxUeXBlPVwic2luZ2xlXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvbiB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cIl90ZW1wRGF0ZVwiXG4gICAgICAgICAgICAgICAgW2VzY2FwZUZvY3VzRnVuY3Rpb25dPVwibnVsbFwiXG4gICAgICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICAgICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwic3RhcnRpbmdEYXlPZldlZWtcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGlzVmFsaWREYXRlQ2hhbmdlKT1cInNldEludmFsaWREYXRlSW5wdXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgICAgICAgICBAaWYgKCFtb2JpbGVQb3J0cmFpdCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgICAgIDxmZC10aW1lXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICFtb2JpbGUgJiYgX2Rpc3BsYXlUeXBlID09PSAndGltZScgPyAnZmQtZGF0ZXRpbWVfX2FjdGl2ZS1kaXNwbGF5LXR5cGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXQgJiYgX2Rpc3BsYXlUeXBlID09PSAndGltZScgPyAnZmQtZGF0ZXRpbWVfX21vYmlsZS1kaXNwbGF5JyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZWxlbWVudHNBdE9uY2VdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgIFtrZWVwVHdvRGlnaXRzXT1cImtlZXBUd29EaWdpdHNUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX3RlbXBUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NwaW5uZXJCdXR0b25zXT1cInNwaW5uZXJCdXR0b25zXCJcbiAgICAgICAgICAgICAgICAgICAgW21lcmlkaWFuXT1cIl9tZXJpZGlhblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5U2Vjb25kc109XCJfZGlzcGxheVNlY29uZHNcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheU1pbnV0ZXNdPVwiX2Rpc3BsYXlNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlIb3Vyc109XCJfZGlzcGxheUhvdXJzXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlVGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9mZC10aW1lPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmICghbW9iaWxlICYmIHNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWZvb3Rlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2JhclwiIGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhX3RlbXBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVPa0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lT2tMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lQ2FuY2VsTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVDYW5jZWxMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
745
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUNILGlCQUFpQixFQUlqQixrQkFBa0IsRUFDckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFtQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3JHLE9BQU8sRUFBbUIseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxN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S04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixZQUFZO3NCQURYLE1BQU07Z0JBS1MsZ0JBQWdCO3NCQUQvQixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBS0UsY0FBYztzQkFEdEIsTUFBTTtnQkFLRSxVQUFVO3NCQURsQixNQUFNO2dCQU1FLE9BQU87c0JBRmYsTUFBTTtnQkFNRSxPQUFPO3NCQURmLE1BQU07Z0JBVUssWUFBWTtzQkFEdkIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBYS9DLGtCQUFrQjtzQkFIakIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDOUIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELGFBQWE7c0JBSFosU0FBUzt1QkFBQyx3QkFBd0IsRUFBRTt3QkFDakMsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQUtnQixvQkFBb0I7c0JBRHBDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUtmLGVBQWU7c0JBRC9CLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWlHM0IsZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyWWVhckdyaWQsXG4gICAgRGF5c09mV2VlayxcbiAgICBGZENhbGVuZGFyVmlldyxcbiAgICBGZENhbGVuZGFyVmlld0VudW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRm9ybU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFNlZ21lbnRlZEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zZWdtZW50ZWQtYnV0dG9uJztcbmltcG9ydCB7IFRpbWVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGltZSc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci5tb2RlbCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBGRF9EQVRFVElNRV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRyB9IGZyb20gJy4vdG9rZW5zJztcblxuLyoqXG4gKiBUaGUgZGF0ZXRpbWUgcGlja2VyIGNvbXBvbmVudCBpcyBhbiBvcGluaW9uYXRlZCBjb21wb3NpdGlvbiBvZiB0aGUgZmQtcG9wb3ZlcixcbiAqIGZkLWNhbGVuZGFyIGFuZCBmZC10aW1lIGNvbXBvbmVudHMgdG8gYWNjb21wbGlzaCB0aGUgVUkgcGF0dGVybiBmb3IgcGlja2luZyBhIGRhdGUgYW5kIHRpbWUuXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtdGltZS1waWNrZXIgWyhuZ01vZGVsKV09XCJkYXRlVGltZVwiPjwvZmQtZGF0ZS10aW1lLXBpY2tlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGV0aW1lLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogRGF0ZXRpbWVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBQb3BvdmVyU2VydmljZSxcbiAgICAgICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLWRhdGV0aW1lJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgICAgIElucHV0R3JvdXBNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgU2VnbWVudGVkQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBUaW1lTW9kdWxlLFxuICAgICAgICBCYXJNb2R1bGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD5cbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIERhdGVUaW1lUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBpbm5lciBpbnB1dCBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogRGVmaW5lIGEgY3VzdG9tIGRhdGV0aW1lIGZvcm1hdC4gQ2FuIGJlIGEgc3RyaW5nIGZvciBEYXlqc0RhdGV0aW1lQWRhcHRlciBvciBvYmplY3QgZm9yIEZkRGF0ZXRpbWVBZGFwdGVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgbWVyaWRpYW4gKGFtL3BtKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3Mgc2Vjb25kcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIG1pbnV0ZXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TWludXRlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIGhvdXJzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gcGVyZm9ybSB2aXN1YWwgdmFsaWRhdGlvbiBvbiB0aGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudCBzZWxlY3RlZCBkYXRlLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBpcyBvcGVuLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGRpc2FibGVGdW5jdGlvbiBmb3IgdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWsgPSAxO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKiBXaGV0aGVyIGEgbnVsbCBpbnB1dCBpcyBjb25zaWRlcmVkIHZhbGlkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dOdWxsID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCB3aGVuIHNldCB0byB0cnVlIHRpbWUgY29tcG9uZW50IHdpbGwgdXNlIDIgZGlnaXRzIGZvciBlYWNoIG51bWJlci5cbiAgICAgKiBGb3IgZXhhbXBsZSA5IHdpbGwgYmVjb21lIDA5XG4gICAgICogYnV0IDEyIHdpbGwgYmUga2VwdCBhcyAxMi5cbiAgICAgKiBPbmx5IHVzZXMgYnkgdGltZSBjb21wb25lbnQgYW5kIGRvZXMgbm90IGNoYW5nZSBpbnB1dCBmb3JtYXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGtlZXBUd29EaWdpdHNUaW1lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9faXRlbS0tbGVnZW5kLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRmREYXRlIG9iamVjdCBhcyBhIHBhcmFtZXRlci4gZXg6XG4gICAgICogYHJ1bGU6IChmZERhdGU6IEZkRGF0ZSkgPT4gZmREYXRlLmdldERheSgpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lhbERheXNSdWxlczogU3BlY2lhbERheVJ1bGU8RD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBkYXRldGltZSBwaWNrZXIgZm9vdGVyIHdpdGggT0svY2FuY2VsIGJ1dHRvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93Rm9vdGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldmVudCBwYWdlIHNjcm9sbGluZyB3aGVuIGZvY3VzaW5nIGRhdGUgcGlja2VyIGlucHV0IGZpZWxkIGFmdGVyIGNhbGVuZGFyIGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byByZW5kZXIgZGF0ZXRpbWUgcGlja2VyIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTW9iaWxlIG1vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBsYW5kc2NhcGUgbW9kZSwgaXQgYWxzbyBhZGRzIGNsb3NlIGJ1dHRvbiBvbiByaWdodCBzaWRlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBwb3J0cmFpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZGF0ZSBjaGFuZ2VzLiBUaGlzIGNhbiBiZSBhIHRpbWUgb3IgZGF5IGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXkgY2hhbmdlcyBmcm9tIHRoZSBjYWxlbmRhci4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjYWxlbmRhckNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGltZSBjaGFuZ2VzIGZyb20gdGhlIHRpbWUgY29tcG9uZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRpbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcG9wb3ZlciBjbG9zZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25DbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRlcGlja2VyIGNoYW5nZXMgaXQncyBcInRvdWNoZWRcIiBzdGF0ZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0b3VjaGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZW4gZGF0ZXRpbWUgaW5wdXQgaXMgaW4gaW52YWxpZCBzdGF0ZS4gKi9cbiAgICBnZXQgaXNJbnZhbGlkRGF0ZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ICYmIHRoaXMuX3RvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBjYWxlbmRhciBjb21wb25lbnQuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSBzZXQgX2NhbGVuZGFyQ21wKGNhbGVuZGFyOiBDYWxlbmRhckNvbXBvbmVudDxEPikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICBjYWxlbmRhcj8uaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCA9IGNhbGVuZGFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdmb3JtTWVzc2FnZVRlbXBsYXRlJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtTWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdwaWNrZXJUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIG9mIHRoZSBpbnB1dCBmaWVsZC4gSW50ZXJuYWwgdXNlLlxuICAgICAqIEZvciBwcm9ncmFtbWF0aWMgc2VsZWN0aW9uLCB1c2UgdHdvLXdheSBiaW5kaW5nIG9uIHRoZSBkYXRlIGlucHV0LlxuICAgICAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0ludmFsaWREYXRlSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgVGltZSBvYmplY3QgZm9yIHVzZSBiZWZvcmUgJ09LJyBpcyBwcmVzc2VkLiBJbnRlcm5hbCB1c2UuICovXG4gICAgX3RlbXBUaW1lOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgQ2FsZW5kYXJEYXkgb2JqZWN0IGZvciB1c2UgYmVmb3JlICdPSycgaXMgcHJlc3NlZC4gSW50ZXJuYWwgdXNlLiAqL1xuICAgIF90ZW1wRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXJpZGlhbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5SG91cnM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZSBvciB0aW1lIGluIG1vYmlsZSBtb2RlICovXG4gICAgX2Rpc3BsYXlUeXBlOiAnZGF0ZScgfCAndGltZScgPSAnZGF0ZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxlbmRhclBlbmRpbmdEYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2UgPSBpbmplY3QoRm9jdXNUcmFwU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGVDb21wb25lbnRSZWY6IE51bGxhYmxlPENvbXBvbmVudFJlZjxEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPj4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b3VjaGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9wb3BvdmVyRm9ybU1lc3NhZ2U6IFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignRGF0ZVRpbWVBZGFwdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignREFURV9USU1FX0ZPUk1BVFMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbW9kZWwgdmFsdWVcbiAgICAgICAgdGhpcy5kYXRlID0gX2RhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGZkRGF0ZSBGZERhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IEQgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFsnZGlzcGxheUhvdXJzJywgJ2Rpc3BsYXlNaW51dGVzJywgJ2Rpc3BsYXlTZWNvbmRzJywgJ21lcmlkaWFuJ10uc29tZSgoaW5wdXQpID0+IGlucHV0IGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVUaW1lT3B0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdpc09wZW4nIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0aGlzLmlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiB0aGlzLl9pbnB1dEZpZWxkRGF0ZSAhPT0gJycpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgYmluZGluZ3MgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgICAgIC8vIGlzIG5lZWRlZCB0byBwcmVwZXJseSByZWZsZWN0IGVycm9yIHN0YXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpICYmICF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXRcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBUb2dnbGVzIHRoZSBwb3BvdmVyLiAqL1xuICAgIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZXMgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KGFjdGl2ZVZpZXcpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGJsdXIgZXZlbnRzIG9uIGRhdGV0aW1lIHBpY2tlciBpbnB1dCAqL1xuICAgIGhhbmRsZU9uVG91Y2hlZChldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMudG91Y2hlZC5uZXh0KCk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyLiAqL1xuICAgIG9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBwb3BvdmVyIGFuZCByZWZyZXNoIG1vZGVsICovXG4gICAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fb25PcGVuU3RhdGVDaGFuZ2VkKHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZT8udW5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0SW52YWxpZERhdGVJbnB1dEhhbmRsZXIoaXNJbnZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9IGlzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55KSA9PiB7IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VkLlxuICAgICAqIElmIGludmFsaWQgdGltZSBtb2RlbCBpcyBkZXRlY3RlZCwgaXQgdGFrZXMgdGltZSBtb2RlbCBkYXRhIGZyb20gVGltZUNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSBkYXRlO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGltZSBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGltZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlVGltZUNoYW5nZSh0aW1lOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGltZTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gJ09LJyBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgZGF0ZSBhbmQgdGltZSB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnZhbGlkXG4gICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IHRoaXMuX3RlbXBEYXRlITtcbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lID0gdGhpcy5fdGVtcFRpbWUhO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgZGF0ZSBhbmQgdGltZSB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnZhbGlkXG4gICAgICAgIGlmICghdGhpcy5fdGVtcERhdGUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuX3RlbXBEYXRlKSkge1xuICAgICAgICAgICAgY3VycmVudERhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKSE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl90ZW1wVGltZSB8fCAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5fdGVtcFRpbWUpKSB7XG4gICAgICAgICAgICBjdXJyZW50VGltZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpITtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0VGltZShcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnMoY3VycmVudFRpbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKGN1cnJlbnRUaW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyhjdXJyZW50VGltZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuICdDYW5jZWwnIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMb29rcyBsaWtlIG5vIG9uZSB1c2VzIGl0LiBTaG91bGQgYmUgcmVtb3ZlZD9cbiAgICAgKi9cbiAgICBmb2N1c0Fycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pZCArICctbGVmdC1hcnJvdycpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaWQgKyAnLWxlZnQtYXJyb3cnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRyYW5zZm9ybWluZyBzdHJpbmcgdG8gZGF0ZXRpbWUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dC5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFN0cjogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBpbnB1dFN0ciA/PyAnJztcbiAgICAgICAgaWYgKCFpbnB1dFN0cikge1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKGlucHV0U3RyKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlIGZvciBtb2JpbGUgbW9kZS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHZhbHVlOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uT3BlblN0YXRlQ2hhbmdlZChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICAvLyBmb2N1cyBpbnB1dCBjb250cm9sIGV2ZXJ5IHRpbWUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgIGlmICghaXNPcGVuICYmIHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRoaXMucHJldmVudFNjcm9sbE9uRm9jdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNDdXJyZW50TW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBGZERhdGVUaW1lIHBhc3NlZCBhcyBhcmcgaGFzIHByb3Blcmx5IHR5cGVzIGFuZCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKGRhdGUgPT09IG51bGwgJiYgdGhpcy5hbGxvd051bGwpIHx8IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXQoZGF0ZVRpbWU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVRpbWUgPyB0aGlzLl9mb3JtYXREYXRlVGltZShkYXRlVGltZSkgOiAnJztcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm1hdCBkYXRlIHRpbWUgZW50aXR5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVUaW1lKGRhdGVUaW1lOiBEKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZTogc3RyaW5nID0gdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdFxuICAgICAgICAgICAgPyB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLmN1c3RvbURhdGVUaW1lRm9ybWF0KVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlVGltZUlucHV0KTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX2Zvcm1NZXNzYWdlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlVGltZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFRlbXBEYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGltZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVUaW1lSW5wdXQ7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtZXJpZGlhbiBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9tZXJpZGlhbiA9XG4gICAgICAgICAgICB0aGlzLm1lcmlkaWFuICE9IG51bGwgPyB0aGlzLm1lcmlkaWFuIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzRGF5UGVyaW9kKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBzZWNvbmRzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlTZWNvbmRzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVNlY29uZHMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXNwbGF5U2Vjb25kc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzU2Vjb25kcyhmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgbWludXRlcyBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9kaXNwbGF5TWludXRlcyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNaW51dGVzICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlzcGxheU1pbnV0ZXNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc01pbnV0ZXMoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IGhvdXJzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlIb3VycyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlIb3VycyAhPSBudWxsID8gdGhpcy5kaXNwbGF5SG91cnMgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNIb3Vycyhmb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBNb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IHsgcGlja2VyVGVtcGxhdGU6IHRoaXMuX3BpY2tlclRlbXBsYXRlIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9tb2JpbGVDb21wb25lbnRSZWYgPSB0aGlzLl9keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVEeW5hbWljQ29tcG9uZW50KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBjb250cm9sVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiX29uT3BlblN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwiZmFsc2VcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4gICAgPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5XG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJmZC1mb3JtLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiXG4gICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCInYmxvY2snXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChfc2hvd1BvcG92ZXJDb250ZW50cykge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwaWNrZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX21vYmlsZS1jb250cm9sXT1cIm1vYmlsZVwiXG4gICAgICAgIGdseXBoPVwiZGF0ZS10aW1lXCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheURhdGV0aW1lVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICBbaWNvblRpdGxlXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheURhdGV0aW1lVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cInRvZ2dsZVBvcG92ZXIoKVwiXG4gICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXRcIlxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVJbnB1dExhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIl9pbnB1dEZpZWxkRGF0ZVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlT25Ub3VjaGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuUG9wb3ZlcigpXCJcbiAgICAgICAgLz5cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZm9ybU1lc3NhZ2VUZW1wbGF0ZT5cbiAgICBAaWYgKF9tZXNzYWdlKSB7XG4gICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgaWQ9XCJmZC1mb3JtLW1lc3NhZ2VcIiBbZW1iZWRkZWRdPVwidHJ1ZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwaWNrZXJUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX3dyYXBwZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvcm1NZXNzYWdlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXItLWRlc2t0b3BdPVwiIW1vYmlsZSB8fCAobW9iaWxlICYmIG1vYmlsZUxhbmRzY2FwZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXItLW1vYmlsZV09XCJtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtc2VnbWVudGVkLWJ1dHRvbiBbKG5nTW9kZWwpXT1cIl9kaXNwbGF5VHlwZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRpc3BsYXlUeXBlRGF0ZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheVR5cGVUaW1lTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtc2VnbWVudGVkLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWRhdGV0aW1lX19jb250YWluZXJcIiBbY2xhc3MuZmQtZGF0ZXRpbWVfX2NvbnRhaW5lci0tbW9iaWxlLXBvcnRyYWl0XT1cIm1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdFwiPlxuICAgICAgICAgICAgPGZkLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgICAgICAhbW9iaWxlICYmIF9kaXNwbGF5VHlwZSA9PT0gJ2RhdGUnID8gJ2ZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXQgJiYgX2Rpc3BsYXlUeXBlID09PSAnZGF0ZScgPyAnZmQtZGF0ZXRpbWVfX21vYmlsZS1kaXNwbGF5JyA6ICcnXG4gICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgY2FsVHlwZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVGdW5jdGlvbl09XCJkaXNhYmxlRnVuY3Rpb24gfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJfdGVtcERhdGVcIlxuICAgICAgICAgICAgICAgIFtlc2NhcGVGb2N1c0Z1bmN0aW9uXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgIFttYXJrV2Vla2VuZHNdPVwibWFya1dlZWtlbmRzXCJcbiAgICAgICAgICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgICAgIFt5ZWFyR3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICAgICAgICAgICAgICAoYWN0aXZlVmlld0NoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChpc1ZhbGlkRGF0ZUNoYW5nZSk9XCJzZXRJbnZhbGlkRGF0ZUlucHV0SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyPlxuICAgICAgICAgICAgQGlmICghbW9iaWxlUG9ydHJhaXQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX3NlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgICAgICA8ZmQtdGltZVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAhbW9iaWxlICYmIF9kaXNwbGF5VHlwZSA9PT0gJ3RpbWUnID8gJ2ZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0ICYmIF9kaXNwbGF5VHlwZSA9PT0gJ3RpbWUnID8gJ2ZkLWRhdGV0aW1lX19tb2JpbGUtZGlzcGxheScgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICBba2VlcFR3b0RpZ2l0c109XCJrZWVwVHdvRGlnaXRzVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIl90ZW1wVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzcGlubmVyQnV0dG9uc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFttZXJpZGlhbl09XCJfbWVyaWRpYW5cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVNlY29uZHNdPVwiX2Rpc3BsYXlTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlNaW51dGVzXT1cIl9kaXNwbGF5TWludXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5SG91cnNdPVwiX2Rpc3BsYXlIb3Vyc1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZVRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvZmQtdGltZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoIW1vYmlsZSAmJiBzaG93Rm9vdGVyKSB7XG4gICAgICAgICAgICA8ZGl2IGZkLXBvcG92ZXItYm9keS1mb290ZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWRhdGV0aW1lX19iYXJcIiBmZC1iYXIgYmFyRGVzaWduPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIV90ZW1wRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lT2tMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZU9rTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZUNhbmNlbExhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lQ2FuY2VsTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -18,10 +18,12 @@ export class DialogRefBase {
18
18
  this.afterLoaded = this._afterLoaded.asObservable();
19
19
  }
20
20
  /**
21
- * Closes the dialog and passes the argument to the afterClosed observable.
21
+ * Closes the dialog and emits the result to the afterClosed observable.
22
22
  * @param result Value passed back to the observable as a result.
23
23
  */
24
24
  close(result) {
25
+ this._endClose$.next();
26
+ this._endClose$.complete();
25
27
  this._afterClosed.next(result);
26
28
  this._afterClosed.complete();
27
29
  }
@@ -37,4 +39,4 @@ export class DialogRefBase {
37
39
  this._afterLoaded.next(true);
38
40
  }
39
41
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlZi1iYXNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RpYWxvZy9iYXNlL2RpYWxvZy1yZWYtYmFzZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLHdCQUlYO0FBSkQsV0FBWSx3QkFBd0I7SUFDaEMsNkNBQWlCLENBQUE7SUFDakIsaURBQXFCLENBQUE7SUFDckIsbUVBQXVDLENBQUE7QUFDM0MsQ0FBQyxFQUpXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFJbkM7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQXNCdEIsY0FBYztJQUNkO1FBdEJBLGNBQWM7UUFDUCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQWN4QyxjQUFjO1FBQ0ssaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQUUvRCxjQUFjO1FBQ0ssaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSXJELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFVO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE1BQXVDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsTUFBTTtRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGVudW0gRkRfRElBTE9HX0RJU01JU1NfUkVBU09OIHtcbiAgICBFU0NBUEUgPSAnZXNjYXBlJyxcbiAgICBCQUNLRFJPUCA9ICdiYWNrZHJvcCcsXG4gICAgTkFWSUdBVElPTl9DSEFOR0UgPSAnbmF2aWdhdGlvbiBjaGFuZ2UnXG59XG5cbmV4cG9ydCBjbGFzcyBEaWFsb2dSZWZCYXNlPFQsIFAgPSBhbnk+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBfZW5kQ2xvc2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgKiBPbiBjbG9zZSBhICpyZXN1bHQqIGlzIHBhc3NlZCBiYWNrLiBPbiBkaXNtaXNzLCBhbiAqZXJyb3IqIGlzIHJldHVybmVkIGluc3RlYWQuXG4gICAgICovXG4gICAgcHVibGljIGFmdGVyQ2xvc2VkOiBPYnNlcnZhYmxlPFAgfCB1bmRlZmluZWQ+O1xuXG4gICAgLyoqIE9ic2VydmFibGUgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgbW9kYWwgdmlldyBpcyBpbml0aWFsaXNlZC4gKi9cbiAgICBwdWJsaWMgYWZ0ZXJMb2FkZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKiogRGF0YSBwYXNzZWQgZnJvbSB0aGUgY2FsbGluZyBjb21wb25lbnQgdG8gdGhlIGNvbnRlbnQuKi9cbiAgICBwdWJsaWMgZGF0YTogVDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hZnRlckNsb3NlZCA9IG5ldyBTdWJqZWN0PFAgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWZ0ZXJMb2FkZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hZnRlckNsb3NlZCA9IHRoaXMuX2FmdGVyQ2xvc2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmFmdGVyTG9hZGVkID0gdGhpcy5fYWZ0ZXJMb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkaWFsb2cgYW5kIHBhc3NlcyB0aGUgYXJndW1lbnQgdG8gdGhlIGFmdGVyQ2xvc2VkIG9ic2VydmFibGUuXG4gICAgICogQHBhcmFtIHJlc3VsdCBWYWx1ZSBwYXNzZWQgYmFjayB0byB0aGUgb2JzZXJ2YWJsZSBhcyBhIHJlc3VsdC5cbiAgICAgKi9cbiAgICBjbG9zZShyZXN1bHQ/OiBQKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FmdGVyQ2xvc2VkLm5leHQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDbG9zZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNtaXNzZXMgdGhlIGRpYWxvZyBhbmQgcGFzc2VzIHRoZSBhcmd1bWVudCB0byB0aGUgYWZ0ZXJDbG9zZWQgb2JzZXJ2YWJsZSBhcyBhbiBlcnJvci5cbiAgICAgKiBAcGFyYW0gcmVhc29uIFZhbHVlIHBhc3NlZCBiYWNrIHRvIHRoZSBvYnNlcnZhYmxlIGFzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGRpc21pc3MocmVhc29uPzogRkRfRElBTE9HX0RJU01JU1NfUkVBU09OIHwgYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FmdGVyQ2xvc2VkLmVycm9yKHJlYXNvbik7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGFmdGVyIHRoZSB2aWV3IG9mIG1vZGFsIGlzIGluaXRpYWxpc2VkLiAqL1xuICAgIGxvYWRlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJMb2FkZWQubmV4dCh0cnVlKTtcbiAgICB9XG59XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlZi1iYXNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RpYWxvZy9iYXNlL2RpYWxvZy1yZWYtYmFzZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLHdCQUlYO0FBSkQsV0FBWSx3QkFBd0I7SUFDaEMsNkNBQWlCLENBQUE7SUFDakIsaURBQXFCLENBQUE7SUFDckIsbUVBQXVDLENBQUE7QUFDM0MsQ0FBQyxFQUpXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFJbkM7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQXNCdEIsY0FBYztJQUNkO1FBdEJBLGNBQWM7UUFDUCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQWN4QyxjQUFjO1FBQ0ssaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQUUvRCxjQUFjO1FBQ0ssaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSXJELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFVO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxNQUF1QztRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLE1BQU07UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBlbnVtIEZEX0RJQUxPR19ESVNNSVNTX1JFQVNPTiB7XG4gICAgRVNDQVBFID0gJ2VzY2FwZScsXG4gICAgQkFDS0RST1AgPSAnYmFja2Ryb3AnLFxuICAgIE5BVklHQVRJT05fQ0hBTkdFID0gJ25hdmlnYXRpb24gY2hhbmdlJ1xufVxuXG5leHBvcnQgY2xhc3MgRGlhbG9nUmVmQmFzZTxULCBQID0gYW55PiB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgX2VuZENsb3NlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQuXG4gICAgICogT24gY2xvc2UgYSAqcmVzdWx0KiBpcyBwYXNzZWQgYmFjay4gT24gZGlzbWlzcywgYW4gKmVycm9yKiBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZnRlckNsb3NlZDogT2JzZXJ2YWJsZTxQIHwgdW5kZWZpbmVkPjtcblxuICAgIC8qKiBPYnNlcnZhYmxlIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIG1vZGFsIHZpZXcgaXMgaW5pdGlhbGlzZWQuICovXG4gICAgcHVibGljIGFmdGVyTG9hZGVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqIERhdGEgcGFzc2VkIGZyb20gdGhlIGNhbGxpbmcgY29tcG9uZW50IHRvIHRoZSBjb250ZW50LiovXG4gICAgcHVibGljIGRhdGE6IFQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWZ0ZXJDbG9zZWQgPSBuZXcgU3ViamVjdDxQIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FmdGVyTG9hZGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJDbG9zZWQgPSB0aGlzLl9hZnRlckNsb3NlZC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5hZnRlckxvYWRlZCA9IHRoaXMuX2FmdGVyTG9hZGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZGlhbG9nIGFuZCBlbWl0cyB0aGUgcmVzdWx0IHRvIHRoZSBhZnRlckNsb3NlZCBvYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSByZXN1bHQgVmFsdWUgcGFzc2VkIGJhY2sgdG8gdGhlIG9ic2VydmFibGUgYXMgYSByZXN1bHQuXG4gICAgICovXG4gICAgY2xvc2UocmVzdWx0PzogUCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbmRDbG9zZSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9lbmRDbG9zZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDbG9zZWQubmV4dChyZXN1bHQpO1xuICAgICAgICB0aGlzLl9hZnRlckNsb3NlZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc21pc3NlcyB0aGUgZGlhbG9nIGFuZCBwYXNzZXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBhZnRlckNsb3NlZCBvYnNlcnZhYmxlIGFzIGFuIGVycm9yLlxuICAgICAqIEBwYXJhbSByZWFzb24gVmFsdWUgcGFzc2VkIGJhY2sgdG8gdGhlIG9ic2VydmFibGUgYXMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgZGlzbWlzcyhyZWFzb24/OiBGRF9ESUFMT0dfRElTTUlTU19SRUFTT04gfCBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDbG9zZWQuZXJyb3IocmVhc29uKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHZpZXcgb2YgbW9kYWwgaXMgaW5pdGlhbGlzZWQuICovXG4gICAgbG9hZGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZnRlckxvYWRlZC5uZXh0KHRydWUpO1xuICAgIH1cbn1cbiJdfQ==