igniteui-angular 17.1.0-beta.3 → 17.1.0-rc.0

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.
@@ -5,12 +5,13 @@ import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-br
5
5
  import { IgxCalendarYearDirective } from '../calendar.directives';
6
6
  import { noop } from 'rxjs';
7
7
  import { NgFor } from '@angular/common';
8
+ import { HammerGesturesManager } from '../../core/touch';
8
9
  import * as i0 from "@angular/core";
9
10
  export class CalendarHammerConfig extends HammerGestureConfig {
10
11
  constructor() {
11
12
  super(...arguments);
12
13
  this.overrides = {
13
- pan: { direction: Hammer.DIRECTION_VERTICAL, threshold: 1 }
14
+ pan: { direction: HammerGesturesManager.Hammer?.DIRECTION_VERTICAL, threshold: 1 }
14
15
  };
15
16
  }
16
17
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: CalendarHammerConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -302,4 +303,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
302
303
  type: HostListener,
303
304
  args: ['keydown.enter']
304
305
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2FsZW5kYXIveWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBRVosZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHeEMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQUQ3RDs7UUFFb0IsY0FBUyxHQUFHO1lBQ3hCLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtTQUM5RCxDQUFDO0tBQ0w7OEdBSlksb0JBQW9CO2tIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7O0FBd0JYLE1BQU0sT0FBTyxxQkFBcUI7SUFxRTlCOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsSUFDVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLElBQUksQ0FBQyxLQUFXO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUNXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxVQUFVLENBQUMsS0FBVTtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsTUFBTSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLE1BQU07UUFDYixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBbUIsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUE5SmpDOzs7Ozs7OztXQVFHO1FBRUksYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFM0M7Ozs7V0FJRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFjekI7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXZCOztXQUVHO1FBQ0ssZ0JBQVcsR0FBRyxTQUFTLENBQUM7UUFNaEM7O1dBRUc7UUFDSyxVQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUUzQjs7V0FFRztRQUNLLHVCQUFrQixHQUFlLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNLLHNCQUFpQixHQUFzQixJQUFJLENBQUM7UUFvR2hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFFSSxrQkFBa0IsQ0FBQyxLQUFvQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0YsQ0FBQztJQUVEOztPQUVHO0lBRUksZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkcsQ0FBQztJQUVEOztPQUVHO0lBRUksY0FBYztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxLQUFXO1FBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWxCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLO1FBQ2YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksR0FBRyxDQUFDLEtBQUs7UUFDWixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsRUFBcUI7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxFQUFjO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsS0FBVztRQUN6QixJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsS0FBYTtRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDNUQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDOzhHQXJTUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixxR0FLVixnQkFBZ0Isc1VBckJ6QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsb0JBQW9CO2FBQ2pDO1NBQ0osMERBc0NhLHdCQUF3QiwyQkFBVSx3QkFBd0IsNkJDNUU1RSwyYkFZQSw0Q0Q4QmMsS0FBSyxtSEFBRSx3QkFBd0I7OzJGQUVoQyxxQkFBcUI7a0JBakJqQyxTQUFTO2dDQUNLO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsdUJBQXVCOzRCQUNsQyxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixRQUFRLEVBQUUsb0JBQW9CO3lCQUNqQztxQkFDSixZQUNTLGdCQUFnQixjQUVkLElBQUksV0FDUCxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQzsrRUFRbkMsVUFBVTtzQkFEaEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFhL0IsUUFBUTtzQkFEZCxNQUFNO2dCQVNBLFVBQVU7c0JBRGhCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVExQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFO2dCQWtEL0QsSUFBSTtzQkFEZCxLQUFLO2dCQW1CSyxVQUFVO3NCQURwQixLQUFLO2dCQTRCSyxNQUFNO3NCQURoQixLQUFLO2dCQWlEQyxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYXRDLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhcEMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3RhYmxlLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlLCBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVDb25maWcsIEhBTU1FUl9HRVNUVVJFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhhbW1lckNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuICAgIHB1YmxpYyBvdmVycmlkZSBvdmVycmlkZXMgPSB7XG4gICAgICAgIHBhbjogeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwsIHRocmVzaG9sZDogMSB9XG4gICAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IElneFllYXJzVmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYWxlbmRhckhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC15ZWFycy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBJZ3hDYWxlbmRhclllYXJEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneFllYXJzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgdmlldyBzaG91bGQgYmUgcmVuZGVyZWRcbiAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZSBhbmQgeWVhckZvcm1hdCwgaWYgYW55LlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBmb3JtYXRWaWV3OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlIGluIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0aGUgYGRhdGVgIHByb3BlcnR5IGluIHRoZSBgSWd4WWVhcnNWaWV3Q29tcG9uZW50YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IChzZWxlY3RlZCk9XCJvblNlbGVjdGlvbigkZXZlbnQpXCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyJylcbiAgICBwdWJsaWMgc3R5bGVDbGFzcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hDYWxlbmRhclllYXJEaXJlY3RpdmUsIHsgcmVhZDogSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGNhbGVuZGFyRGlyOiBRdWVyeUxpc3Q8SWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXR0ZXJZZWFyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbG9jYWxlID0gJ2VuJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF95ZWFyRm9ybWF0ID0gJ251bWVyaWMnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGVuZGFyTW9kZWw6IENhbGVuZGFyO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9kYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSBub29wO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBzZWxlY3RlZCBkYXRlIG9mIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFtkYXRlXT1cIm15RGF0ZVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkYXRlID0gIHRoaXMueWVhcnNWaWV3LmRhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJGb3JtYXQgPSB0aGlzLnllYXJzVmlldy55ZWFyRm9ybWF0LlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB5ZWFyRm9ybWF0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyRm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFt5ZWFyRm9ybWF0XT1cIm51bWVyaWNcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgeWVhckZvcm1hdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3llYXJGb3JtYXQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZW5cImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsb2NhbGUgPSAgdGhpcy55ZWFyc1ZpZXcubG9jYWxlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBFeHBlY3RzIGEgdmFsaWQgQkNQIDQ3IGxhbmd1YWdlIHRhZy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImVuXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXllYXJzLXZpZXcgW2xvY2FsZV09XCJkZVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0ZSBvYmplY3RzIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gcHJvcGVybHlcbiAgICAgKiByZW5kZXIgdGhlIHllYXJzLlxuICAgICAqXG4gICAgICogVXNlZCBpbiB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRlY2FkZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBEYXRlW10gPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSAtIDM7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpICsgNDtcblxuICAgICAgICBmb3IgKGNvbnN0IHllYXIgb2YgcmFuZ2Uoc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBEYXRlKHllYXIsIHRoaXMuZGF0ZS5nZXRNb250aCgpLCB0aGlzLmRhdGUuZ2V0RGF0ZSgpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmluaXRZZWFyRm9ybWF0dGVyKCk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyTW9kZWwgPSBuZXcgQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgxKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd1VwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoLTEpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyRGlyLmZpbmQoZGF0ZSA9PiBkYXRlLmlzQ3VycmVudFllYXIpLm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgICBwdWJsaWMgb25LZXlkb3duRW50ZXIoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLmRhdGUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGluIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRZZWFyKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlclllYXIuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0WWVhcihldmVudCkge1xuICAgICAgICB0aGlzLmRhdGUgPSBldmVudDtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZXZlbnQuZGVsdGFZIDwgMCA/IC0xIDogMTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZShkZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYW4oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZGVsdGEgPSBldmVudC5kZWx0YVkgPCAwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2OiBEYXRlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB5ZWFyVHJhY2tlcihpbmRleCwgaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLmdldEZ1bGxZZWFyKCl9fWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0WWVhckZvcm1hdHRlcigpIHtcbiAgICAgICAgdGhpcy5fZm9ybWF0dGVyWWVhciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuX2xvY2FsZSwgeyB5ZWFyOiB0aGlzLnllYXJGb3JtYXQgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAoKGRlbHRhID4gMCAmJiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSAtIGN1cnJlbnRZZWFyID49IDk1KSB8fFxuICAgICAgICAgICAgKGRlbHRhIDwgMCAmJiBjdXJyZW50WWVhciAtIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpID49IDk1KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX2NhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMuZGF0ZSwgJ3llYXInLCBkZWx0YSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHktY29sdW1uXCIgKHdoZWVsKT1cInNjcm9sbCgkZXZlbnQpXCIgKHBhbik9XCJwYW4oJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1jYWxlbmRhcl9feWVhclwiXG4gICAgICAgICAgICBbaWd4Q2FsZW5kYXJZZWFyXT1cInllYXJcIlxuICAgICAgICAgICAgW2RhdGVdPVwiZGF0ZVwiXG4gICAgICAgICAgICAoeWVhclNlbGVjdGlvbik9XCJzZWxlY3RZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXIgb2YgZGVjYWRlOyB0cmFja0J5OiB5ZWFyVHJhY2tlclwiPlxuXG4gICAgICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKHllYXIpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2FsZW5kYXIveWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBRVosZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHekQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQUQ3RDs7UUFFb0IsY0FBUyxHQUFHO1lBQ3hCLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtTQUNyRixDQUFD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LFVBQVU7c0JBRGhCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQVExQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFO2dCQWtEL0QsSUFBSTtzQkFEZCxLQUFLO2dCQW1CSyxVQUFVO3NCQURwQixLQUFLO2dCQTRCSyxNQUFNO3NCQURoQixLQUFLO2dCQWlEQyxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYXRDLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhcEMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3RhYmxlLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlLCBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVDb25maWcsIEhBTU1FUl9HRVNUVVJFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIYW1tZXJHZXN0dXJlc01hbmFnZXIgfSBmcm9tICcuLi8uLi9jb3JlL3RvdWNoJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhbGVuZGFySGFtbWVyQ29uZmlnIGV4dGVuZHMgSGFtbWVyR2VzdHVyZUNvbmZpZyB7XG4gICAgcHVibGljIG92ZXJyaWRlIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgcGFuOiB7IGRpcmVjdGlvbjogSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLkhhbW1lcj8uRElSRUNUSU9OX1ZFUlRJQ0FMLCB0aHJlc2hvbGQ6IDEgfVxuICAgIH07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBIQU1NRVJfR0VTVFVSRV9DT05GSUcsXG4gICAgICAgICAgICB1c2VDbGFzczogQ2FsZW5kYXJIYW1tZXJDb25maWdcbiAgICAgICAgfVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gteWVhcnMtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICd5ZWFycy12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHdoZXRoZXIgdGhlIHZpZXcgc2hvdWxkIGJlIHJlbmRlcmVkXG4gICAgICogYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUgYW5kIHllYXJGb3JtYXQsIGlmIGFueS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZm9ybWF0VmlldzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdGhlIGBkYXRlYCBwcm9wZXJ0eSBpbiB0aGUgYElneFllYXJzVmlld0NvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyAoc2VsZWN0ZWQpPVwib25TZWxlY3Rpb24oJGV2ZW50KVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG4gICAgcHVibGljIHN0eWxlQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlLCB7IHJlYWQ6IElneENhbGVuZGFyWWVhckRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBjYWxlbmRhckRpcjogUXVlcnlMaXN0PElneENhbGVuZGFyWWVhckRpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0dGVyWWVhcjogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2xvY2FsZSA9ICdlbic7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfeWVhckZvcm1hdCA9ICdudW1lcmljJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jYWxlbmRhck1vZGVsOiBDYWxlbmRhcjtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHRoZSBjdXJyZW50IGRhdGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbZGF0ZV09XCJteURhdGVcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0ZSA9ICB0aGlzLnllYXJzVmlldy5kYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRhdGUodmFsdWU6IERhdGUpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB5ZWFyIGZvcm1hdCBvcHRpb24gb2YgdGhlIHllYXJzIHZpZXcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB5ZWFyRm9ybWF0ID0gdGhpcy55ZWFyc1ZpZXcueWVhckZvcm1hdC5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgeWVhckZvcm1hdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5feWVhckZvcm1hdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB5ZWFyIGZvcm1hdCBvcHRpb24gb2YgdGhlIHllYXJzIHZpZXcuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbeWVhckZvcm1hdF09XCJudW1lcmljXCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHllYXJGb3JtYXQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl95ZWFyRm9ybWF0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFllYXJGb3JtYXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImVuXCJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbG9jYWxlID0gIHRoaXMueWVhcnNWaWV3LmxvY2FsZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYGxvY2FsZWAgb2YgdGhlIHllYXJzIHZpZXcuXG4gICAgICogRXhwZWN0cyBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgXCJlblwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFtsb2NhbGVdPVwiZGVcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFllYXJGb3JtYXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGRhdGUgb2JqZWN0cyB3aGljaCBhcmUgdGhlbiB1c2VkIHRvIHByb3Blcmx5XG4gICAgICogcmVuZGVyIHRoZSB5ZWFycy5cbiAgICAgKlxuICAgICAqIFVzZWQgaW4gdGhlIHRlbXBsYXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWNhZGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogRGF0ZVtdID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAzO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDQ7XG5cbiAgICAgICAgZm9yIChjb25zdCB5ZWFyIG9mIHJhbmdlKHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgRGF0ZSh5ZWFyLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhck1vZGVsID0gbmV3IENhbGVuZGFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoMSk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEaXIuZmluZChkYXRlID0+IGRhdGUuaXNDdXJyZW50WWVhcikubmF0aXZlRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKC0xKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhckRpci5maW5kKGRhdGUgPT4gZGF0ZS5pc0N1cnJlbnRZZWFyKS5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gICAgcHVibGljIG9uS2V5ZG93bkVudGVyKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvY2FsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgeWVhciBpbiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybWF0dGVkWWVhcih2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1hdFZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZXJZZWFyLmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldEZ1bGxZZWFyKCl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdFllYXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRlbHRhWSA8IDAgPyAtMSA6IDE7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFuKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZShkZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodjogRGF0ZSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgeWVhclRyYWNrZXIoaW5kZXgsIGl0ZW0pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aXRlbS5nZXRGdWxsWWVhcigpfX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFllYXJGb3JtYXR0ZXIoKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlclllYXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgeWVhcjogdGhpcy55ZWFyRm9ybWF0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlWWVhclJhbmdlKGRlbHRhOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgaWYgKChkZWx0YSA+IDAgJiYgdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSBjdXJyZW50WWVhciA+PSA5NSkgfHxcbiAgICAgICAgICAgIChkZWx0YSA8IDAgJiYgY3VycmVudFllYXIgLSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSA+PSA5NSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9jYWxlbmRhck1vZGVsLnRpbWVkZWx0YSh0aGlzLmRhdGUsICd5ZWFyJywgZGVsdGEpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyX19ib2R5LWNvbHVtblwiICh3aGVlbCk9XCJzY3JvbGwoJGV2ZW50KVwiIChwYW4pPVwicGFuKCRldmVudClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX3llYXJcIlxuICAgICAgICAgICAgW2lneENhbGVuZGFyWWVhcl09XCJ5ZWFyXCJcbiAgICAgICAgICAgIFtkYXRlXT1cImRhdGVcIlxuICAgICAgICAgICAgKHllYXJTZWxlY3Rpb24pPVwic2VsZWN0WWVhcigkZXZlbnQpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGRlY2FkZTsgdHJhY2tCeTogeWVhclRyYWNrZXJcIj5cblxuICAgICAgICAgICAge3sgZm9ybWF0dGVkWWVhcih5ZWFyKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,6 +11,7 @@ import { IgxCarouselIndicatorDirective, IgxCarouselNextButtonDirective, IgxCarou
11
11
  import { IgxSlideComponent } from './slide.component';
12
12
  import { IgxIconComponent } from '../icon/icon.component';
13
13
  import { getCurrentResourceStrings } from '../core/i18n/resources';
14
+ import { HammerGesturesManager } from '../core/touch';
14
15
  import * as i0 from "@angular/core";
15
16
  import * as i1 from "../core/utils";
16
17
  let NEXT_ID = 0;
@@ -22,7 +23,7 @@ export class CarouselHammerConfig extends HammerGestureConfig {
22
23
  constructor() {
23
24
  super(...arguments);
24
25
  this.overrides = {
25
- pan: { direction: Hammer.DIRECTION_HORIZONTAL }
26
+ pan: { direction: HammerGesturesManager.Hammer?.DIRECTION_HORIZONTAL }
26
27
  };
27
28
  }
28
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: CarouselHammerConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -969,4 +970,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
969
970
  type: HostListener,
970
971
  args: ['panend', ['$event']]
971
972
  }] } });
972
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBS0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQTRCLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFrQixNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVB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QTRISyxRQUFRO3NCQURsQixLQUFLO2dCQWdDQyxtQkFBbUI7c0JBRHpCLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3ZDLGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXdEMsS0FBSztzQkFEWCxZQUFZO3VCQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQnhCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVdqQyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXaEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxZQUFZO2dCQVVuQixZQUFZO3NCQURsQixZQUFZO3VCQUFDLFlBQVk7Z0JBU25CLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTzVCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVM3QixRQUFRO3NCQURkLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIYW1tZXJHZXN0dXJlQ29uZmlnLCBIQU1NRVJfR0VTVFVSRV9DT05GSUcgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOLCBJQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vY2Fyb3VzZWwtcmVzb3VyY2VzJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBta2VudW0sIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuXG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IERpcmVjdGlvbiwgSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUsIElneENhcm91c2VsQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY2Fyb3VzZWwtYmFzZSc7XG5pbXBvcnQgeyBJZ3hDYXJvdXNlbEluZGljYXRvckRpcmVjdGl2ZSwgSWd4Q2Fyb3VzZWxOZXh0QnV0dG9uRGlyZWN0aXZlLCBJZ3hDYXJvdXNlbFByZXZCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2Nhcm91c2VsLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSWd4U2xpZGVDb21wb25lbnQgfSBmcm9tICcuL3NsaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuZXhwb3J0IGNvbnN0IENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uID0gbWtlbnVtKHtcbiAgICBib3R0b206ICdib3R0b20nLFxuICAgIHRvcDogJ3RvcCdcbn0pO1xuZXhwb3J0IHR5cGUgQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAodHlwZW9mIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uKVtrZXlvZiB0eXBlb2YgQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb25dO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxIYW1tZXJDb25maWcgZXh0ZW5kcyBIYW1tZXJHZXN0dXJlQ29uZmlnIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3ZlcnJpZGVzID0ge1xuICAgICAgICBwYW46IHsgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgfVxuICAgIH07XG59XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIENhcm91c2VsKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL2Nhcm91c2VsLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBDYXJvdXNlbCBpcyB1c2VkIHRvIGJyb3dzZSBvciBuYXZpZ2F0ZSB0aHJvdWdoIGEgY29sbGVjdGlvbiBvZiBzbGlkZXMuIFNsaWRlcyBjYW4gY29udGFpbiBjdXN0b21cbiAqIGNvbnRlbnQgc3VjaCBhcyBpbWFnZXMgb3IgY2FyZHMgYW5kIGJlIHVzZWQgZm9yIHRoaW5ncyBzdWNoIGFzIG9uLWJvYXJkaW5nIHR1dG9yaWFscyBvciBwYWdlLWJhc2VkIGludGVyZmFjZXMuXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIHNlcGFyYXRlIGZ1bGxzY3JlZW4gZWxlbWVudCBvciBpbnNpZGUgYW5vdGhlciBjb21wb25lbnQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2Fyb3VzZWw+XG4gKiAgIDxpZ3gtc2xpZGU+XG4gKiAgICAgPGgzPkZpcnN0IFNsaWRlIEhlYWRlcjwvaDM+XG4gKiAgICAgPHA+Rmlyc3Qgc2xpZGUgQ29udGVudDwvcD5cbiAqICAgPGlneC1zbGlkZT5cbiAqICAgPGlneC1zbGlkZT5cbiAqICAgICA8aDM+U2Vjb25kIFNsaWRlIEhlYWRlcjwvaDM+XG4gKiAgICAgPHA+U2Vjb25kIFNsaWRlIENvbnRlbnQ8L3A+XG4gKiA8L2lneC1jYXJvdXNlbD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSEFNTUVSX0dFU1RVUkVfQ09ORklHLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IENhcm91c2VsSGFtbWVyQ29uZmlnXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNhcm91c2VsJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgb3V0bGluZS1zdHlsZTogbm9uZTtcbiAgICB9YF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SWNvbkNvbXBvbmVudCwgTmdJZiwgTmdDbGFzcywgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXRdXG59KVxuXG5leHBvcnQgY2xhc3MgSWd4Q2Fyb3VzZWxDb21wb25lbnQgZXh0ZW5kcyBJZ3hDYXJvdXNlbENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYGlkYCBvZiB0aGUgY2Fyb3VzZWwuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgb2YgdGhlIGZpcnN0IGNhcm91c2VsIGNvbXBvbmVudCB3aWxsIGJlIGBcImlneC1jYXJvdXNlbC0wXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIGlkPVwibXktZmlyc3QtY2Fyb3VzZWxcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNhcm91c2VsLSR7TkVYVF9JRCsrfWA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjYXJvdXNlbFJvbGUgPSAgdGhpcy5jYXJvdXNlbC5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSBwdWJsaWMgcm9sZSA9ICdyZWdpb24nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKVxuICAgIHB1YmxpYyByb2xlRGVzY3JpcHRpb24gPSAnY2Fyb3VzZWwnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JylcbiAgICBwdWJsaWMgZ2V0IGxhYmVsSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dJbmRpY2F0b3JzTGFiZWwgPyBgJHt0aGlzLmlkfS1sYWJlbGAgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBjYXJvdXNlbCBjb21wb25lbnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjbGFzcyA9ICB0aGlzLmNhcm91c2VsLmNzc0NsYXNzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2Fyb3VzZWwnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtY2Fyb3VzZWwnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYHRvdWNoLWFjdGlvbmAgc3R5bGUgb2YgdGhlIGBsaXN0IGl0ZW1gLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG91Y2hBY3Rpb24gPSB0aGlzLmxpc3RJdGVtLnRvdWNoQWN0aW9uO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUudG91Y2gtYWN0aW9uJylcbiAgICBwdWJsaWMgZ2V0IHRvdWNoQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXN0dXJlc1N1cHBvcnQgPyAncGFuLXknIDogJ2F1dG8nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgc2hvdWxkIGBsb29wYCBiYWNrIHRvIHRoZSBmaXJzdCBzbGlkZSBhZnRlciByZWFjaGluZyB0aGUgbGFzdCBzbGlkZS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbG9vcF09XCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHB1YmxpYyBsb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgd2lsbCBgcGF1c2VgIHRoZSBzbGlkZSB0cmFuc2l0aW9ucyBvbiB1c2VyIGludGVyYWN0aW9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgW3BhdXNlXT1cImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcHVibGljIHBhdXNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhcm91c2VsIHNob3VsZCByZW5kZXIgdGhlIGxlZnQvcmlnaHQgYG5hdmlnYXRpb25gIGJ1dHRvbnMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW25hdmlnYXRpb25dPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwdWJsaWMgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgc3VwcG9ydCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtrZXlib2FyZFN1cHBvcnRdPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwdWJsaWMga2V5Ym9hcmRTdXBwb3J0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhcm91c2VsIHNob3VsZCBzdXBwb3J0IGdlc3R1cmVzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtnZXN0dXJlc1N1cHBvcnRdPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwdWJsaWMgZ2VzdHVyZXNTdXBwb3J0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBtYXhpbXVtIGluZGV4ZXMgdGhhdCBjYW4gYmUgc2hvd24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW21heGltdW1JbmRpY2F0b3JzQ291bnRdPVwiMTBcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhpbXVtSW5kaWNhdG9yc0NvdW50ID0gNTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgZGlzcGxheSBtb2RlIG9mIGNhcm91c2VsIGluZGljYXRvcnMuIEl0IGNhbiBiZSB0b3Agb3IgYm90dG9tLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGJvdHRvbWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgaW5kaWNhdG9yc09yaWVudGF0aW9uPSd0b3AnPlxuICAgICAqIDxpZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4U2xpZGVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaW5kaWNhdG9yc09yaWVudGF0aW9uOiBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbiA9IENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uLmJvdHRvbTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgYW5pbWF0aW9uIHR5cGUgb2YgY2Fyb3VzZWwuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgc2xpZGVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIGFuaW1hdGlvblR5cGU9J25vbmUnPlxuICAgICAqIDxpZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4U2xpZGVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb3ZlcnJpZGUgYW5pbWF0aW9uVHlwZTogSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUgPSBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZS5zbGlkZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBjYXJvdXNlbCBpbmRpY2F0b3JzXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY2Fyb3VzZWwuaW5kaWNhdG9yVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgI2Nhcm91c2VsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q2Fyb3VzZWxJbmRpY2F0b3IgbGV0LXNsaWRlPlxuICAgICAqICAgICAgICAgPGlneC1pY29uICpuZ0lmPVwic2xpZGUuYWN0aXZlXCI+YnJpZ2h0bmVzc183PC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cIiFzbGlkZS5hY3RpdmVcIj5icmlnaHRuZXNzXzU8L2lneC1pY29uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYXJvdXNlbEluZGljYXRvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBpbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgY2Fyb3VzZWwgbmV4dCBidXR0b25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jYXJvdXNlbC5uZXh0QnV0dG9uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgI2Nhcm91c2VsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q2Fyb3VzZWxOZXh0QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICAgKiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmYWJcIiBpZ3hSaXBwbGU9XCJ3aGl0ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAqICAgICAgICAgICAgICA8aWd4LWljb24+YWRkPC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2Fyb3VzZWxOZXh0QnV0dG9uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIG5leHRCdXR0b25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgY2Fyb3VzZWwgcHJldmlvdXMgYnV0dG9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY2Fyb3VzZWwubmV4dEJ1dHRvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNhcm91c2VsICNjYXJvdXNlbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENhcm91c2VsUHJldkJ1dHRvbiBsZXQtZGlzYWJsZWQ+XG4gICAgICogICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmFiXCIgaWd4UmlwcGxlPVwid2hpdGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgKiAgICAgICAgICAgICAgPGlneC1pY29uPnJlbW92ZTwvaWd4LWljb24+XG4gICAgICogICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENhcm91c2VsUHJldkJ1dHRvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBwcmV2QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYHNsaWRlc2AgY3VycmVudGx5IGluIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNsaWRlczogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50PiA9IHRoaXMuY2Fyb3VzZWwuc2xpZGVzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTbGlkZUNvbXBvbmVudClcbiAgICBwdWJsaWMgc2xpZGVzOiBRdWVyeUxpc3Q8SWd4U2xpZGVDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgdHJhbnNpdGlvbiBoYXMgaGFwcGVuZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhbmQgYElneFNsaWRlQ29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKHNsaWRlQ2hhbmdlZCk9XCJzbGlkZUNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzbGlkZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElTbGlkZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIHNsaWRlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFuZCBgSWd4U2xpZGVDb21wb25lbnRgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoc2xpZGVBZGRlZCk9XCJzbGlkZUFkZGVkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2xpZGVBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFuZCBgSWd4U2xpZGVDb21wb25lbnRgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoc2xpZGVSZW1vdmVkKT1cInNsaWRlUmVtb3ZlZCgkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHNsaWRlUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjYXJvdXNlbCBoYXMgYmVlbiBwYXVzZWQuXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKGNhcm91c2VsUGF1c2VkKT1cImNhcm91c2VsUGF1c2VkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2Fyb3VzZWxQYXVzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneENhcm91c2VsQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjYXJvdXNlbCBoYXMgcmVzdW1lZCB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYHNsaWRlc2AuXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKGNhcm91c2VsUGxheWluZyk9XCJjYXJvdXNlbFBsYXlpbmcoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBjYXJvdXNlbFBsYXlpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElneENhcm91c2VsQ29tcG9uZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEluZGljYXRvcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGVmYXVsdEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHROZXh0QnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkZWZhdWx0TmV4dEJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRQcmV2QnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkZWZhdWx0UHJldkJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcHBlZEJ5SW50ZXJhY3Rpb246IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGN1cnJlbnRJdGVtOiBJZ3hTbGlkZUNvbXBvbmVudDtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHJldmlvdXNJdGVtOiBJZ3hTbGlkZUNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9pbnRlcnZhbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MoQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTik7XG4gICAgcHJpdmF0ZSBsYXN0SW50ZXJ2YWw6IGFueTtcbiAgICBwcml2YXRlIHBsYXlpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkZXN0cm95ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwcml2YXRlIGRpZmZlcjogSXRlcmFibGVEaWZmZXI8SWd4U2xpZGVDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBpbmNvbWluZ1NsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElDYXJvdXNlbFJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZ2V0SW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRpY2F0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0SW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXROZXh0QnV0dG9uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLm5leHRCdXR0b25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dEJ1dHRvblRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHROZXh0QnV0dG9uO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXRQcmV2QnV0dG9uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLnByZXZCdXR0b25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldkJ1dHRvblRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQcmV2QnV0dG9uO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBpbmRpY2F0b3JzT3JpZW50YXRpb25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGBpZ3gtY2Fyb3VzZWwtaW5kaWNhdG9ycy0tJHt0aGlzLmluZGljYXRvcnNPcmllbnRhdGlvbn1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBzaG93SW5kaWNhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWwgPD0gdGhpcy5tYXhpbXVtSW5kaWNhdG9yc0NvdW50ICYmIHRoaXMudG90YWwgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBzaG93SW5kaWNhdG9yc0xhYmVsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbCA+IHRoaXMubWF4aW11bUluZGljYXRvcnNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZ2V0Q2Fyb3VzZWxMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudCArIDF9ICR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX29mfSAke3RoaXMudG90YWx9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYHNsaWRlc2AgaW4gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2xpZGVDb3VudCA9ICB0aGlzLmNhcm91c2VsLnRvdGFsO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCB0b3RhbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXM/Lmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIHNsaWRlIGJlaW5nIGN1cnJlbnRseSBzaG93bi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGN1cnJlbnRTbGlkZU51bWJlciA9ICB0aGlzLmNhcm91c2VsLmN1cnJlbnQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRJdGVtID8gMCA6IHRoaXMuY3VycmVudEl0ZW0uaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY2Fyb3VzZWwgaXMgcGxheWluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzUGxheWluZyA9ICB0aGlzLmNhcm91c2VsLmlzUGxheWluZztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNQbGF5aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5aW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMg0LAgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjYXJvdXNlbCBpcyBkZXN0cm95ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0Rlc3Ryb3llZCA9ICB0aGlzLmNhcm91c2VsLmlzRGVzdHJveWVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveWVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjYXJvdXNlbCBlbGVtZW50IGluIHRoZSBET00uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBuYXRpdmVFbGVtZW50ID0gIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdGltZSBgaW50ZXJ2YWxgIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHNsaWRlIGNoYW5nZXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0aW1lSW50ZXJ2YWwgPSB0aGlzLmNhcm91c2VsLmludGVydmFsO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGludGVydmFsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcnZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aW1lIGBpbnRlcnZhbGAgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2xpZGUgY2hhbmdlcy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgY2Fyb3VzZWwgd2lsbCBub3QgY2hhbmdlIGBzbGlkZXNgIGF1dG9tYXRpY2FsbHkuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW2ludGVydmFsXT1cIjEwMDBcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaW50ZXJ2YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9ICt2YWx1ZTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0SW50ZXJ2YWwoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBASW5qZWN0KElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlKSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UsIGNkcik7XG4gICAgICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NsaWRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkFycm93TGVmdChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN1cHBvcnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigndGFwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25UYXAoZXZlbnQpIHtcbiAgICAgICAgLy8gcGxheSBwYXVzZSBvbmx5IHdoZW4gdGFwIG9uIHNsaWRlXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaWd4LXNsaWRlJykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmhvbWUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25Ib21lKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCAmJiB0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZmlyc3QuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25FbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0ICYmIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5sYXN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2xpZGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICAgIHB1YmxpYyBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlICYmIHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICAgIHB1YmxpYyBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncGFubGVmdCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFuTGVmdChldmVudCkge1xuICAgICAgICB0aGlzLnBhbihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYW5yaWdodCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFuUmlnaHQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wYW4oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYW5lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBhbkVuZChldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2VzdHVyZXNTdXBwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBwYW5PZmZzZXQgPSAoc2xpZGVXaWR0aCAvIDEwMDApO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBNYXRoLmFicyhldmVudC5kZWx0YVgpICsgcGFuT2Zmc2V0IDwgc2xpZGVXaWR0aCA/IE1hdGguYWJzKGV2ZW50LmRlbHRhWCkgOiBzbGlkZVdpZHRoIC0gcGFuT2Zmc2V0O1xuICAgICAgICBjb25zdCB2ZWxvY2l0eSA9IE1hdGguYWJzKGV2ZW50LnZlbG9jaXR5KTtcbiAgICAgICAgdGhpcy5yZXNldFNsaWRlU3R5bGVzKHRoaXMuY3VycmVudEl0ZW0pO1xuICAgICAgICBpZiAodGhpcy5pbmNvbWluZ1NsaWRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2xpZGVTdHlsZXModGhpcy5pbmNvbWluZ1NsaWRlKTtcbiAgICAgICAgICAgIGlmIChzbGlkZVdpZHRoIC8gMiA8IGRlbHRhWCB8fCB2ZWxvY2l0eSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUuZGlyZWN0aW9uID0gZXZlbnQuZGVsdGFYIDwgMCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLnByZXZpb3VzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvblBvc2l0aW9uID0gdGhpcy5hbmltYXRpb25UeXBlID09PSBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZS5mYWRlID9cbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYIC8gc2xpZGVXaWR0aCA6IChzbGlkZVdpZHRoIC0gZGVsdGFYKSAvIHNsaWRlV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAodmVsb2NpdHkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RHVyYXRpb24gPSB0aGlzLmRlZmF1bHRBbmltYXRpb25EdXJhdGlvbiAvIHZlbG9jaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5kaXJlY3Rpb24gPSBldmVudC5kZWx0YVggPiAwID8gRGlyZWN0aW9uLk5FWFQgOiBEaXJlY3Rpb24uUFJFVjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbSA9IHRoaXMuaW5jb21pbmdTbGlkZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Qb3NpdGlvbiA9IHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuZmFkZSA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKChzbGlkZVdpZHRoIC0gZGVsdGFYKSAvIHNsaWRlV2lkdGgpIDogZGVsdGFYIC8gc2xpZGVXaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuc2xpZGVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50PikgPT4gdGhpcy5pbml0U2xpZGVzKGNoYW5nZSkpO1xuXG4gICAgICAgIHRoaXMuaW5pdFNsaWRlcyh0aGlzLnNsaWRlcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxhc3RJbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzbGlkZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBgaW5kZXhgIG9yIG51bGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbGlkZTEgPSAgdGhpcy5jYXJvdXNlbC5nZXQoMSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBJZ3hTbGlkZUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5maW5kKChzbGlkZSkgPT4gc2xpZGUuaW5kZXggPT09IGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IHNsaWRlIHRvIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5hZGQobmV3U2xpZGUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFkZChzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgbmV3U2xpZGVzID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICBuZXdTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgIHRoaXMuc2xpZGVzLnJlc2V0KG5ld1NsaWRlcyk7XG4gICAgICAgIHRoaXMuc2xpZGVzLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBzbGlkZSBmcm9tIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5yZW1vdmUoc2xpZGUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZShzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHNsaWRlICYmIHNsaWRlID09PSB0aGlzLmdldChzbGlkZS5pbmRleCkpIHsgLy8gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBzbGlkZSBmb3IgZGVsZXRlIGlzIHByZXNlbnQgaW4gdGhlIGNhcm91c2VsXG4gICAgICAgICAgICBjb25zdCBuZXdTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgICAgICBuZXdTbGlkZXMuc3BsaWNlKHNsaWRlLmluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLnJlc2V0KG5ld1NsaWRlcyk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtpY2tzIGluIGEgdHJhbnNpdGlvbiBmb3IgYSBnaXZlbiBzbGlkZSB3aXRoIGEgZ2l2ZW4gYGRpcmVjdGlvbmAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwuc2VsZWN0KHRoaXMuY2Fyb3VzZWwuZ2V0KDIpLCBEaXJlY3Rpb24uTkVYVCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCwgZGlyZWN0aW9uOiBEaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORSkge1xuICAgICAgICBpZiAoc2xpZGUgJiYgc2xpZGUgIT09IHRoaXMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIHNsaWRlLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHNsaWRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwubmV4dCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROZXh0SW5kZXgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgIXRoaXMubG9vcCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KHRoaXMuZ2V0KGluZGV4KSwgRGlyZWN0aW9uLk5FWFQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb25zIHRvIHRoZSBwcmV2aW91cyBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwucHJldigpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHByZXYoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQcmV2SW5kZXgoKTtcblxuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiBpbmRleCA9PT0gdGhpcy50b3RhbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdCh0aGlzLmdldChpbmRleCksIERpcmVjdGlvbi5QUkVWKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bWVzIHBsYXlpbmcgb2YgdGhlIGNhcm91c2VsIGlmIGluIHBhdXNlZCBzdGF0ZS5cbiAgICAgKiBObyBvcGVyYXRpb24gb3RoZXJ3aXNlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLnBsYXkoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxheSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBsYXlpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsUGxheWluZy5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZXN0YXJ0SW50ZXJ2YWwoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3BzIHNsaWRlIHRyYW5zaXRpb25zIGlmIHRoZSBgcGF1c2VgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqIE5vIG9wZXJhdGlvbiBvdGhlcndpc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLmNhcm91c2VsLnN0b3AoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGF1c2UpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbFBhdXNlZC5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UHJldmlvdXNFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXNJdGVtLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcblxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdEludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMubGFzdEludGVydmFsKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdGFydEludGVydmFsKCkge1xuICAgICAgICB0aGlzLnJlc2V0SW50ZXJ2YWwoKTtcblxuICAgICAgICBpZiAoIWlzTmFOKHRoaXMuaW50ZXJ2YWwpICYmIHRoaXMuaW50ZXJ2YWwgPiAwICYmIHRoaXMucGxhdGZvcm1VdGlsLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGljayA9ICt0aGlzLmludGVydmFsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXlpbmcgJiYgdGhpcy50b3RhbCAmJiAhaXNOYU4odGljaykgJiYgdGljayA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgbmV4dEJ1dHRvbkRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnQgPT09ICh0aGlzLnRvdGFsIC0gMSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHByZXZCdXR0b25EaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50ID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy5jdXJyZW50ICsgMSkgJSB0aGlzLnRvdGFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJldkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgLSAxIDwgMCA/IHRoaXMudG90YWwgLSAxIDogdGhpcy5jdXJyZW50IC0gMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2xpZGVTdHlsZXMoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIHNsaWRlLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgIHNsaWRlLm5hdGl2ZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFuKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHBhbk9mZnNldCA9IChzbGlkZVdpZHRoIC8gMTAwMCk7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmRlbHRhWDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkZWx0YVggPCAwID8gdGhpcy5nZXROZXh0SW5kZXgoKSA6IHRoaXMuZ2V0UHJldkluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGRlbHRhWCA8IDAgPyBzbGlkZVdpZHRoICsgZGVsdGFYIDogLXNsaWRlV2lkdGggKyBkZWx0YVg7XG5cbiAgICAgICAgaWYgKCF0aGlzLmdlc3R1cmVzU3VwcG9ydCB8fCBldmVudC5pc0ZpbmFsIHx8IE1hdGguYWJzKGRlbHRhWCkgKyBwYW5PZmZzZXQgPj0gc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgKCh0aGlzLmN1cnJlbnQgPT09IDAgJiYgZGVsdGFYID4gMCkgfHwgKHRoaXMuY3VycmVudCA9PT0gdGhpcy50b3RhbCAtIDEgJiYgZGVsdGFYIDwgMCkpKSB7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNJdGVtICYmIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmluY29taW5nU2xpZGUpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gdGhpcy5pbmNvbWluZ1NsaWRlLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNsaWRlU3R5bGVzKHRoaXMuaW5jb21pbmdTbGlkZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5wcmV2aW91cyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuZmFkZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBgJHtNYXRoLmFicyhvZmZzZXQpIC8gc2xpZGVXaWR0aH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke29mZnNldH1weClgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXIoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLmRlc3Ryb3kkLCBzbGlkZS5pc0Rlc3Ryb3llZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNsaWRlQWN0aXZhdGVkKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICBpZiAoc2xpZGUuYWN0aXZlICYmIHNsaWRlICE9PSB0aGlzLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoc2xpZGUuZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTk9ORSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gc2xpZGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgc2xpZGUuZGlyZWN0aW9uID0gbmV3SW5kZXggPiB0aGlzLmN1cnJlbnQgPyBEaXJlY3Rpb24uTkVYVCA6IERpcmVjdGlvbi5QUkVWO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzSXRlbSAmJiB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmRpcmVjdGlvbiA9IHNsaWRlLmRpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0gPSB0aGlzLmN1cnJlbnRJdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBzbGlkZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBzbGlkZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2xpZGVDaGFuZ2VkLmVtaXQoeyBjYXJvdXNlbDogdGhpcywgc2xpZGUgfSk7XG4gICAgICAgICAgICB0aGlzLnJlc3RhcnRJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGZpbmlzaEFuaW1hdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvblN0YXJ0ZWQodGhpcy5sZWF2ZUFuaW1hdGlvblBsYXllcikpIHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdGFydGVkKHRoaXMuZW50ZXJBbmltYXRpb25QbGF5ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmVudGVyQW5pbWF0aW9uUGxheWVyLmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2xpZGVzKGNoYW5nZTogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50Pikge1xuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmZXIuZGlmZihjaGFuZ2UudG9BcnJheSgpKTtcbiAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLnJlZHVjZSgoYW55LCBjLCBpbmQpID0+IGMuaW5kZXggPSBpbmQsIDApOyAvLyByZXNldCBzbGlkZXMgaW5kZXhlc1xuICAgICAgICAgICAgZGlmZi5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneFNsaWRlQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gcmVjb3JkLml0ZW07XG4gICAgICAgICAgICAgICAgc2xpZGUudG90YWwgPSB0aGlzLnRvdGFsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVBZGRlZC5lbWl0KHsgY2Fyb3VzZWw6IHRoaXMsIHNsaWRlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzbGlkZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHNsaWRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzbGlkZS5hY3RpdmVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZXIoc2xpZGUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25TbGlkZUFjdGl2YXRlZChzbGlkZSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRpZmYuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneFNsaWRlQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gcmVjb3JkLml0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZVJlbW92ZWQuZW1pdCh7IGNhcm91c2VsOiB0aGlzLCBzbGlkZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGUuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gdGhpcy5nZXQoc2xpZGUuaW5kZXggPCB0aGlzLnRvdGFsID8gc2xpZGUuaW5kZXggOiB0aGlzLnRvdGFsIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2xpZGVzU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNsaWRlc1NlbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlcyA9IHRoaXMuc2xpZGVzLmZpbHRlcihzbGlkZSA9PiBzbGlkZS5hY3RpdmUgJiYgc2xpZGUuaW5kZXggIT09IHRoaXMuY3VycmVudEl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMuZm9yRWFjaChzbGlkZSA9PiBzbGlkZS5hY3RpdmUgPSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZpcnN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBmb2N1c1NsaWRlRWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIuYW5pbWF0aW9uRW5kXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlcy5maW5kKHMgPT4gcy5hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnNsaWRlcy5maW5kKHMgPT4gcy5hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2xpZGVFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgY2Fyb3VzZWw6IElneENhcm91c2VsQ29tcG9uZW50O1xuICAgIHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudDtcbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEluZGljYXRvciBsZXQtc2xpZGU+XG4gICAgPGRpdiBjbGFzcz1cImlneC1uYXYtZG90XCJcbiAgICAgICAgW2NsYXNzLmlneC1uYXYtZG90LS1hY3RpdmVdPVwic2xpZGUuYWN0aXZlXCI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHROZXh0QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1uYXYtYXJyb3dcIlxuICAgICAgICAgIFtjbGFzcy5pZ3gtbmF2LWFycm93LS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICA8aWd4LWljb24+YXJyb3dfZm9yd2FyZDwvaWd4LWljb24+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UHJldkJ1dHRvbiBsZXQtZGlzYWJsZWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtbmF2LWFycm93XCJcbiAgICAgICAgICBbY2xhc3MuaWd4LW5hdi1hcnJvdy0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGlneC1pY29uPmFycm93X2JhY2s8L2lneC1pY29uPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgKm5nSWY9XCJzaG93SW5kaWNhdG9yc1wiIFtuZ0NsYXNzXT1cImluZGljYXRvcnNPcmllbnRhdGlvbkNsYXNzXCIgW2F0dHIucm9sZV09XCIndGFibGlzdCdcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzbGlkZSBvZiBzbGlkZXNcIlxuICAgICAgICBjbGFzcz1cImlneC1jYXJvdXNlbC1pbmRpY2F0b3JzX19pbmRpY2F0b3JcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0KHNsaWRlKVwiXG4gICAgICAgIFtpZF09XCIndGFiLScrIHNsaWRlLmluZGV4ICsgJy0nICsgdG90YWxcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cIid0YWInXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX3NsaWRlICsgJyAnICsgKHNsaWRlLmluZGV4ICsgMSkgKyAnICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX29mICsgJyAnICsgdGhpcy50b3RhbFwiXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ3BhbmVsLScgKyBzbGlkZS5pbmRleFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2xpZGUuYWN0aXZlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRJbmRpY2F0b3JUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogc2xpZGV9O1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93SW5kaWNhdG9yc0xhYmVsXCIgW25nQ2xhc3NdPVwiaW5kaWNhdG9yc09yaWVudGF0aW9uQ2xhc3NcIj5cbiAgICA8c3BhbiBbaWRdPVwibGFiZWxJZFwiIGNsYXNzPVwiaWd4LWNhcm91c2VsX19sYWJlbFwiPnt7Z2V0Q2Fyb3VzZWxMYWJlbH19PC9zcGFuPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2lubmVyXCIgW2F0dHIuYXJpYS1saXZlXT1cIiFpbnRlcnZhbCB8fCBzdG9wcGVkQnlJbnRlcmFjdGlvbiA/ICdwb2xpdGUnIDogJ29mZidcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIm5hdmlnYXRpb24gJiYgc2xpZGVzLmxlbmd0aFwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImlneC1jYXJvdXNlbF9fYXJyb3ctLXByZXZcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfcHJldmlvdXNfc2xpZGVcIiAoa2V5ZG93bi5lbnRlcik9XCJwcmV2KClcIiAoY2xpY2spPVwicHJldigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldFByZXZCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogcHJldkJ1dHRvbkRpc2FibGVkfTtcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwibmF2aWdhdGlvbiAmJiBzbGlkZXMubGVuZ3RoXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiaWd4LWNhcm91c2VsX19hcnJvdy0tbmV4dFwiIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9uZXh0X3NsaWRlXCIgKGtleWRvd24uZW50ZXIpPVwibmV4dCgpXCIgKGNsaWNrKT1cIm5leHQoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXROZXh0QnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG5leHRCdXR0b25EaXNhYmxlZH07XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuXG5cbiJdfQ==
973
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBS0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQTRCLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFrQixNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVB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QVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdCeEQsZUFBZTtzQkFEekIsS0FBSztnQkE0SEssUUFBUTtzQkFEbEIsS0FBSztnQkFnQ0MsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVd2QyxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3RDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUJ4QixhQUFhO3NCQURuQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXakMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV2hDLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsWUFBWTtnQkFVbkIsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxZQUFZO2dCQVNuQixTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU81QixVQUFVO3NCQURoQixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTN0IsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nQ2xhc3MsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZUNvbmZpZywgSEFNTUVSX0dFU1RVUkVfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTiwgSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncywgbWtlbnVtLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuaW1wb3J0IHsgSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5ndWxhci1hbmltYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEhvcml6b250YWxBbmltYXRpb25UeXBlLCBJZ3hDYXJvdXNlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2Nhcm91c2VsLWJhc2UnO1xuaW1wb3J0IHsgSWd4Q2Fyb3VzZWxJbmRpY2F0b3JEaXJlY3RpdmUsIElneENhcm91c2VsTmV4dEJ1dHRvbkRpcmVjdGl2ZSwgSWd4Q2Fyb3VzZWxQcmV2QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9jYXJvdXNlbC5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElneFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZXNNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS90b3VjaCc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuZXhwb3J0IGNvbnN0IENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uID0gbWtlbnVtKHtcbiAgICBib3R0b206ICdib3R0b20nLFxuICAgIHRvcDogJ3RvcCdcbn0pO1xuZXhwb3J0IHR5cGUgQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAodHlwZW9mIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uKVtrZXlvZiB0eXBlb2YgQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb25dO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxIYW1tZXJDb25maWcgZXh0ZW5kcyBIYW1tZXJHZXN0dXJlQ29uZmlnIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3ZlcnJpZGVzID0ge1xuICAgICAgICBwYW46IHsgZGlyZWN0aW9uOiBIYW1tZXJHZXN0dXJlc01hbmFnZXIuSGFtbWVyPy5ESVJFQ1RJT05fSE9SSVpPTlRBTCB9XG4gICAgfTtcbn1cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgQ2Fyb3VzZWwqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvY2Fyb3VzZWwuaHRtbClcbiAqXG4gKiBUaGUgSWduaXRlIFVJIENhcm91c2VsIGlzIHVzZWQgdG8gYnJvd3NlIG9yIG5hdmlnYXRlIHRocm91Z2ggYSBjb2xsZWN0aW9uIG9mIHNsaWRlcy4gU2xpZGVzIGNhbiBjb250YWluIGN1c3RvbVxuICogY29udGVudCBzdWNoIGFzIGltYWdlcyBvciBjYXJkcyBhbmQgYmUgdXNlZCBmb3IgdGhpbmdzIHN1Y2ggYXMgb24tYm9hcmRpbmcgdHV0b3JpYWxzIG9yIHBhZ2UtYmFzZWQgaW50ZXJmYWNlcy5cbiAqIEl0IGNhbiBiZSB1c2VkIGFzIGEgc2VwYXJhdGUgZnVsbHNjcmVlbiBlbGVtZW50IG9yIGluc2lkZSBhbm90aGVyIGNvbXBvbmVudC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1jYXJvdXNlbD5cbiAqICAgPGlneC1zbGlkZT5cbiAqICAgICA8aDM+Rmlyc3QgU2xpZGUgSGVhZGVyPC9oMz5cbiAqICAgICA8cD5GaXJzdCBzbGlkZSBDb250ZW50PC9wPlxuICogICA8aWd4LXNsaWRlPlxuICogICA8aWd4LXNsaWRlPlxuICogICAgIDxoMz5TZWNvbmQgU2xpZGUgSGVhZGVyPC9oMz5cbiAqICAgICA8cD5TZWNvbmQgU2xpZGUgQ29udGVudDwvcD5cbiAqIDwvaWd4LWNhcm91c2VsPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBIQU1NRVJfR0VTVFVSRV9DT05GSUcsXG4gICAgICAgICAgICB1c2VDbGFzczogQ2Fyb3VzZWxIYW1tZXJDb25maWdcbiAgICAgICAgfVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBvdXRsaW5lLXN0eWxlOiBub25lO1xuICAgIH1gXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hJY29uQ29tcG9uZW50LCBOZ0lmLCBOZ0NsYXNzLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBJZ3hDYXJvdXNlbENvbXBvbmVudCBleHRlbmRzIElneENhcm91c2VsQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgaWRgIG9mIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCBvZiB0aGUgZmlyc3QgY2Fyb3VzZWwgY29tcG9uZW50IHdpbGwgYmUgYFwiaWd4LWNhcm91c2VsLTBcImAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgaWQ9XCJteS1maXJzdC1jYXJvdXNlbFwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtY2Fyb3VzZWwtJHtORVhUX0lEKyt9YDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNhcm91c2VsUm9sZSA9ICB0aGlzLmNhcm91c2VsLnJvbGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHB1YmxpYyByb2xlID0gJ3JlZ2lvbic7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbicpXG4gICAgcHVibGljIHJvbGVEZXNjcmlwdGlvbiA9ICdjYXJvdXNlbCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsbGVkYnknKVxuICAgIHB1YmxpYyBnZXQgbGFiZWxJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0luZGljYXRvcnNMYWJlbCA/IGAke3RoaXMuaWR9LWxhYmVsYCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIGNhcm91c2VsIGNvbXBvbmVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNsYXNzID0gIHRoaXMuY2Fyb3VzZWwuY3NzQ2xhc3M7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYXJvdXNlbCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1jYXJvdXNlbCc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgdG91Y2gtYWN0aW9uYCBzdHlsZSBvZiB0aGUgYGxpc3QgaXRlbWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b3VjaEFjdGlvbiA9IHRoaXMubGlzdEl0ZW0udG91Y2hBY3Rpb247XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS50b3VjaC1hY3Rpb24nKVxuICAgIHB1YmxpYyBnZXQgdG91Y2hBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlc3R1cmVzU3VwcG9ydCA/ICdwYW4teScgOiAnYXV0byc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgYGxvb3BgIGJhY2sgdG8gdGhlIGZpcnN0IHNsaWRlIGFmdGVyIHJlYWNoaW5nIHRoZSBsYXN0IHNsaWRlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtsb29wXT1cImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcHVibGljIGxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSBjYXJvdXNlbCB3aWxsIGBwYXVzZWAgdGhlIHNsaWRlIHRyYW5zaXRpb25zIG9uIHVzZXIgaW50ZXJhY3Rpb25zLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jYXJvdXNlbCBbcGF1c2VdPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwdWJsaWMgcGF1c2UgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgc2hvdWxkIHJlbmRlciB0aGUgbGVmdC9yaWdodCBgbmF2aWdhdGlvbmAgYnV0dG9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbmF2aWdhdGlvbl09XCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHB1YmxpYyBuYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhcm91c2VsIHNob3VsZCBzdXBwb3J0IGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW2tleWJvYXJkU3VwcG9ydF09XCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHB1YmxpYyBrZXlib2FyZFN1cHBvcnQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgc2hvdWxkIHN1cHBvcnQgZ2VzdHVyZXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW2dlc3R1cmVzU3VwcG9ydF09XCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHB1YmxpYyBnZXN0dXJlc1N1cHBvcnQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIG1heGltdW0gaW5kZXhlcyB0aGF0IGNhbiBiZSBzaG93bi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbWF4aW11bUluZGljYXRvcnNDb3VudF09XCIxMFwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG1heGltdW1JbmRpY2F0b3JzQ291bnQgPSA1O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBkaXNwbGF5IG1vZGUgb2YgY2Fyb3VzZWwgaW5kaWNhdG9ycy4gSXQgY2FuIGJlIHRvcCBvciBib3R0b20uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgYm90dG9tYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBpbmRpY2F0b3JzT3JpZW50YXRpb249J3RvcCc+XG4gICAgICogPGlneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hTbGlkZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbmRpY2F0b3JzT3JpZW50YXRpb246IENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uID0gQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb24uYm90dG9tO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBhbmltYXRpb24gdHlwZSBvZiBjYXJvdXNlbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBzbGlkZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgYW5pbWF0aW9uVHlwZT0nbm9uZSc+XG4gICAgICogPGlneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hTbGlkZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBvdmVycmlkZSBhbmltYXRpb25UeXBlOiBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZSA9IEhvcml6b250YWxBbmltYXRpb25UeXBlLnNsaWRlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGNhcm91c2VsIGluZGljYXRvcnNcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jYXJvdXNlbC5pbmRpY2F0b3JUZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jYXJvdXNlbCAjY2Fyb3VzZWw+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDYXJvdXNlbEluZGljYXRvciBsZXQtc2xpZGU+XG4gICAgICogICAgICAgICA8aWd4LWljb24gKm5nSWY9XCJzbGlkZS5hY3RpdmVcIj5icmlnaHRuZXNzXzc8L2lneC1pY29uPlxuICAgICAqICAgICAgICAgPGlneC1pY29uICpuZ0lmPVwiIXNsaWRlLmFjdGl2ZVwiPmJyaWdodG5lc3NfNTwvaWd4LWljb24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENhcm91c2VsSW5kaWNhdG9yRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBjYXJvdXNlbCBuZXh0IGJ1dHRvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNhcm91c2VsLm5leHRCdXR0b25UZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jYXJvdXNlbCAjY2Fyb3VzZWw+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDYXJvdXNlbE5leHRCdXR0b24gbGV0LWRpc2FibGVkPlxuICAgICAqICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImZhYlwiIGlneFJpcHBsZT1cIndoaXRlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICogICAgICAgICAgICAgIDxpZ3gtaWNvbj5hZGQ8L2lneC1pY29uPlxuICAgICAqICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYXJvdXNlbE5leHRCdXR0b25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBjYXJvdXNlbCBwcmV2aW91cyBidXR0b25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jYXJvdXNlbC5uZXh0QnV0dG9uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgI2Nhcm91c2VsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q2Fyb3VzZWxQcmV2QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICAgKiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmYWJcIiBpZ3hSaXBwbGU9XCJ3aGl0ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAqICAgICAgICAgICAgICA8aWd4LWljb24+cmVtb3ZlPC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2Fyb3VzZWxQcmV2QnV0dG9uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIHByZXZCdXR0b25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBgc2xpZGVzYCBjdXJyZW50bHkgaW4gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2xpZGVzOiBRdWVyeUxpc3Q8SWd4U2xpZGVDb21wb25lbnQ+ID0gdGhpcy5jYXJvdXNlbC5zbGlkZXM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFNsaWRlQ29tcG9uZW50KVxuICAgIHB1YmxpYyBzbGlkZXM6IFF1ZXJ5TGlzdDxJZ3hTbGlkZUNvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFuZCBgSWd4U2xpZGVDb21wb25lbnRgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoc2xpZGVDaGFuZ2VkKT1cInNsaWRlQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHNsaWRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNhcm91c2VsLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYW5kIGBJZ3hTbGlkZUNvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIChzbGlkZUFkZGVkKT1cInNsaWRlQWRkZWQoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzbGlkZUFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJU2xpZGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhcm91c2VsLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYW5kIGBJZ3hTbGlkZUNvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIChzbGlkZVJlbW92ZWQpPVwic2xpZGVSZW1vdmVkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2xpZGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJU2xpZGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGNhcm91c2VsIGhhcyBiZWVuIHBhdXNlZC5cbiAgICAgKiBQcm92aWRlcyBhIHJlZmVyZW5jZSB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhcyBhbiBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoY2Fyb3VzZWxQYXVzZWQpPVwiY2Fyb3VzZWxQYXVzZWQoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBjYXJvdXNlbFBhdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4Q2Fyb3VzZWxDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGNhcm91c2VsIGhhcyByZXN1bWVkIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBgc2xpZGVzYC5cbiAgICAgKiBQcm92aWRlcyBhIHJlZmVyZW5jZSB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhcyBhbiBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoY2Fyb3VzZWxQbGF5aW5nKT1cImNhcm91c2VsUGxheWluZygkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGNhcm91c2VsUGxheWluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4Q2Fyb3VzZWxDb21wb25lbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkZWZhdWx0SW5kaWNhdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdE5leHRCdXR0b24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRlZmF1bHROZXh0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdFByZXZCdXR0b24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRlZmF1bHRQcmV2QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9wcGVkQnlJbnRlcmFjdGlvbjogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3VycmVudEl0ZW06IElneFNsaWRlQ29tcG9uZW50O1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBwcmV2aW91c0l0ZW06IElneFNsaWRlQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX2ludGVydmFsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyhDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOKTtcbiAgICBwcml2YXRlIGxhc3RJbnRlcnZhbDogYW55O1xuICAgIHByaXZhdGUgcGxheWluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3llZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxJZ3hTbGlkZUNvbXBvbmVudD4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGluY29taW5nU2xpZGU6IElneFNsaWRlQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXRJbmRpY2F0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRJbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldE5leHRCdXR0b25UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMubmV4dEJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0QnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdE5leHRCdXR0b247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldFByZXZCdXR0b25UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMucHJldkJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2QnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFByZXZCdXR0b247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGluZGljYXRvcnNPcmllbnRhdGlvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gYGlneC1jYXJvdXNlbC1pbmRpY2F0b3JzLS0ke3RoaXMuaW5kaWNhdG9yc09yaWVudGF0aW9ufWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dJbmRpY2F0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbCA8PSB0aGlzLm1heGltdW1JbmRpY2F0b3JzQ291bnQgJiYgdGhpcy50b3RhbCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dJbmRpY2F0b3JzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsID4gdGhpcy5tYXhpbXVtSW5kaWNhdG9yc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXRDYXJvdXNlbExhYmVsKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50ICsgMX0gJHt0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfb2Z9ICR7dGhpcy50b3RhbH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBgc2xpZGVzYCBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbGlkZUNvdW50ID0gIHRoaXMuY2Fyb3VzZWwudG90YWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcz8ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgc2xpZGUgYmVpbmcgY3VycmVudGx5IHNob3duLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY3VycmVudFNsaWRlTnVtYmVyID0gIHRoaXMuY2Fyb3VzZWwuY3VycmVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudEl0ZW0gPyAwIDogdGhpcy5jdXJyZW50SXRlbS5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjYXJvdXNlbCBpcyBwbGF5aW5nLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNQbGF5aW5nID0gIHRoaXMuY2Fyb3VzZWwuaXNQbGF5aW5nO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXlpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyDQsCBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNhcm91c2VsIGlzIGRlc3Ryb3llZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzRGVzdHJveWVkID0gIHRoaXMuY2Fyb3VzZWwuaXNEZXN0cm95ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNhcm91c2VsIGVsZW1lbnQgaW4gdGhlIERPTS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG5hdGl2ZUVsZW1lbnQgPSAgdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGBpbnRlcnZhbGAgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2xpZGUgY2hhbmdlcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRpbWVJbnRlcnZhbCA9IHRoaXMuY2Fyb3VzZWwuaW50ZXJ2YWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVydmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpbWUgYGludGVydmFsYCBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBzbGlkZSBjaGFuZ2VzLlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBjYXJvdXNlbCB3aWxsIG5vdCBjaGFuZ2UgYHNsaWRlc2AgYXV0b21hdGljYWxseS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbaW50ZXJ2YWxdPVwiMTAwMFwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBpbnRlcnZhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gK3ZhbHVlO1xuICAgICAgICB0aGlzLnJlc3RhcnRJbnRlcnZhbCgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgc3VwZXIoYW5pbWF0aW9uU2VydmljZSwgY2RyKTtcbiAgICAgICAgdGhpcy5kaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dyaWdodCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkFycm93UmlnaHQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2xpZGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dsZWZ0JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dMZWZ0KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucHJldigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NsaWRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd0YXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblRhcChldmVudCkge1xuICAgICAgICAvLyBwbGF5IHBhdXNlIG9ubHkgd2hlbiB0YXAgb24gc2xpZGVcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpZ3gtc2xpZGUnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGF1c2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0ICYmIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5maXJzdC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NsaWRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVuZCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkVuZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN1cHBvcnQgJiYgdGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmxhc3QuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gICAgcHVibGljIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucGF1c2UgJiYgdGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gICAgcHVibGljIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYW5sZWZ0JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25QYW5MZWZ0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMucGFuKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BhbnJpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25QYW5SaWdodChldmVudCkge1xuICAgICAgICB0aGlzLnBhbihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BhbmVuZCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFuRW5kKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5nZXN0dXJlc1N1cHBvcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHBhbk9mZnNldCA9IChzbGlkZVdpZHRoIC8gMTAwMCk7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKGV2ZW50LmRlbHRhWCkgKyBwYW5PZmZzZXQgPCBzbGlkZVdpZHRoID8gTWF0aC5hYnMoZXZlbnQuZGVsdGFYKSA6IHNsaWRlV2lkdGggLSBwYW5PZmZzZXQ7XG4gICAgICAgIGNvbnN0IHZlbG9jaXR5ID0gTWF0aC5hYnMoZXZlbnQudmVsb2NpdHkpO1xuICAgICAgICB0aGlzLnJlc2V0U2xpZGVTdHlsZXModGhpcy5jdXJyZW50SXRlbSk7XG4gICAgICAgIGlmICh0aGlzLmluY29taW5nU2xpZGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTbGlkZVN0eWxlcyh0aGlzLmluY29taW5nU2xpZGUpO1xuICAgICAgICAgICAgaWYgKHNsaWRlV2lkdGggLyAyIDwgZGVsdGFYIHx8IHZlbG9jaXR5ID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5kaXJlY3Rpb24gPSBldmVudC5kZWx0YVggPCAwID8gRGlyZWN0aW9uLk5FWFQgOiBEaXJlY3Rpb24uUFJFVjtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUucHJldmlvdXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUG9zaXRpb24gPSB0aGlzLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLmZhZGUgP1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggLyBzbGlkZVdpZHRoIDogKHNsaWRlV2lkdGggLSBkZWx0YVgpIC8gc2xpZGVXaWR0aDtcblxuICAgICAgICAgICAgICAgIGlmICh2ZWxvY2l0eSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdEdXJhdGlvbiA9IHRoaXMuZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uIC8gdmVsb2NpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmRpcmVjdGlvbiA9IGV2ZW50LmRlbHRhWCA+IDAgPyBEaXJlY3Rpb24uTkVYVCA6IERpcmVjdGlvbi5QUkVWO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNJdGVtID0gdGhpcy5pbmNvbWluZ1NsaWRlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvblBvc2l0aW9uID0gdGhpcy5hbmltYXRpb25UeXBlID09PSBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZS5mYWRlID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMoKHNsaWRlV2lkdGggLSBkZWx0YVgpIC8gc2xpZGVXaWR0aCkgOiBkZWx0YVggLyBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMucGxheUFuaW1hdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zbGlkZXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlOiBRdWVyeUxpc3Q8SWd4U2xpZGVDb21wb25lbnQ+KSA9PiB0aGlzLmluaXRTbGlkZXMoY2hhbmdlKSk7XG5cbiAgICAgICAgdGhpcy5pbml0U2xpZGVzKHRoaXMuc2xpZGVzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMubGFzdEludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMubGFzdEludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNsaWRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIGBpbmRleGAgb3IgbnVsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNsaWRlMSA9ICB0aGlzLmNhcm91c2VsLmdldCgxKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IElneFNsaWRlQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmZpbmQoKHNsaWRlKSA9PiBzbGlkZS5pbmRleCA9PT0gaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc2xpZGUgdG8gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLmFkZChuZXdTbGlkZSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBuZXdTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIG5ld1NsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgdGhpcy5zbGlkZXMucmVzZXQobmV3U2xpZGVzKTtcbiAgICAgICAgdGhpcy5zbGlkZXMubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHNsaWRlIGZyb20gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLnJlbW92ZShzbGlkZSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICBpZiAoc2xpZGUgJiYgc2xpZGUgPT09IHRoaXMuZ2V0KHNsaWRlLmluZGV4KSkgeyAvLyBjaGVjayBpZiB0aGUgcmVxdWVzdGVkIHNsaWRlIGZvciBkZWxldGUgaXMgcHJlc2VudCBpbiB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAgIGNvbnN0IG5ld1NsaWRlcyA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIG5ld1NsaWRlcy5zcGxpY2Uoc2xpZGUuaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMucmVzZXQobmV3U2xpZGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogS2lja3MgaW4gYSB0cmFuc2l0aW9uIGZvciBhIGdpdmVuIHNsaWRlIHdpdGggYSBnaXZlbiBgZGlyZWN0aW9uYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5zZWxlY3QodGhpcy5jYXJvdXNlbC5nZXQoMiksIERpcmVjdGlvbi5ORVhUKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3Qoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50LCBkaXJlY3Rpb246IERpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FKSB7XG4gICAgICAgIGlmIChzbGlkZSAmJiBzbGlkZSAhPT0gdGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgc2xpZGUuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgc2xpZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHNsaWRlIGluIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5uZXh0KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE5leHRJbmRleCgpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiAhdGhpcy5sb29wKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3QodGhpcy5nZXQoaW5kZXgpLCBEaXJlY3Rpb24uTkVYVCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbnMgdG8gdGhlIHByZXZpb3VzIHNsaWRlIGluIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5wcmV2KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldigpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFByZXZJbmRleCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5sb29wICYmIGluZGV4ID09PSB0aGlzLnRvdGFsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KHRoaXMuZ2V0KGluZGV4KSwgRGlyZWN0aW9uLlBSRVYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3VtZXMgcGxheWluZyBvZiB0aGUgY2Fyb3VzZWwgaWYgaW4gcGF1c2VkIHN0YXRlLlxuICAgICAqIE5vIG9wZXJhdGlvbiBvdGhlcndpc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwucGxheSgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwbGF5KCkge1xuICAgICAgICBpZiAoIXRoaXMucGxheWluZykge1xuICAgICAgICAgICAgdGhpcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxQbGF5aW5nLmVtaXQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RhcnRJbnRlcnZhbCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgc2xpZGUgdHJhbnNpdGlvbnMgaWYgdGhlIGBwYXVzZWAgb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWAuXG4gICAgICogTm8gb3BlcmF0aW9uIG90aGVyd2lzZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHRoaXMuY2Fyb3VzZWwuc3RvcCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5wYXVzZSkge1xuICAgICAgICAgICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsUGF1c2VkLmVtaXQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0SW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQcmV2aW91c0VsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2aW91c0l0ZW0ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q3VycmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEludGVydmFsKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5sYXN0SW50ZXJ2YWwpO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0YXJ0SW50ZXJ2YWwoKSB7XG4gICAgICAgIHRoaXMucmVzZXRJbnRlcnZhbCgpO1xuXG4gICAgICAgIGlmICghaXNOYU4odGhpcy5pbnRlcnZhbCkgJiYgdGhpcy5pbnRlcnZhbCA+IDAgJiYgdGhpcy5wbGF0Zm9ybVV0aWwuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrID0gK3RoaXMuaW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxheWluZyAmJiB0aGlzLnRvdGFsICYmICFpc05hTih0aWNrKSAmJiB0aWNrID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLmludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBuZXh0QnV0dG9uRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5sb29wICYmIHRoaXMuY3VycmVudCA9PT0gKHRoaXMudG90YWwgLSAxKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgcHJldkJ1dHRvbkRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnQgPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnQgKyAxKSAlIHRoaXMudG90YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmV2SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCAtIDEgPCAwID8gdGhpcy50b3RhbCAtIDEgOiB0aGlzLmN1cnJlbnQgLSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTbGlkZVN0eWxlcyhzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgc2xpZGUubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgc2xpZGUubmF0aXZlRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYW4oZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc2xpZGVXaWR0aCA9IHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgcGFuT2Zmc2V0ID0gKHNsaWRlV2lkdGggLyAxMDAwKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gZXZlbnQuZGVsdGFYO1xuICAgICAgICBjb25zdCBpbmRleCA9IGRlbHRhWCA8IDAgPyB0aGlzLmdldE5leHRJbmRleCgpIDogdGhpcy5nZXRQcmV2SW5kZXgoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZGVsdGFYIDwgMCA/IHNsaWRlV2lkdGggKyBkZWx0YVggOiAtc2xpZGVXaWR0aCArIGRlbHRhWDtcblxuICAgICAgICBpZiAoIXRoaXMuZ2VzdHVyZXNTdXBwb3J0IHx8IGV2ZW50LmlzRmluYWwgfHwgTWF0aC5hYnMoZGVsdGFYKSArIHBhbk9mZnNldCA+PSBzbGlkZVdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiAoKHRoaXMuY3VycmVudCA9PT0gMCAmJiBkZWx0YVggPiAwKSB8fCAodGhpcy5jdXJyZW50ID09PSB0aGlzLnRvdGFsIC0gMSAmJiBkZWx0YVggPCAwKSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcmV2aW91c0l0ZW0gJiYgdGhpcy5wcmV2aW91c0l0ZW0ucHJldmlvdXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maW5pc2hBbmltYXRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5jb21pbmdTbGlkZSkge1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLmluY29taW5nU2xpZGUuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2xpZGVTdHlsZXModGhpcy5pbmNvbWluZ1NsaWRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUucHJldmlvdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUgPSB0aGlzLmdldChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUgPSB0aGlzLmdldChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLnByZXZpb3VzID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25UeXBlID09PSBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZS5mYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IGAke01hdGguYWJzKG9mZnNldCkgLyBzbGlkZVdpZHRofWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7b2Zmc2V0fXB4KWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlcihzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMuZGVzdHJveSQsIHNsaWRlLmlzRGVzdHJveWVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2xpZGVBY3RpdmF0ZWQoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChzbGlkZS5hY3RpdmUgJiYgc2xpZGUgIT09IHRoaXMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChzbGlkZS5kaXJlY3Rpb24gPT09IERpcmVjdGlvbi5OT05FKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBzbGlkZS5pbmRleDtcbiAgICAgICAgICAgICAgICBzbGlkZS5kaXJlY3Rpb24gPSBuZXdJbmRleCA+IHRoaXMuY3VycmVudCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNJdGVtICYmIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0uZGlyZWN0aW9uID0gc2xpZGUuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0uYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbSA9IHRoaXMuY3VycmVudEl0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHNsaWRlO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckFuaW1hdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHNsaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zbGlkZUNoYW5nZWQuZW1pdCh7IGNhcm91c2VsOiB0aGlzLCBzbGlkZSB9KTtcbiAgICAgICAgICAgIHRoaXMucmVzdGFydEludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgZmluaXNoQW5pbWF0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uU3RhcnRlZCh0aGlzLmxlYXZlQW5pbWF0aW9uUGxheWVyKSkge1xuICAgICAgICAgICAgdGhpcy5sZWF2ZUFuaW1hdGlvblBsYXllci5maW5pc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvblN0YXJ0ZWQodGhpcy5lbnRlckFuaW1hdGlvblBsYXllcikpIHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXJBbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTbGlkZXMoY2hhbmdlOiBRdWVyeUxpc3Q8SWd4U2xpZGVDb21wb25lbnQ+KSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLmRpZmZlci5kaWZmKGNoYW5nZS50b0FycmF5KCkpO1xuICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMucmVkdWNlKChhbnksIGMsIGluZCkgPT4gYy5pbmRleCA9IGluZCwgMCk7IC8vIHJlc2V0IHNsaWRlcyBpbmRleGVzXG4gICAgICAgICAgICBkaWZmLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8SWd4U2xpZGVDb21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSByZWNvcmQuaXRlbTtcbiAgICAgICAgICAgICAgICBzbGlkZS50b3RhbCA9IHRoaXMudG90YWw7XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZUFkZGVkLmVtaXQoeyBjYXJvdXNlbDogdGhpcywgc2xpZGUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gc2xpZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNsaWRlLmFjdGl2ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlcihzbGlkZSkpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblNsaWRlQWN0aXZhdGVkKHNsaWRlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGlmZi5mb3JFYWNoUmVtb3ZlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8SWd4U2xpZGVDb21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSByZWNvcmQuaXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlUmVtb3ZlZC5lbWl0KHsgY2Fyb3VzZWw6IHRoaXMsIHNsaWRlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzbGlkZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSB0aGlzLmdldChzbGlkZS5pbmRleCA8IHRoaXMudG90YWwgPyBzbGlkZS5pbmRleCA6IHRoaXMudG90YWwgLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVTbGlkZXNTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2xpZGVzU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlU2xpZGVzID0gdGhpcy5zbGlkZXMuZmlsdGVyKHNsaWRlID0+IHNsaWRlLmFjdGl2ZSAmJiBzbGlkZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50SXRlbS5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNsaWRlcy5mb3JFYWNoKHNsaWRlID0+IHNsaWRlLmFjdGl2ZSA9IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZXMuZmlyc3QuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGZvY3VzU2xpZGVFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5sZWF2ZUFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgdGhpcy5sZWF2ZUFuaW1hdGlvblBsYXllci5hbmltYXRpb25FbmRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZpbmQocyA9PiBzLmFjdGl2ZSkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuc2xpZGVzLmZpbmQocyA9PiBzLmFjdGl2ZSkubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbGlkZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjYXJvdXNlbDogSWd4Q2Fyb3VzZWxDb21wb25lbnQ7XG4gICAgc2xpZGU6IElneFNsaWRlQ29tcG9uZW50O1xufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yIGxldC1zbGlkZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LW5hdi1kb3RcIlxuICAgICAgICBbY2xhc3MuaWd4LW5hdi1kb3QtLWFjdGl2ZV09XCJzbGlkZS5hY3RpdmVcIj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5leHRCdXR0b24gbGV0LWRpc2FibGVkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LW5hdi1hcnJvd1wiXG4gICAgICAgICAgW2NsYXNzLmlneC1uYXYtYXJyb3ctLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxpZ3gtaWNvbj5hcnJvd19mb3J3YXJkPC9pZ3gtaWNvbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQcmV2QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1uYXYtYXJyb3dcIlxuICAgICAgICAgIFtjbGFzcy5pZ3gtbmF2LWFycm93LS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICA8aWd4LWljb24+YXJyb3dfYmFjazwvaWd4LWljb24+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAqbmdJZj1cInNob3dJbmRpY2F0b3JzXCIgW25nQ2xhc3NdPVwiaW5kaWNhdG9yc09yaWVudGF0aW9uQ2xhc3NcIiBbYXR0ci5yb2xlXT1cIid0YWJsaXN0J1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhcm91c2VsLWluZGljYXRvcnNfX2luZGljYXRvclwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3Qoc2xpZGUpXCJcbiAgICAgICAgW2lkXT1cIid0YWItJysgc2xpZGUuaW5kZXggKyAnLScgKyB0b3RhbFwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwiJ3RhYidcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfc2xpZGUgKyAnICcgKyAoc2xpZGUuaW5kZXggKyAxKSArICcgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfb2YgKyAnICcgKyB0aGlzLnRvdGFsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIncGFuZWwtJyArIHNsaWRlLmluZGV4XCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzbGlkZS5hY3RpdmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldEluZGljYXRvclRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBzbGlkZX07XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInNob3dJbmRpY2F0b3JzTGFiZWxcIiBbbmdDbGFzc109XCJpbmRpY2F0b3JzT3JpZW50YXRpb25DbGFzc1wiPlxuICAgIDxzcGFuIFtpZF09XCJsYWJlbElkXCIgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2xhYmVsXCI+e3tnZXRDYXJvdXNlbExhYmVsfX08L3NwYW4+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1jYXJvdXNlbF9faW5uZXJcIiBbYXR0ci5hcmlhLWxpdmVdPVwiIWludGVydmFsIHx8IHN0b3BwZWRCeUludGVyYWN0aW9uID8gJ3BvbGl0ZScgOiAnb2ZmJ1wiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwibmF2aWdhdGlvbiAmJiBzbGlkZXMubGVuZ3RoXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiaWd4LWNhcm91c2VsX19hcnJvdy0tcHJldlwiIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9wcmV2aW91c19zbGlkZVwiIChrZXlkb3duLmVudGVyKT1cInByZXYoKVwiIChjbGljayk9XCJwcmV2KClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0UHJldkJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBwcmV2QnV0dG9uRGlzYWJsZWR9O1wiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJuYXZpZ2F0aW9uICYmIHNsaWRlcy5sZW5ndGhcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2Fycm93LS1uZXh0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX25leHRfc2xpZGVcIiAoa2V5ZG93bi5lbnRlcik9XCJuZXh0KClcIiAoY2xpY2spPVwibmV4dCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldE5leHRCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogbmV4dEJ1dHRvbkRpc2FibGVkfTtcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG5cblxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Stripped-down HammerJS annotations.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2gtYW5ub3RhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS90b3VjaC1hbm5vdGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RyaXBwZWQtZG93biBIYW1tZXJKUyBhbm5vdGF0aW9ucy5cbiAqL1xuXG4vKipcbiogQGhpZGRlblxuKiBAaW50ZXJuYWxcbiovXG5leHBvcnQgaW50ZXJmYWNlIEhhbW1lcklucHV0IHtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBkZWx0YVg6IG51bWJlcjtcbiAgICBkZWx0YVk6IG51bWJlcjtcbiAgICBjZW50ZXI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH07XG4gICAgcG9pbnRlclR5cGU6IHN0cmluZztcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xufVxuXG4vKipcbiogQGhpZGRlblxuKiBAaW50ZXJuYWxcbiovXG5leHBvcnQgaW50ZXJmYWNlIEhhbW1lclN0YXRpYyB7XG4gICAgbmV3KGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCwgb3B0aW9ucz86IGFueSk6IEhhbW1lck1hbmFnZXI7XG5cbiAgICBQYW46IFJlY29nbml6ZXI7XG4gICAgU3dpcGU6IFJlY29nbml6ZXI7XG4gICAgVGFwOiBSZWNvZ25pemVyO1xuICAgIFRvdWNoSW5wdXQ6IEhhbW1lcklucHV0O1xuICAgIERJUkVDVElPTl9IT1JJWk9OVEFMOiBudW1iZXI7XG4gICAgRElSRUNUSU9OX1ZFUlRJQ0FMOiBudW1iZXI7XG59XG5cbi8qKlxuKiBAaGlkZGVuXG4qIEBpbnRlcm5hbFxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb2duaXplciB7IH1cblxuLyoqXG4qIEBoaWRkZW5cbiogQGludGVybmFsXG4qL1xuZXhwb3J0IGludGVyZmFjZSBIYW1tZXJNYW5hZ2VyIHtcbiAgICBzZXQob3B0aW9uczogYW55KTogSGFtbWVyTWFuYWdlcjtcbiAgICBvZmYoZXZlbnRzOiBzdHJpbmcsIGhhbmRsZXI/OiAoZXZlbnQ6IEhhbW1lcklucHV0KSA9PiB2b2lkKTogdm9pZDtcbiAgICBvbihldmVudHM6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBIYW1tZXJJbnB1dCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZGVzdHJveSgpOiB2b2lkO1xuICAgIGdldChldmVudDogc3RyaW5nKTogSGFtbWVyTWFuYWdlcjtcbn1cblxuLyoqXG4qIEBoaWRkZW5cbiogQGludGVybmFsXG4qL1xuZXhwb3J0IGludGVyZmFjZSBIYW1tZXJPcHRpb25zIHtcbiAgICBjc3NQcm9wcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcmVjb2duaXplcnM/OiBhbnlbXTtcbiAgICBpbnB1dENsYXNzPzogSGFtbWVySW5wdXQ7XG59XG4iXX0=
@@ -11,6 +11,7 @@ const EVENT_SUFFIX = 'precise';
11
11
  * @hidden
12
12
  */
13
13
  export class HammerGesturesManager {
14
+ static { this.Hammer = typeof window !== 'undefined' ? window.Hammer : null; }
14
15
  constructor(_zone, doc, platformUtil) {
15
16
  this._zone = _zone;
16
17
  this.doc = doc;
@@ -21,16 +22,16 @@ export class HammerGesturesManager {
21
22
  this.hammerOptions = {};
22
23
  this._hammerManagers = [];
23
24
  this.platformBrowser = this.platformUtil.isBrowser;
24
- if (this.platformBrowser) {
25
+ if (this.platformBrowser && HammerGesturesManager.Hammer) {
25
26
  this.hammerOptions = {
26
27
  // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)
27
28
  // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803
28
- inputClass: Hammer.TouchInput,
29
+ inputClass: HammerGesturesManager.Hammer.TouchInput,
29
30
  recognizers: [
30
- [Hammer.Pan, { threshold: 0 }],
31
- [Hammer.Swipe, { direction: Hammer.DIRECTION_HORIZONTAL }],
32
- [Hammer.Tap],
33
- [Hammer.Tap, { event: 'doubletap', taps: 2 }, ['tap']]
31
+ [HammerGesturesManager.Hammer.Pan, { threshold: 0 }],
32
+ [HammerGesturesManager.Hammer.Swipe, { direction: HammerGesturesManager.Hammer.DIRECTION_HORIZONTAL }],
33
+ [HammerGesturesManager.Hammer.Tap],
34
+ [HammerGesturesManager.Hammer.Tap, { event: 'doubletap', taps: 2 }, ['tap']]
34
35
  ]
35
36
  };
36
37
  }
@@ -48,10 +49,14 @@ export class HammerGesturesManager {
48
49
  }
49
50
  // Creating the manager bind events, must be done outside of angular
50
51
  return this._zone.runOutsideAngular(() => {
52
+ if (!HammerGesturesManager.Hammer) {
53
+ //no hammer
54
+ return;
55
+ }
51
56
  let mc = this.getManagerForElement(element);
52
57
  if (mc === null) {
53
58
  // new Hammer is a shortcut for Manager with defaults
54
- mc = new Hammer(element, Object.assign(this.hammerOptions, options));
59
+ mc = new HammerGesturesManager.Hammer(element, Object.assign(this.hammerOptions, options));
55
60
  this.addManagerForElement(element, mc);
56
61
  }
57
62
  const handler = (eventObj) => this._zone.run(() => eventHandler(eventObj));
@@ -66,7 +71,7 @@ export class HammerGesturesManager {
66
71
  * @param target Can be one of either window, body or document(fallback default).
67
72
  */
68
73
  addGlobalEventListener(target, eventName, eventHandler) {
69
- if (!this.platformBrowser) {
74
+ if (!this.platformBrowser || !HammerGesturesManager.Hammer) {
70
75
  return;
71
76
  }
72
77
  const element = this.getGlobalEventTarget(target);
@@ -149,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
149
154
  type: Inject,
150
155
  args: [DOCUMENT]
151
156
  }] }, { type: i1.PlatformUtil }] });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS90b3VjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRzNDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7SUFTOUIsWUFBb0IsS0FBYSxFQUE0QixHQUFRLEVBQVUsWUFBMEI7UUFBckYsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUE0QixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSekc7O1dBRUc7UUFDTyxrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFHcEMsb0JBQWUsR0FBNEQsRUFBRSxDQUFDO1FBR2xGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUc7Z0JBQ2pCLDhHQUE4RztnQkFDOUcscUZBQXFGO2dCQUNyRixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzdCLFdBQVcsRUFBRTtvQkFDVCxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDMUQsQ0FBQyxNQUFNLENBQUMsR0FBRyxD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ICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1Z2V0RE9NIGFzIGdldERPTSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEVWRU5UX1NVRkZJWCA9ICdwcmVjaXNlJztcblxuLyoqXG4gKiBUb3VjaCBnZXN0dXJlcyBtYW5hZ2VyIGJhc2VkIG9uIEhhbW1lci5qc1xuICogVXNlIHdpdGggY2F1dGlvbiwgdGhpcyB3aWxsIHRyYWNrIHJlZmVyZW5jZXMgZm9yIHNpbmdsZSBtYW5hZ2VyIHBlciBlbGVtZW50LiBWZXJ5IFRCRC4gTXVjaCBUT0RPLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhhbW1lckdlc3R1cmVzTWFuYWdlciB7XG4gICAgLyoqXG4gICAgICogRXZlbnQgb3B0aW9uIGRlZmF1bHRzIGZvciBlYWNoIHJlY29nbml6ZXIsIHNlZSBodHRwOi8vaGFtbWVyanMuZ2l0aHViLmlvL2FwaS8gZm9yIEFQSSBsaXN0aW5nLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYW1tZXJPcHRpb25zOiBIYW1tZXJPcHRpb25zID0ge307XG5cbiAgICBwcml2YXRlIHBsYXRmb3JtQnJvd3NlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9oYW1tZXJNYW5hZ2VyczogQXJyYXk8eyBlbGVtZW50OiBFdmVudFRhcmdldDsgbWFuYWdlcjogSGFtbWVyTWFuYWdlciB9PiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfem9uZTogTmdab25lLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55LCBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMucGxhdGZvcm1Ccm93c2VyID0gdGhpcy5wbGF0Zm9ybVV0aWwuaXNCcm93c2VyO1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybUJyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaGFtbWVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAvLyBELlAuICM0NDcgRm9yY2UgVG91Y2hJbnB1dCBkdWUgdG8gUG9pbnRlckV2ZW50SW5wdXQgYnVnIChodHRwczovL2dpdGh1Yi5jb20vaGFtbWVyanMvaGFtbWVyLmpzL2lzc3Vlcy8xMDY1KVxuICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vSWduaXRlVUkvaWduaXRldWktYW5ndWxhci9pc3N1ZXMvNDQ3I2lzc3VlY29tbWVudC0zMjQ2MDE4MDNcbiAgICAgICAgICAgICAgICBpbnB1dENsYXNzOiBIYW1tZXIuVG91Y2hJbnB1dCxcbiAgICAgICAgICAgICAgICByZWNvZ25pemVyczogW1xuICAgICAgICAgICAgICAgICAgICBbSGFtbWVyLlBhbiwgeyB0aHJlc2hvbGQ6IDAgfV0sXG4gICAgICAgICAgICAgICAgICAgIFtIYW1tZXIuU3dpcGUsIHsgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgfV0sXG4gICAgICAgICAgICAgICAgICAgIFtIYW1tZXIuVGFwXSxcbiAgICAgICAgICAgICAgICAgICAgW0hhbW1lci5UYXAsIHsgZXZlbnQ6ICdkb3VibGV0YXAnLCB0YXBzOiAyIH0sIFsndGFwJ11dXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdXBwb3J0cyhldmVudE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy4nICsgRVZFTlRfU1VGRklYKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbGlzdGVuZXIgZXh0ZW5kZWQgd2l0aCBvcHRpb25zIGZvciBIYW1tZXIuanMuIFdpbGwgdXNlIGRlZmF1bHRzIGlmIG5vbmUgYXJlIHByb3ZpZGVkLlxuICAgICAqIE1vZGVsaW5nIGFmdGVyIG90aGVyIGV2ZW50IHBsdWdpbnMgZm9yIGVhc3kgZnV0dXJlIG1vZGlmaWNhdGlvbnMuXG4gICAgICovXG4gICAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgZXZlbnRIYW5kbGVyOiAoZXZlbnRPYmopID0+IHZvaWQsXG4gICAgICAgIG9wdGlvbnM6IEhhbW1lck9wdGlvbnMgPSBudWxsKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybUJyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0aW5nIHRoZSBtYW5hZ2VyIGJpbmQgZXZlbnRzLCBtdXN0IGJlIGRvbmUgb3V0c2lkZSBvZiBhbmd1bGFyXG4gICAgICAgIHJldHVybiB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtYzogSGFtbWVyTWFuYWdlciA9IHRoaXMuZ2V0TWFuYWdlckZvckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobWMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBuZXcgSGFtbWVyIGlzIGEgc2hvcnRjdXQgZm9yIE1hbmFnZXIgd2l0aCBkZWZhdWx0c1xuICAgICAgICAgICAgICAgIG1jID0gbmV3IEhhbW1lcihlbGVtZW50LCBPYmplY3QuYXNzaWduKHRoaXMuaGFtbWVyT3B0aW9ucywgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTWFuYWdlckZvckVsZW1lbnQoZWxlbWVudCwgbWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudE9iaikgPT4gdGhpcy5fem9uZS5ydW4oKCkgPT4gZXZlbnRIYW5kbGVyKGV2ZW50T2JqKSk7XG4gICAgICAgICAgICBtYy5vbihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IG1jLm9mZihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbGlzdGVuZXIgZXh0ZW5kZWQgd2l0aCBvcHRpb25zIGZvciBIYW1tZXIuanMuIFdpbGwgdXNlIGRlZmF1bHRzIGlmIG5vbmUgYXJlIHByb3ZpZGVkLlxuICAgICAqIE1vZGVsaW5nIGFmdGVyIG90aGVyIGV2ZW50IHBsdWdpbnMgZm9yIGVhc3kgZnV0dXJlIG1vZGlmaWNhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IENhbiBiZSBvbmUgb2YgZWl0aGVyIHdpbmRvdywgYm9keSBvciBkb2N1bWVudChmYWxsYmFjayBkZWZhdWx0KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0YXJnZXQ6IHN0cmluZywgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50SGFuZGxlcjogKGV2ZW50T2JqKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybUJyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gQ3JlYXRpbmcgdGhlIG1hbmFnZXIgYmluZCBldmVudHMsIG11c3QgYmUgZG9uZSBvdXRzaWRlIG9mIGFuZ3VsYXJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50IGFzIEhUTUxFbGVtZW50LCBldmVudE5hbWUsIGV2ZW50SGFuZGxlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwb3NlcyBbRG9tXUFkYXB0ZXIuZ2V0R2xvYmFsRXZlbnRUYXJnZXQgdG8gZ2V0IGdsb2JhbCBldmVudCB0YXJnZXRzLlxuICAgICAqIFN1cHBvcnRlZDogd2luZG93LCBkb2N1bWVudCwgYm9keS4gRGVmYXVsdHMgdG8gZG9jdW1lbnQgZm9yIGludmFsaWQgYXJncy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IG5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGFyZ2V0OiBzdHJpbmcpOiBFdmVudFRhcmdldCB7XG4gICAgICAgIHJldHVybiBnZXRET00oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLmRvYywgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgSGFtbWVyTWFuYWdlciBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHVzZWQgdG8gY3JlYXRlIHRoZSBtYW5hZ2VyIG9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogbWFuYWdlci5zZXRNYW5hZ2VyT3B0aW9uKG15RWxlbSwgXCJwYW5cIiwgeyBwb2ludGVyczogMSB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0TWFuYWdlck9wdGlvbihlbGVtZW50OiBFdmVudFRhcmdldCwgZXZlbnQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLmdldE1hbmFnZXJGb3JFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBtYW5hZ2VyLmdldChldmVudCkuc2V0KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhbiBlbGVtZW50IGFuZCBtYW5hZ2VyIG1hcCB0byB0aGUgaW50ZXJuYWwgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB1c2VkIHRvIGNyZWF0ZSB0aGUgbWFuYWdlciBvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkTWFuYWdlckZvckVsZW1lbnQoZWxlbWVudDogRXZlbnRUYXJnZXQsIG1hbmFnZXI6IEhhbW1lck1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5faGFtbWVyTWFuYWdlcnMucHVzaCh7ZWxlbWVudCwgbWFuYWdlcn0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBIYW1tZXJNYW5hZ2VyIGZvciB0aGUgZWxlbWVudCBvciBudWxsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdXNlZCB0byBjcmVhdGUgdGhlIG1hbmFnZXIgb24uXG4gICAgICovXG4gICAgcHVibGljIGdldE1hbmFnZXJGb3JFbGVtZW50KGVsZW1lbnQ6IEV2ZW50VGFyZ2V0KTogSGFtbWVyTWFuYWdlciB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICB0aGlzLl9oYW1tZXJNYW5hZ2Vycy5maWx0ZXIodmFsdWUgPT4gdmFsdWUuZWxlbWVudCA9PT0gZWxlbWVudCk7XG4gICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID8gcmVzdWx0WzBdLm1hbmFnZXIgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3lzIHRoZSBIYW1tZXJNYW5hZ2VyIGZvciB0aGUgZWxlbWVudCwgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzIGluIHRoZSBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHVzZWQgdG8gY3JlYXRlIHRoZSBtYW5hZ2VyIG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVNYW5hZ2VyRm9yRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faGFtbWVyTWFuYWdlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLl9oYW1tZXJNYW5hZ2Vyc1tpXS5lbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2hhbW1lck1hbmFnZXJzLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgICAvLyBkZXN0cm95IGFsc29cbiAgICAgICAgICAgIGl0ZW0ubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGVzdHJveXMgYWxsIGludGVybmFsbHkgdHJhY2tlZCBIYW1tZXJNYW5hZ2VycywgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzIGluIHRoZSBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5faGFtbWVyTWFuYWdlcnMpIHtcbiAgICAgICAgICAgIGl0ZW0ubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFtbWVyTWFuYWdlcnMgPSBbXTtcbiAgICB9XG59XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS90b3VjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBSTNDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7YUFDaEIsV0FBTSxHQUFpQixPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLE1BQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQUFBOUUsQ0FBK0U7SUFTbkcsWUFBb0IsS0FBYSxFQUE0QixHQUFRLEVBQVUsWUFBMEI7UUFBckYsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUE0QixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSekc7O1dBRUc7UUFDTyxrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFHcEMsb0JBQWUsR0FBNEQsRUFBRSxDQUFDO1FBR2xGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHO2dCQUNqQiw4R0FBOEc7Z0JBQzlHLHFGQUFxRjtnQkFDckYsVUFBVSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVO2dCQUNuRCxXQUFXLEVBQUU7b0JBQ1QsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENB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eEYsT0FBTztRQUNWLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0F0SlEscUJBQXFCLHdDQVVhLFFBQVE7a0hBVjFDLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBVzZCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtWdldERPTSBhcyBnZXRET00gfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgSGFtbWVyTWFuYWdlciwgSGFtbWVyT3B0aW9ucywgSGFtbWVyU3RhdGljIH0gZnJvbSAnLi90b3VjaC1hbm5vdGF0aW9ucyc7XG5cbmNvbnN0IEVWRU5UX1NVRkZJWCA9ICdwcmVjaXNlJztcblxuLyoqXG4gKiBUb3VjaCBnZXN0dXJlcyBtYW5hZ2VyIGJhc2VkIG9uIEhhbW1lci5qc1xuICogVXNlIHdpdGggY2F1dGlvbiwgdGhpcyB3aWxsIHRyYWNrIHJlZmVyZW5jZXMgZm9yIHNpbmdsZSBtYW5hZ2VyIHBlciBlbGVtZW50LiBWZXJ5IFRCRC4gTXVjaCBUT0RPLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhhbW1lckdlc3R1cmVzTWFuYWdlciB7XG4gICAgcHVibGljIHN0YXRpYyBIYW1tZXI6IEhhbW1lclN0YXRpYyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gKHdpbmRvdyBhcyBhbnkpLkhhbW1lciA6IG51bGw7XG4gICAgLyoqXG4gICAgICogRXZlbnQgb3B0aW9uIGRlZmF1bHRzIGZvciBlYWNoIHJlY29nbml6ZXIsIHNlZSBodHRwOi8vaGFtbWVyanMuZ2l0aHViLmlvL2FwaS8gZm9yIEFQSSBsaXN0aW5nLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYW1tZXJPcHRpb25zOiBIYW1tZXJPcHRpb25zID0ge307XG5cbiAgICBwcml2YXRlIHBsYXRmb3JtQnJvd3NlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9oYW1tZXJNYW5hZ2VyczogQXJyYXk8eyBlbGVtZW50OiBFdmVudFRhcmdldDsgbWFuYWdlcjogSGFtbWVyTWFuYWdlciB9PiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfem9uZTogTmdab25lLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55LCBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMucGxhdGZvcm1Ccm93c2VyID0gdGhpcy5wbGF0Zm9ybVV0aWwuaXNCcm93c2VyO1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybUJyb3dzZXIgJiYgSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLkhhbW1lcikge1xuICAgICAgICAgICAgdGhpcy5oYW1tZXJPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC8vIEQuUC4gIzQ0NyBGb3JjZSBUb3VjaElucHV0IGR1ZSB0byBQb2ludGVyRXZlbnRJbnB1dCBidWcgKGh0dHBzOi8vZ2l0aHViLmNvbS9oYW1tZXJqcy9oYW1tZXIuanMvaXNzdWVzLzEwNjUpXG4gICAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9JZ25pdGVVSS9pZ25pdGV1aS1hbmd1bGFyL2lzc3Vlcy80NDcjaXNzdWVjb21tZW50LTMyNDYwMTgwM1xuICAgICAgICAgICAgICAgIGlucHV0Q2xhc3M6IEhhbW1lckdlc3R1cmVzTWFuYWdlci5IYW1tZXIuVG91Y2hJbnB1dCxcbiAgICAgICAgICAgICAgICByZWNvZ25pemVyczogW1xuICAgICAgICAgICAgICAgICAgICBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLkhhbW1lci5QYW4sIHsgdGhyZXNob2xkOiAwIH1dLFxuICAgICAgICAgICAgICAgICAgICBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLkhhbW1lci5Td2lwZSwgeyBkaXJlY3Rpb246IEhhbW1lckdlc3R1cmVzTWFuYWdlci5IYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgfV0sXG4gICAgICAgICAgICAgICAgICAgIFtIYW1tZXJHZXN0dXJlc01hbmFnZXIuSGFtbWVyLlRhcF0sXG4gICAgICAgICAgICAgICAgICAgIFtIYW1tZXJHZXN0dXJlc01hbmFnZXIuSGFtbWVyLlRhcCwgeyBldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDIgfSwgWyd0YXAnXV1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN1cHBvcnRzKGV2ZW50TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLicgKyBFVkVOVF9TVUZGSVgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBsaXN0ZW5lciBleHRlbmRlZCB3aXRoIG9wdGlvbnMgZm9yIEhhbW1lci5qcy4gV2lsbCB1c2UgZGVmYXVsdHMgaWYgbm9uZSBhcmUgcHJvdmlkZWQuXG4gICAgICogTW9kZWxpbmcgYWZ0ZXIgb3RoZXIgZXZlbnQgcGx1Z2lucyBmb3IgZWFzeSBmdXR1cmUgbW9kaWZpY2F0aW9ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBldmVudEhhbmRsZXI6IChldmVudE9iaikgPT4gdm9pZCxcbiAgICAgICAgb3B0aW9uczogSGFtbWVyT3B0aW9ucyA9IG51bGwpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBsYXRmb3JtQnJvd3Nlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRpbmcgdGhlIG1hbmFnZXIgYmluZCBldmVudHMsIG11c3QgYmUgZG9uZSBvdXRzaWRlIG9mIGFuZ3VsYXJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFIYW1tZXJHZXN0dXJlc01hbmFnZXIuSGFtbWVyKSB7XG4gICAgICAgICAgICAgICAgLy9ubyBoYW1tZXJcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbWM6IEhhbW1lck1hbmFnZXIgPSB0aGlzLmdldE1hbmFnZXJGb3JFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1jID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbmV3IEhhbW1lciBpcyBhIHNob3J0Y3V0IGZvciBNYW5hZ2VyIHdpdGggZGVmYXVsdHNcbiAgICAgICAgICAgICAgICBtYyA9IG5ldyBIYW1tZXJHZXN0dXJlc01hbmFnZXIuSGFtbWVyKGVsZW1lbnQsIE9iamVjdC5hc3NpZ24odGhpcy5oYW1tZXJPcHRpb25zLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNYW5hZ2VyRm9yRWxlbWVudChlbGVtZW50LCBtYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50T2JqKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiBldmVudEhhbmRsZXIoZXZlbnRPYmopKTtcbiAgICAgICAgICAgIG1jLm9uKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gbWMub2ZmKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBsaXN0ZW5lciBleHRlbmRlZCB3aXRoIG9wdGlvbnMgZm9yIEhhbW1lci5qcy4gV2lsbCB1c2UgZGVmYXVsdHMgaWYgbm9uZSBhcmUgcHJvdmlkZWQuXG4gICAgICogTW9kZWxpbmcgYWZ0ZXIgb3RoZXIgZXZlbnQgcGx1Z2lucyBmb3IgZWFzeSBmdXR1cmUgbW9kaWZpY2F0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgQ2FuIGJlIG9uZSBvZiBlaXRoZXIgd2luZG93LCBib2R5IG9yIGRvY3VtZW50KGZhbGxiYWNrIGRlZmF1bHQpLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRHbG9iYWxFdmVudExpc3RlbmVyKHRhcmdldDogc3RyaW5nLCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRIYW5kbGVyOiAoZXZlbnRPYmopID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBsYXRmb3JtQnJvd3NlciB8fCAhSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLkhhbW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGFyZ2V0KTtcblxuICAgICAgICAvLyBDcmVhdGluZyB0aGUgbWFuYWdlciBiaW5kIGV2ZW50cywgbXVzdCBiZSBkb25lIG91dHNpZGUgb2YgYW5ndWxhclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsIGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2VzIFtEb21dQWRhcHRlci5nZXRHbG9iYWxFdmVudFRhcmdldCB0byBnZXQgZ2xvYmFsIGV2ZW50IHRhcmdldHMuXG4gICAgICogU3VwcG9ydGVkOiB3aW5kb3csIGRvY3VtZW50LCBib2R5LiBEZWZhdWx0cyB0byBkb2N1bWVudCBmb3IgaW52YWxpZCBhcmdzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCBUYXJnZXQgbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRHbG9iYWxFdmVudFRhcmdldCh0YXJnZXQ6IHN0cmluZyk6IEV2ZW50VGFyZ2V0IHtcbiAgICAgICAgcmV0dXJuIGdldERPTSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLCB0YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBIYW1tZXJNYW5hZ2VyIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdXNlZCB0byBjcmVhdGUgdGhlIG1hbmFnZXIgb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZVxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBtYW5hZ2VyLnNldE1hbmFnZXJPcHRpb24obXlFbGVtLCBcInBhblwiLCB7IHBvaW50ZXJzOiAxIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRNYW5hZ2VyT3B0aW9uKGVsZW1lbnQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXMuZ2V0TWFuYWdlckZvckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIG1hbmFnZXIuZ2V0KGV2ZW50KS5zZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGFuIGVsZW1lbnQgYW5kIG1hbmFnZXIgbWFwIHRvIHRoZSBpbnRlcm5hbCBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHVzZWQgdG8gY3JlYXRlIHRoZSBtYW5hZ2VyIG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRNYW5hZ2VyRm9yRWxlbWVudChlbGVtZW50OiBFdmVudFRhcmdldCwgbWFuYWdlcjogSGFtbWVyTWFuYWdlcikge1xuICAgICAgICB0aGlzLl9oYW1tZXJNYW5hZ2Vycy5wdXNoKHtlbGVtZW50LCBtYW5hZ2VyfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IEhhbW1lck1hbmFnZXIgZm9yIHRoZSBlbGVtZW50IG9yIG51bGxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB1c2VkIHRvIGNyZWF0ZSB0aGUgbWFuYWdlciBvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TWFuYWdlckZvckVsZW1lbnQoZWxlbWVudDogRXZlbnRUYXJnZXQpOiBIYW1tZXJNYW5hZ2VyIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gIHRoaXMuX2hhbW1lck1hbmFnZXJzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5lbGVtZW50ID09PSBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPyByZXN1bHRbMF0ubWFuYWdlciA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIEhhbW1lck1hbmFnZXIgZm9yIHRoZSBlbGVtZW50LCByZW1vdmluZyBldmVudCBsaXN0ZW5lcnMgaW4gdGhlIHByb2Nlc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgRE9NIGVsZW1lbnQgdXNlZCB0byBjcmVhdGUgdGhlIG1hbmFnZXIgb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZU1hbmFnZXJGb3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9oYW1tZXJNYW5hZ2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuX2hhbW1lck1hbmFnZXJzW2ldLmVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faGFtbWVyTWFuYWdlcnMuc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIC8vIGRlc3Ryb3kgYWxzb1xuICAgICAgICAgICAgaXRlbS5tYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXN0cm95cyBhbGwgaW50ZXJuYWxseSB0cmFja2VkIEhhbW1lck1hbmFnZXJzLCByZW1vdmluZyBldmVudCBsaXN0ZW5lcnMgaW4gdGhlIHByb2Nlc3MuICovXG4gICAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9oYW1tZXJNYW5hZ2Vycykge1xuICAgICAgICAgICAgaXRlbS5tYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oYW1tZXJNYW5hZ2VycyA9IFtdO1xuICAgIH1cbn1cbiJdfQ==