@evotor-dev/ui-kit 6.22.3 → 6.22.4

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.
@@ -38,6 +38,27 @@ export class EvoDatepickerComponent extends EvoBaseControl {
38
38
  this.propagateChange = (_) => {
39
39
  };
40
40
  }
41
+ get inputClass() {
42
+ return {
43
+ 'disabled': this.disabled,
44
+ 'hidden': !this.isValueExist(),
45
+ 'valid': this.currentState[EvoControlStates.valid],
46
+ 'invalid': this.currentState[EvoControlStates.invalid],
47
+ };
48
+ }
49
+ get totalClasses() {
50
+ const classes = [];
51
+ if (this.theme) {
52
+ classes.push(this.theme);
53
+ }
54
+ if (this.uiState.isOpen) {
55
+ classes.push('opened');
56
+ }
57
+ if (this.folded) {
58
+ classes.push('folded');
59
+ }
60
+ return classes;
61
+ }
41
62
  writeValue(value) {
42
63
  this.updatePickerIfNeed(value);
43
64
  this.propagateChange(value);
@@ -81,27 +102,6 @@ export class EvoDatepickerComponent extends EvoBaseControl {
81
102
  this.flatpickr = null;
82
103
  this.flatpickrElement.nativeElement._flatpickr.destroy();
83
104
  }
84
- get inputClass() {
85
- return {
86
- 'disabled': this.disabled,
87
- 'hidden': !this.isValueExist(),
88
- 'valid': this.currentState[EvoControlStates.valid],
89
- 'invalid': this.currentState[EvoControlStates.invalid],
90
- };
91
- }
92
- get totalClasses() {
93
- const classes = [];
94
- if (this.theme) {
95
- classes.push(this.theme);
96
- }
97
- if (this.uiState.isOpen) {
98
- classes.push('opened');
99
- }
100
- if (this.folded) {
101
- classes.push('folded');
102
- }
103
- return classes;
104
- }
105
105
  initMask() {
106
106
  if (this.config.allowInput && this.maskedInput) {
107
107
  this.maskConfig = {
@@ -147,18 +147,18 @@ export class EvoDatepickerComponent extends EvoBaseControl {
147
147
  this.setRangeConstraints(selectedDates);
148
148
  this.setTimeConstraints(selectedDates);
149
149
  this.updateLabelValues(selectedDates);
150
- this.writeValue(selectedDates);
150
+ this.zone.run(() => this.writeValue(selectedDates));
151
151
  }, onClose: (selectedDates) => {
152
152
  this.handleSingleSelectedValueInRange(selectedDates);
153
153
  this.setEmptyFieldStateIfNeed();
154
154
  this.resetConstraints();
155
155
  this.setOpenedState(false);
156
- this.closePicker.emit(selectedDates);
156
+ this.zone.run(() => this.closePicker.emit(selectedDates));
157
157
  }, onOpen: () => {
158
158
  this.setOpenedState(true);
159
159
  this.resetTimeAfterOpen();
160
160
  this.updateLabelValues(this.flatpickr.selectedDates);
161
- this.onTouched();
161
+ this.zone.run(() => this.onTouched());
162
162
  } }, (!this.appendToBody && { appendTo: this.elementRef.nativeElement }));
163
163
  }
164
164
  getConfig() {
@@ -554,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
554
554
  }], closePicker: [{
555
555
  type: Output
556
556
  }] } });
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLWRhdGVwaWNrZXIvZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLWRhdGVwaWNrZXIvZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUVWLEtBQUssRUFLTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2xHLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBRWxDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsSUFBSyxlQUVKO0FBRkQsV0FBSyxlQUFlO0lBQ2hCLGtDQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUZJLGVBQWUsS0FBZixlQUFlLFFBRW5CO0FBc0JELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUFjO0lBOEN0RCxZQUNZLElBQVksRUFDWixVQUFzQixFQUNwQixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUixT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QztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO0lBQ0wsQ0FBQzs7b0hBL25CUSxzQkFBc0I7d0dBQXRCLHNCQUFzQixzVEFScEI7UUFDUDtZQUNJLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osbU1DakRMLGk3Q0E0QkE7NEZEdUJhLHNCQUFzQjtrQkFibEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztvQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7NklBSUcsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJdEMsTUFBTTtzQkFETCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUdOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmxhdHBpY2tyT3B0aW9ucyB9IGZyb20gJy4vZmxhdHBpY2tyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjc3NDbGFzc2VzLCByZW5kZXJSYW5nZVRpbWUgfSBmcm9tICcuL3RlbXBsYXRlcyc7XG5pbXBvcnQgeyBFdm9CYXNlQ29udHJvbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ldm8tYmFzZS1jb250cm9sJztcbmltcG9ydCB7IEV2b0NvbnRyb2xTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb21tb24vZXZvLWNvbnRyb2wtc3RhdGUtbWFuYWdlci9ldm8tY29udHJvbC1zdGF0ZXMuZW51bSc7XG5pbXBvcnQgZmxhdHBpY2tyIGZyb20gJ2ZsYXRwaWNrcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vZmxhdHBpY2tyLW9wdGlvbnMuaW50ZXJmYWNlJztcblxuZW51bSBEYXRlcGlja2VyTW9kZXMge1xuICAgIFJBTkdFID0gJ3JhbmdlJyxcbn1cblxuaW50ZXJmYWNlIE9wdGlvbiB7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxudHlwZSBTZWxlY3RlZERhdGVzID0gc3RyaW5nW10gfCBEYXRlW107XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXZvLWRhdGVwaWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldm8tZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEV2b0RhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXZvRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIEV2b0Jhc2VDb250cm9sIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZCgnZmxhdHBpY2tyJywge3N0YXRpYzogdHJ1ZX0pXG4gICAgZmxhdHBpY2tyRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgY29uZmlnOiBGbGF0cGlja3JPcHRpb25zO1xuXG4gICAgQElucHV0KClcbiAgICBtYXNrZWRJbnB1dDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRoZW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZm9sZGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldERhdGU6IFNlbGVjdGVkRGF0ZXM7XG5cbiAgICBASW5wdXQoKVxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIG1heFJhbmdlRGF5czogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBhcHBlbmRUb0JvZHkgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgY2xvc2VQaWNrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFtEYXRlLCBEYXRlXT4oKTtcblxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB1aVN0YXRlID0ge1xuICAgICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgICBpc0VtcHR5RmllbGQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBlbGVtZW50czogYW55ID0ge307XG5cbiAgICBtYXNrQ29uZmlnOiB7IG1hc2s6IGFueSwgcGF0dGVybj86IHN0cmluZywgbWF4PzogRGF0ZSB9O1xuXG4gICAgcHJpdmF0ZSBmbGF0cGlja3I6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UgPSAodmFsdWUpID0+IHtcbiAgICB9O1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHtcbiAgICB9O1xuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogU2VsZWN0ZWREYXRlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBpY2tlcklmTmVlZCh2YWx1ZSk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICAgIH1cblxuICAgIGhhbmRsZU1hc2tDb21wbGV0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5tYXNrZWRJbnB1dCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZmxhdHBpY2tyRWxlbWVudC5uYXRpdmVFbGVtZW50Ll9mbGF0cGlja3IucGFyc2VEYXRlKHZhbHVlLCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUZyb21JbnB1dChkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERhdGVGcm9tSW5wdXQoZGF0ZTogU2VsZWN0ZWREYXRlcykge1xuICAgICAgICB0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudC5fZmxhdHBpY2tyLnNldERhdGUoZGF0ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrciA9IGZsYXRwaWNrcih0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlRnJvbUlucHV0KHRoaXMuc2V0RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXN0b21pemVQaWNrZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzZXREYXRlJykgJiYgY2hhbmdlc1snc2V0RGF0ZSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlRnJvbUlucHV0KGNoYW5nZXNbJ3NldERhdGUnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdE1hc2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IgPSBudWxsO1xuICAgICAgICB0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudC5fZmxhdHBpY2tyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBnZXQgaW5wdXRDbGFzcygpOiB7IFtjc3NDbGFzczogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdkaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuaXNWYWx1ZUV4aXN0KCksXG4gICAgICAgICAgICAndmFsaWQnOiB0aGlzLmN1cnJlbnRTdGF0ZVtFdm9Db250cm9sU3RhdGVzLnZhbGlkXSxcbiAgICAgICAgICAgICdpbnZhbGlkJzogdGhpcy5jdXJyZW50U3RhdGVbRXZvQ29udHJvbFN0YXRlcy5pbnZhbGlkXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgdG90YWxDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50aGVtZSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMudGhlbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudWlTdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb3BlbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb2xkZWQpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnZm9sZGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG5cbiAgICBpbml0TWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFsbG93SW5wdXQgJiYgdGhpcy5tYXNrZWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tYXNrQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHRoaXMuY29uZmlnLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLmNvbmZpZy5tYXhEYXRlIGFzIERhdGUsXG4gICAgICAgICAgICAgICAgbWFzazogRGF0ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGVwaWNrZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuYWxsb3dJbnB1dCAmJlxuICAgICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKGNzc0NsYXNzZXMuSU5QVVQpIHx8XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVEYXRlcGlja2VyKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlRGF0ZXBpY2tlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgaXNWYWx1ZUV4aXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZmxhdHBpY2tyKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0RGF0ZSA9IHRoaXMuY29uZmlnLmRlZmF1bHREYXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWZhdWx0RGF0ZSkgP1xuICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy5kZWZhdWx0RGF0ZSBhcyBEYXRlW10pLmxlbmd0aCA+IDAgOiAhIWRlZmF1bHREYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tb2RlID09PSBEYXRlcGlja2VyTW9kZXMuUkFOR0U7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd0VtcHR5VGV4dCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzVmFsdWVFeGlzdCgpICYmICF0aGlzLmNvbmZpZy5hbHRJbnB1dDtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RmxhdHBpY2tyT3B0aW9ucygpOiBGbGF0cGlja3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdyYXA6IHRydWUsXG4gICAgICAgICAgICBjbGlja09wZW5zOiBmYWxzZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoc2VsZWN0ZWREYXRlczogRGF0ZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbXB0eUZpZWxkU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VDb25zdHJhaW50cyhzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVDb25zdHJhaW50cyhzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVmFsdWVzKHNlbGVjdGVkRGF0ZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChzZWxlY3RlZERhdGVzOiBbRGF0ZSwgRGF0ZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZVNlbGVjdGVkVmFsdWVJblJhbmdlKHNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW1wdHlGaWVsZFN0YXRlSWZOZWVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcGVuZWRTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBpY2tlci5lbWl0KHNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uT3BlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3BlbmVkU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFRpbWVBZnRlck9wZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVmFsdWVzKHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uKCF0aGlzLmFwcGVuZFRvQm9keSAmJiB7YXBwZW5kVG86IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0RmxhdHBpY2tyT3B0aW9ucygpLFxuICAgICAgICAgICAgLi4uKHRoaXMuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b21pemF0aW9uIG9mIHRoZSBmbGF0cGlja3IncyB2aWV3IHRvIHVpLWtpdCBzdGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3VzdG9taXplUGlja2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYW5nZU5leHRJY29uKCk7XG4gICAgICAgIHRoaXMuYWRkRGVzY3JpcHRpb25JZk5lZWQoKTtcbiAgICAgICAgdGhpcy5hZGRUaW1lU2VsZWN0b3JzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBuZXcgc3RhdGUgb2YgdGhlIHBpY2tlciBvcGVubmVzc1xuICAgICAqIEBwYXJhbSBzdGF0ZSBuZXcgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldE9wZW5lZFN0YXRlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudWlTdGF0ZS5pc09wZW4gPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVtcHR5RmllbGRTdGF0ZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnVpU3RhdGUuaXNFbXB0eUZpZWxkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUaW1lU2VsZWN0b3JzKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlV2l0aFRpbWUoKSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpbWVXcmFwcGVyLmlubmVySFRNTCA9IHJlbmRlclJhbmdlVGltZShjc3NDbGFzc2VzKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVRpbWVSYW5nZUVsZW1lbnRzKHRpbWVXcmFwcGVyKTtcbiAgICAgICAgICAgIHRoaXMuYWRkTGlzdGVuZXJzT25UaW1lU2VsZWN0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmFwcGx5Lm9uY2xpY2sgPSB0aGlzLm9uQXBwbHkuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0cGlja3IuckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aW1lV3JhcHBlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVUaW1lUmFuZ2VFbGVtZW50cyh0aW1lV3JhcHBlcjogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHtcbiAgICAgICAgICAgIGFwcGx5OiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuQVBQTFkpWzBdLFxuICAgICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgICAgIGhvdXI6IHRpbWVXcmFwcGVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzQ2xhc3Nlcy5TRUxFQ1RPUl9IT1VSKVswXSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IHRpbWVXcmFwcGVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzQ2xhc3Nlcy5TRUxFQ1RPUl9NSU5VVEUpWzBdLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuVElNRV9MQUJFTF9GUk9NKVswXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnRpbDoge1xuICAgICAgICAgICAgICAgIGhvdXI6IHRpbWVXcmFwcGVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzQ2xhc3Nlcy5TRUxFQ1RPUl9IT1VSKVsxXSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IHRpbWVXcmFwcGVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzQ2xhc3Nlcy5TRUxFQ1RPUl9NSU5VVEUpWzFdLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuVElNRV9MQUJFTF9VTlRJTClbMF0sXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5lbGVtZW50cy5mcm9tLmhvdXJGaWVsZCA9IHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGVGaWVsZCA9IHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUucHJldmlvdXNFbGVtZW50U2libGluZztcblxuICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXJGaWVsZCA9IHRoaXMuZWxlbWVudHMudW50aWwuaG91ci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZUZpZWxkID0gdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXBwbHkoKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSgpO1xuICAgICAgICB0aGlzLmZsYXRwaWNrci5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGltZSgpIHtcbiAgICAgICAgY29uc3Qge2Zyb21Ib3VyLCBmcm9tTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRGcm9tKCk7XG4gICAgICAgIGNvbnN0IHt1bnRpbEhvdXIsIHVudGlsTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRVbnRpbCgpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZXMgPSBjbG9uZURlZXAodGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlcyk7XG5cbiAgICAgICAgc2VsZWN0ZWREYXRlc1swXS5zZXRIb3Vycyhmcm9tSG91ciwgZnJvbU1pbnV0ZSk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZXNbMV0pIHtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZXNbMV0uc2V0SG91cnModW50aWxIb3VyLCB1bnRpbE1pbnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERhdGVGcm9tSW5wdXQoc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMYWJlbFZhbHVlcyhzZWxlY3RlZERhdGVzOiBEYXRlW10pIHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGVzIHx8ICFzZWxlY3RlZERhdGVzWzBdIHx8ICFzZWxlY3RlZERhdGVzWzFdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZVdpdGhUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5sYWJlbC5pbm5lclRleHQgPSBg0J/QtdGA0LjQvtC0INGBICR7dGhpcy5mbGF0cGlja3IuZm9ybWF0RGF0ZShzZWxlY3RlZERhdGVzWzBdLCAnRCBkLm0uWScpfWA7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVzWzFdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5sYWJlbC5pbm5lclRleHQgPSBg0L/QviAke3RoaXMuZmxhdHBpY2tyLmZvcm1hdERhdGUoc2VsZWN0ZWREYXRlc1sxXSwgJ0QgZC5tLlknKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaW1lQ29uc3RyYWludHMoc2VsZWN0ZWREYXRlczogRGF0ZVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2VXaXRoVGltZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHNlbGVjdGVkRGF0ZXNbMF0sIHNlbGVjdGVkRGF0ZXNbMV0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFRpbWVJZk5lZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVudGlsVGltZUNvbnN0cmFpbnQoc2VsZWN0ZWREYXRlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRBbGxDb25zdHJhaW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEFsbENvbnN0cmFpbnRzKCkge1xuICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRMaXN0ZW5lcnNPblRpbWVTZWxlY3RvcnMoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLm9uY2hhbmdlID0gdGhpcy5vbkNoYW5nZVRpbWVGcm9tLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub25jaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlVGltZUZyb20uYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub25jaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlVGltZVVudGlsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9uY2hhbmdlID0gdGhpcy5vbkNoYW5nZVRpbWVVbnRpbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VUaW1lRnJvbShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTYW1lRGF0ZSh0aGlzLmZsYXRwaWNrci5zZWxlY3RlZERhdGVzWzBdLCB0aGlzLmZsYXRwaWNrci5zZWxlY3RlZERhdGVzWzFdKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGltZVVudGlsU2VsZWN0b3JzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVUaW1lRmllbGRzQ29udGVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2luZ2xlU2VsZWN0ZWRWYWx1ZUluUmFuZ2Uoc2VsZWN0ZWREYXRlczogW0RhdGUsIERhdGVdKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UoKSAmJiAhc2VsZWN0ZWREYXRlc1sxXSkge1xuICAgICAgICAgICAgY29uc3QgdW50aWxEYXRlID0gbmV3IERhdGUoc2VsZWN0ZWREYXRlc1swXSk7XG4gICAgICAgICAgICB1bnRpbERhdGUuc2V0SG91cnMoMjMsIDU5LCAwLCAwKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZERhdGVzID0gW3NlbGVjdGVkRGF0ZXNbMF0sIHVudGlsRGF0ZV07XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodXBkYXRlZERhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VUaW1lVW50aWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2FtZURhdGUodGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlc1sxXSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVRpbWVGcm9tU2VsZWN0b3JzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVUaW1lRmllbGRzQ29udGVudCgpO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lRmllbGRzQ29udGVudCgpIHtcbiAgICAgICAgY29uc3Qge2Zyb21Ib3VyLCBmcm9tTWludXRlLCB1bnRpbEhvdXIsIHVudGlsTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0b3JWYXVsZXNBc1N0cmluZygpO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyRmllbGQuaW5uZXJUZXh0ID0gZnJvbUhvdXI7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGVGaWVsZC5pbm5lclRleHQgPSBmcm9tTWludXRlO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwuaG91ckZpZWxkLmlubmVyVGV4dCA9IHVudGlsSG91cjtcbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGVGaWVsZC5pbm5lclRleHQgPSB1bnRpbE1pbnV0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVUaW1lVW50aWxTZWxlY3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IHtmcm9tSG91ciwgZnJvbU1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkRnJvbSgpO1xuICAgICAgICBjb25zdCB7dW50aWxIb3VyLCB1bnRpbE1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkVW50aWwoKTtcblxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwuaG91ci5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPCBmcm9tSG91cjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZyb21Ib3VyID09PSB1bnRpbEhvdXIpIHtcbiAgICAgICAgICAgIGlmIChmcm9tTWludXRlID4gdW50aWxNaW51dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4ID0gNDtcblxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBOdW1iZXIob3B0aW9uLnZhbHVlKSA8IGZyb21NaW51dGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlVGltZUZyb21TZWxlY3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IHtmcm9tSG91ciwgZnJvbU1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkRnJvbSgpO1xuICAgICAgICBjb25zdCB7dW50aWxIb3VyLCB1bnRpbE1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkVW50aWwoKTtcblxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBOdW1iZXIob3B0aW9uLnZhbHVlKSA+IHVudGlsSG91cjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZyb21Ib3VyID09PSB1bnRpbEhvdXIpIHtcbiAgICAgICAgICAgIGlmIChmcm9tTWludXRlID4gdW50aWxNaW51dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4ID0gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHt1bnRpbE1pbnV0ZTogdW50aWxNaW51dGVBZnRlclVwZGF0ZX0gPSB0aGlzLmdldFNlbGVjdGVkVW50aWwoKTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPiB1bnRpbE1pbnV0ZUFmdGVyVXBkYXRlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBOdW1iZXIob3B0aW9uLnZhbHVlKSA8IGZyb21NaW51dGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVbnRpbFRpbWVDb25zdHJhaW50KHNlbGVjdGVkRGF0ZXM6IERhdGVbXSkge1xuICAgICAgICB0aGlzLmRpc2FibGVUaW1lVW50aWxTZWxlY3RvcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0VGltZUlmTmVlZCgpIHtcbiAgICAgICAgY29uc3Qge2Zyb21Ib3VyLCBmcm9tTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRGcm9tKCk7XG4gICAgICAgIGNvbnN0IHt1bnRpbEhvdXIsIHVudGlsTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRVbnRpbCgpO1xuXG4gICAgICAgIGlmICgoZnJvbUhvdXIgPiB1bnRpbEhvdXIpIHx8IChmcm9tSG91ciA9PT0gdW50aWxIb3VyICYmIGZyb21NaW51dGUgPiB1bnRpbE1pbnV0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0VGltZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mcm9tLmhvdXIuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUuc2VsZWN0ZWRJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLnNlbGVjdGVkSW5kZXggPSAyMztcbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUuc2VsZWN0ZWRJbmRleCA9IDQ7XG5cbiAgICAgICAgdGhpcy51cGRhdGVUaW1lRmllbGRzQ29udGVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0b3JWYXVsZXNBc1N0cmluZygpOiB7IGZyb21Ib3VyOiBzdHJpbmcsIGZyb21NaW51dGU6IHN0cmluZywgdW50aWxIb3VyOiBzdHJpbmcsIHVudGlsTWludXRlOiBzdHJpbmcgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmcm9tSG91cjogdGhpcy5lbGVtZW50cy5mcm9tLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5zZWxlY3RlZEluZGV4XS52YWx1ZSxcbiAgICAgICAgICAgIGZyb21NaW51dGU6IHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnNlbGVjdGVkSW5kZXhdLnZhbHVlLFxuICAgICAgICAgICAgdW50aWxIb3VyOiB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIuc2VsZWN0ZWRJbmRleF0udmFsdWUsXG4gICAgICAgICAgICB1bnRpbE1pbnV0ZTogdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4XS52YWx1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkRnJvbSgpOiB7IGZyb21Ib3VyOiBudW1iZXIsIGZyb21NaW51dGU6IG51bWJlciB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZyb21Ib3VyOiBOdW1iZXIodGhpcy5lbGVtZW50cy5mcm9tLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5zZWxlY3RlZEluZGV4XS52YWx1ZSksXG4gICAgICAgICAgICBmcm9tTWludXRlOiBOdW1iZXIodGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zW3RoaXMuZWxlbWVudHMuZnJvbS5taW51dGUuc2VsZWN0ZWRJbmRleF0udmFsdWUpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRVbnRpbCgpOiB7IHVudGlsSG91cjogbnVtYmVyLCB1bnRpbE1pbnV0ZTogbnVtYmVyIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdW50aWxIb3VyOiBOdW1iZXIodGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLm9wdGlvbnNbdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSxcbiAgICAgICAgICAgIHVudGlsTWludXRlOiBOdW1iZXIodGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4XS52YWx1ZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSYW5nZUNvbnN0cmFpbnRzKHNlbGVjdGVkRGF0ZXM6IERhdGVbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKCkgJiYgdGhpcy5tYXhSYW5nZURheXMpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShzZWxlY3RlZERhdGVzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gbmV3IERhdGUoc2VsZWN0ZWREYXRlc1swXSk7XG5cbiAgICAgICAgICAgICAgICBtaW5EYXRlLnNldERhdGUobWluRGF0ZS5nZXREYXRlKCkgLSB0aGlzLm1heFJhbmdlRGF5cyk7XG4gICAgICAgICAgICAgICAgbWF4RGF0ZS5zZXREYXRlKG1heERhdGUuZ2V0RGF0ZSgpICsgdGhpcy5tYXhSYW5nZURheXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0cGlja3IuY29uZmlnLm1pbkRhdGUgPSBtaW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHBpY2tyLmNvbmZpZy5tYXhEYXRlID0gbWF4RGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q29uc3RyYWludHMoKSB7XG4gICAgICAgIHRoaXMuZmxhdHBpY2tyLmNvbmZpZy5taW5EYXRlID0gdGhpcy5jb25maWcubWluRGF0ZTtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IuY29uZmlnLm1heERhdGUgPSB0aGlzLmNvbmZpZy5tYXhEYXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSYW5nZVdpdGhUaW1lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JhbmdlKCkgJiYgdGhpcy5jb25maWcuZW5hYmxlVGltZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVtcHR5RmllbGRTdGF0ZUlmTmVlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSgpICYmIHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnNldEVtcHR5RmllbGRTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGlja2VySWZOZWVkKHZhbHVlOiBTZWxlY3RlZERhdGVzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZsYXRwaWNrcikge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlcyA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRlc1dpdGhEYXRlUGlja2VyRm9ybWF0KHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRTZWxlY3RlZERhdGVzV2l0aERhdGVQaWNrZXJGb3JtYXQodmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwodmFsdWVzLCBzZWxlY3RlZERhdGVzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUZyb21JbnB1dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkRGF0ZXNXaXRoRGF0ZVBpY2tlckZvcm1hdChkYXRlUmFuZ2U6IFNlbGVjdGVkRGF0ZXMpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChkYXRlUmFuZ2UgJiYgZGF0ZVJhbmdlLmxlbmd0aCAmJiB0eXBlb2YgKGRhdGVSYW5nZVswXSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGRhdGVSYW5nZSBhcyBEYXRlW10pLm1hcCgoZGF0ZSkgPT4gdGhpcy50b0RhdGVQaWNrZXJGb3JtYXQoZGF0ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGVSYW5nZSBhcyBzdHJpbmdbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvRGF0ZVBpY2tlckZvcm1hdChkYXRlPzogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2RhdGUuZ2V0RGF0ZSgpfS4ke2RhdGUuZ2V0TW9udGgoKSArIDF9LiR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3Vic3RpdHV0aW9uIG9mIGljb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VOZXh0SWNvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgSWNvbnMgPSB7XG4gICAgICAgICAgICBQUkVWOiBgXG4gICAgICAgICAgICAgICAgPHN2ZyBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNiAxNlwiIHdpZHRoPVwiNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1jMD1cIlwiIGQ9XCJNNiAwTDAgOEw2IDE2VjBaXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYgMTYpIHJvdGF0ZSgxODApXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDwvc3ZnPmAsXG4gICAgICAgICAgICBORVhUOiBgXG4gICAgICAgICAgICAgICAgPHN2ZyBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNiAxNlwiIHdpZHRoPVwiNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1jMD1cIlwiIGQ9XCJNNiAwTDAgOEw2IDE2VjBaXCIgZmlsbD1cIndoaXRlXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDwvc3ZnPmAsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mbGF0cGlja3IubmV4dE1vbnRoTmF2LmlubmVySFRNTCA9IEljb25zLlBSRVY7XG4gICAgICAgIHRoaXMuZmxhdHBpY2tyLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBJY29ucy5ORVhUO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVzY3JpcHRpb25JZk5lZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gY3NzQ2xhc3Nlcy5ERVNDUklQVElPTjtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrci5yQ29udGFpbmVyLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2FtZURhdGUoZmlyc3REYXRlOiBEYXRlLCBzZWNvbmREYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaXJzdERhdGUgJiYgc2Vjb25kRGF0ZSAmJiBmaXJzdERhdGUuZ2V0RGF0ZSgpID09PSBzZWNvbmREYXRlLmdldERhdGUoKSAmJlxuICAgICAgICAgICAgZmlyc3REYXRlLmdldE1vbnRoKCkgPT09IHNlY29uZERhdGUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgICAgZmlyc3REYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlY29uZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkSW5kZXhCeU1pbnV0ZXMobWludXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWludXRlcyAvIDUpICogNSAvIDE1O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRUaW1lQWZ0ZXJPcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlV2l0aFRpbWUoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlcyA9IHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXM7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlc1swXSAmJiBzZWxlY3RlZERhdGVzWzFdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5mcm9tLmhvdXIuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkRGF0ZXNbMF0uZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnNlbGVjdGVkSW5kZXggPSB0aGlzLmdldFNlbGVjdGVkSW5kZXhCeU1pbnV0ZXMoc2VsZWN0ZWREYXRlc1swXS5nZXRNaW51dGVzKCkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZERhdGVzWzFdLmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUuc2VsZWN0ZWRJbmRleCA9IHRoaXMuZ2V0U2VsZWN0ZWRJbmRleEJ5TWludXRlcyhzZWxlY3RlZERhdGVzWzFdLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDb25zdHJhaW50c0FmdGVyT3BlbihzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVGaWVsZHNDb250ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbnN0cmFpbnRzQWZ0ZXJPcGVuKHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXSkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHNlbGVjdGVkRGF0ZXNbMF0sIHNlbGVjdGVkRGF0ZXNbMV0pKSB7XG4gICAgICAgICAgICBjb25zdCB7ZnJvbUhvdXIsIGZyb21NaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZEZyb20oKTtcbiAgICAgICAgICAgIGNvbnN0IHt1bnRpbEhvdXIsIHVudGlsTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRVbnRpbCgpO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPiB1bnRpbEhvdXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBOdW1iZXIob3B0aW9uLnZhbHVlKSA8IGZyb21Ib3VyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChmcm9tSG91ciA9PT0gdW50aWxIb3VyKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpID4gdW50aWxNaW51dGU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpIDwgZnJvbU1pbnV0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgI2ZsYXRwaWNrciBjbGFzcz1cImV2by1kYXRlcGlja2VyXCIgW2V2b1VpQ2xhc3NdPVwidG90YWxDbGFzc2VzXCIgKGNsaWNrKT1cIm9uRGF0ZXBpY2tlckNsaWNrKCRldmVudClcIj5cbiAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgZGF0YS1pbnB1dFxuICAgICAgICBjbGFzcz1cImV2by1kYXRlcGlja2VyX19pbnB1dFwiXG4gICAgICAgIFtldm9VaUNsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgICAgICBbaW1hc2tdPVwibWFza0NvbmZpZ1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZWFkb25seV09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjb21wbGV0ZSk9XCJoYW5kbGVNYXNrQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxzcGFuICpuZ0lmPVwiaXNSYW5nZSgpICYmIGlucHV0LnZhbHVlXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fdmFsdWVcIj57e2lucHV0LnZhbHVlfX08L3NwYW4+XG5cbiAgICA8c3BhbiAqbmdJZj1cInNob3VsZFNob3dFbXB0eVRleHQoKVwiIGNsYXNzPVwiZXZvLWRhdGVwaWNrZXJfX2VtcHR5LXRleHRcIj57e2lzUmFuZ2UoKSA/ICfQl9CwINC/0LXRgNC40L7QtCc6ICfQlNCw0YLQsCd9fTwvc3Bhbj5cblxuICAgIDxzcGFuICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fb3BlbmVyXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTIwIDNIMTlWMkMxOSAxLjQ1IDE4LjU1IDEgMTggMUMxNy40NSAxIDE3IDEuNDUgMTcgMlYzSDdWMkM3IDEuNDUgNi41NSAxIDYgMUM1LjQ1IDEgNSAxLjQ1IDUgMlYzSDRDMi45IDMgMiAzLjkgMiA1VjIxQzIgMjIuMSAyLjkgMjMgNCAyM0gyMEMyMS4xIDIzIDIyIDIyLjEgMjIgMjFWNUMyMiAzLjkgMjEuMSAzIDIwIDNaTTE5IDIxSDVDNC40NSAyMSA0IDIwLjU1IDQgMjBWOEgyMFYyMEMyMCAyMC41NSAxOS41NSAyMSAxOSAyMVpcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiIXVpU3RhdGUuaXNFbXB0eUZpZWxkXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fb3BlbmVyLXRyaWFuZ2xlXCI+PC9zcGFuPlxuPC9kaXY+XG5cbjxldm8tY29udHJvbC1lcnJvciAqbmdJZj1cInNob3dFcnJvcnNcIiBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCIgW2Vycm9yc01lc3NhZ2VzXT1cImVycm9yc01lc3NhZ2VzXCI+PC9ldm8tY29udHJvbC1lcnJvcj5cbiJdfQ==
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLWRhdGVwaWNrZXIvZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLWRhdGVwaWNrZXIvZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUVWLEtBQUssRUFLTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxFQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hHLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBRWxDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsSUFBSyxlQUVKO0FBRkQsV0FBSyxlQUFlO0lBQ2hCLGtDQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUZJLGVBQWUsS0FBZixlQUFlLFFBRW5CO0FBc0JELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUFjO0lBOEN0RCxZQUNZLElBQVksRUFDWixVQUFzQixFQUNwQixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUixT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QUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0ZsYXRwaWNrck9wdGlvbnN9IGZyb20gJy4vZmxhdHBpY2tyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7Y2xvbmVEZWVwLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtjc3NDbGFzc2VzLCByZW5kZXJSYW5nZVRpbWV9IGZyb20gJy4vdGVtcGxhdGVzJztcbmltcG9ydCB7RXZvQmFzZUNvbnRyb2x9IGZyb20gJy4uLy4uL2NvbW1vbi9ldm8tYmFzZS1jb250cm9sJztcbmltcG9ydCB7RXZvQ29udHJvbFN0YXRlc30gZnJvbSAnLi4vLi4vY29tbW9uL2V2by1jb250cm9sLXN0YXRlLW1hbmFnZXIvZXZvLWNvbnRyb2wtc3RhdGVzLmVudW0nO1xuaW1wb3J0IGZsYXRwaWNrciBmcm9tICdmbGF0cGlja3InO1xuXG5leHBvcnQgKiBmcm9tICcuL2ZsYXRwaWNrci1vcHRpb25zLmludGVyZmFjZSc7XG5cbmVudW0gRGF0ZXBpY2tlck1vZGVzIHtcbiAgICBSQU5HRSA9ICdyYW5nZScsXG59XG5cbmludGVyZmFjZSBPcHRpb24ge1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbnR5cGUgU2VsZWN0ZWREYXRlcyA9IHN0cmluZ1tdIHwgRGF0ZVtdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V2by1kYXRlcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXZvLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2V2by1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFdm9EYXRlcGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV2b0RhdGVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBFdm9CYXNlQ29udHJvbCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZsYXRwaWNrcicsIHtzdGF0aWM6IHRydWV9KVxuICAgIGZsYXRwaWNrckVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvbmZpZzogRmxhdHBpY2tyT3B0aW9ucztcblxuICAgIEBJbnB1dCgpXG4gICAgbWFza2VkSW5wdXQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aGVtZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGZvbGRlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBzZXREYXRlOiBTZWxlY3RlZERhdGVzO1xuXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBtYXhSYW5nZURheXM6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG9Cb2R5ID0gdHJ1ZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGNsb3NlUGlja2VyID0gbmV3IEV2ZW50RW1pdHRlcjxbRGF0ZSwgRGF0ZV0+KCk7XG5cbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgdWlTdGF0ZSA9IHtcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgaXNFbXB0eUZpZWxkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgZWxlbWVudHM6IGFueSA9IHt9O1xuXG4gICAgbWFza0NvbmZpZzogeyBtYXNrOiBhbnksIHBhdHRlcm4/OiBzdHJpbmcsIG1heD86IERhdGUgfTtcblxuICAgIHByaXZhdGUgZmxhdHBpY2tyOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIGdldCBpbnB1dENsYXNzKCk6IHsgW2Nzc0NsYXNzOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2Rpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICdoaWRkZW4nOiAhdGhpcy5pc1ZhbHVlRXhpc3QoKSxcbiAgICAgICAgICAgICd2YWxpZCc6IHRoaXMuY3VycmVudFN0YXRlW0V2b0NvbnRyb2xTdGF0ZXMudmFsaWRdLFxuICAgICAgICAgICAgJ2ludmFsaWQnOiB0aGlzLmN1cnJlbnRTdGF0ZVtFdm9Db250cm9sU3RhdGVzLmludmFsaWRdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCB0b3RhbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLnRoZW1lKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2godGhpcy50aGVtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51aVN0YXRlLmlzT3Blbikge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvcGVuZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvbGRlZCkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdmb2xkZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgfTtcblxuICAgIG9uVG91Y2hlZCA9ICgpID0+IHtcbiAgICB9O1xuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogU2VsZWN0ZWREYXRlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBpY2tlcklmTmVlZCh2YWx1ZSk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICAgIH1cblxuICAgIGhhbmRsZU1hc2tDb21wbGV0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5tYXNrZWRJbnB1dCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZmxhdHBpY2tyRWxlbWVudC5uYXRpdmVFbGVtZW50Ll9mbGF0cGlja3IucGFyc2VEYXRlKHZhbHVlLCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUZyb21JbnB1dChkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERhdGVGcm9tSW5wdXQoZGF0ZTogU2VsZWN0ZWREYXRlcykge1xuICAgICAgICB0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudC5fZmxhdHBpY2tyLnNldERhdGUoZGF0ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrciA9IGZsYXRwaWNrcih0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0RGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlRnJvbUlucHV0KHRoaXMuc2V0RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXN0b21pemVQaWNrZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzZXREYXRlJykgJiYgY2hhbmdlc1snc2V0RGF0ZSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlRnJvbUlucHV0KGNoYW5nZXNbJ3NldERhdGUnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdE1hc2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IgPSBudWxsO1xuICAgICAgICB0aGlzLmZsYXRwaWNrckVsZW1lbnQubmF0aXZlRWxlbWVudC5fZmxhdHBpY2tyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpbml0TWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFsbG93SW5wdXQgJiYgdGhpcy5tYXNrZWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tYXNrQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHRoaXMuY29uZmlnLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLmNvbmZpZy5tYXhEYXRlIGFzIERhdGUsXG4gICAgICAgICAgICAgICAgbWFzazogRGF0ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGVwaWNrZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuYWxsb3dJbnB1dCAmJlxuICAgICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKGNzc0NsYXNzZXMuSU5QVVQpIHx8XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVEYXRlcGlja2VyKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlRGF0ZXBpY2tlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgaXNWYWx1ZUV4aXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZmxhdHBpY2tyKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0RGF0ZSA9IHRoaXMuY29uZmlnLmRlZmF1bHREYXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWZhdWx0RGF0ZSkgP1xuICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy5kZWZhdWx0RGF0ZSBhcyBEYXRlW10pLmxlbmd0aCA+IDAgOiAhIWRlZmF1bHREYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5tb2RlID09PSBEYXRlcGlja2VyTW9kZXMuUkFOR0U7XG4gICAgfVxuXG4gICAgc2hvdWxkU2hvd0VtcHR5VGV4dCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzVmFsdWVFeGlzdCgpICYmICF0aGlzLmNvbmZpZy5hbHRJbnB1dDtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RmxhdHBpY2tyT3B0aW9ucygpOiBGbGF0cGlja3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdyYXA6IHRydWUsXG4gICAgICAgICAgICBjbGlja09wZW5zOiBmYWxzZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoc2VsZWN0ZWREYXRlczogRGF0ZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbXB0eUZpZWxkU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VDb25zdHJhaW50cyhzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVDb25zdHJhaW50cyhzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVmFsdWVzKHNlbGVjdGVkRGF0ZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLndyaXRlVmFsdWUoc2VsZWN0ZWREYXRlcykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChzZWxlY3RlZERhdGVzOiBbRGF0ZSwgRGF0ZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZVNlbGVjdGVkVmFsdWVJblJhbmdlKHNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW1wdHlGaWVsZFN0YXRlSWZOZWVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcGVuZWRTdGF0ZShmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2xvc2VQaWNrZXIuZW1pdChzZWxlY3RlZERhdGVzKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25PcGVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcGVuZWRTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VGltZUFmdGVyT3BlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxWYWx1ZXModGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25Ub3VjaGVkKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLighdGhpcy5hcHBlbmRUb0JvZHkgJiYge2FwcGVuZFRvOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldENvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEZsYXRwaWNrck9wdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9taXphdGlvbiBvZiB0aGUgZmxhdHBpY2tyJ3MgdmlldyB0byB1aS1raXQgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGN1c3RvbWl6ZVBpY2tlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VOZXh0SWNvbigpO1xuICAgICAgICB0aGlzLmFkZERlc2NyaXB0aW9uSWZOZWVkKCk7XG4gICAgICAgIHRoaXMuYWRkVGltZVNlbGVjdG9ycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbmV3IHN0YXRlIG9mIHRoZSBwaWNrZXIgb3Blbm5lc3NcbiAgICAgKiBAcGFyYW0gc3RhdGUgbmV3IHN0YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRPcGVuZWRTdGF0ZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnVpU3RhdGUuaXNPcGVuID0gc3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFbXB0eUZpZWxkU3RhdGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy51aVN0YXRlLmlzRW1wdHlGaWVsZCA9IHN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVGltZVNlbGVjdG9ycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZVdpdGhUaW1lKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aW1lV3JhcHBlci5pbm5lckhUTUwgPSByZW5kZXJSYW5nZVRpbWUoY3NzQ2xhc3Nlcyk7XG4gICAgICAgICAgICB0aGlzLnNhdmVUaW1lUmFuZ2VFbGVtZW50cyh0aW1lV3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyc09uVGltZVNlbGVjdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5hcHBseS5vbmNsaWNrID0gdGhpcy5vbkFwcGx5LmJpbmQodGhpcyk7XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdHBpY2tyLnJDb250YWluZXIuYXBwZW5kQ2hpbGQodGltZVdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlVGltZVJhbmdlRWxlbWVudHModGltZVdyYXBwZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB7XG4gICAgICAgICAgICBhcHBseTogdGltZVdyYXBwZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3NDbGFzc2VzLkFQUExZKVswXSxcbiAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICBob3VyOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuU0VMRUNUT1JfSE9VUilbMF0sXG4gICAgICAgICAgICAgICAgbWludXRlOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuU0VMRUNUT1JfTUlOVVRFKVswXSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGltZVdyYXBwZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3NDbGFzc2VzLlRJTUVfTEFCRUxfRlJPTSlbMF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW50aWw6IHtcbiAgICAgICAgICAgICAgICBob3VyOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuU0VMRUNUT1JfSE9VUilbMV0sXG4gICAgICAgICAgICAgICAgbWludXRlOiB0aW1lV3JhcHBlci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzc0NsYXNzZXMuU0VMRUNUT1JfTUlOVVRFKVsxXSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGltZVdyYXBwZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3NDbGFzc2VzLlRJTUVfTEFCRUxfVU5USUwpWzBdLFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyRmllbGQgPSB0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlRmllbGQgPSB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyRmllbGQgPSB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGVGaWVsZCA9IHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFwcGx5KCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoKTtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRpbWUoKSB7XG4gICAgICAgIGNvbnN0IHtmcm9tSG91ciwgZnJvbU1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkRnJvbSgpO1xuICAgICAgICBjb25zdCB7dW50aWxIb3VyLCB1bnRpbE1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkVW50aWwoKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVzID0gY2xvbmVEZWVwKHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMpO1xuXG4gICAgICAgIHNlbGVjdGVkRGF0ZXNbMF0uc2V0SG91cnMoZnJvbUhvdXIsIGZyb21NaW51dGUpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGVzWzFdKSB7XG4gICAgICAgICAgICBzZWxlY3RlZERhdGVzWzFdLnNldEhvdXJzKHVudGlsSG91ciwgdW50aWxNaW51dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREYXRlRnJvbUlucHV0KHNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGFiZWxWYWx1ZXMoc2VsZWN0ZWREYXRlczogRGF0ZVtdKSB7XG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRlcyB8fCAhc2VsZWN0ZWREYXRlc1swXSB8fCAhc2VsZWN0ZWREYXRlc1sxXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2VXaXRoVGltZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubGFiZWwuaW5uZXJUZXh0ID0gYNCf0LXRgNC40L7QtCDRgSAke3RoaXMuZmxhdHBpY2tyLmZvcm1hdERhdGUoc2VsZWN0ZWREYXRlc1swXSwgJ0QgZC5tLlknKX1gO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlc1sxXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwubGFiZWwuaW5uZXJUZXh0ID0gYNC/0L4gJHt0aGlzLmZsYXRwaWNrci5mb3JtYXREYXRlKHNlbGVjdGVkRGF0ZXNbMV0sICdEIGQubS5ZJyl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGltZUNvbnN0cmFpbnRzKHNlbGVjdGVkRGF0ZXM6IERhdGVbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlV2l0aFRpbWUoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTYW1lRGF0ZShzZWxlY3RlZERhdGVzWzBdLCBzZWxlY3RlZERhdGVzWzFdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRUaW1lSWZOZWVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbnRpbFRpbWVDb25zdHJhaW50KHNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0QWxsQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRBbGxDb25zdHJhaW50cygpIHtcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTGlzdGVuZXJzT25UaW1lU2VsZWN0b3JzKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5vbmNoYW5nZSA9IHRoaXMub25DaGFuZ2VUaW1lRnJvbS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9uY2hhbmdlID0gdGhpcy5vbkNoYW5nZVRpbWVGcm9tLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLm9uY2hhbmdlID0gdGhpcy5vbkNoYW5nZVRpbWVVbnRpbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5vbmNoYW5nZSA9IHRoaXMub25DaGFuZ2VUaW1lVW50aWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlVGltZUZyb20oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2FtZURhdGUodGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5mbGF0cGlja3Iuc2VsZWN0ZWREYXRlc1sxXSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVRpbWVVbnRpbFNlbGVjdG9ycygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVGltZUZpZWxkc0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNpbmdsZVNlbGVjdGVkVmFsdWVJblJhbmdlKHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXSkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKCkgJiYgIXNlbGVjdGVkRGF0ZXNbMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHVudGlsRGF0ZSA9IG5ldyBEYXRlKHNlbGVjdGVkRGF0ZXNbMF0pO1xuICAgICAgICAgICAgdW50aWxEYXRlLnNldEhvdXJzKDIzLCA1OSwgMCwgMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVzWzBdLCB1bnRpbERhdGVdO1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHVwZGF0ZWREYXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlVGltZVVudGlsKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXNbMV0pKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVUaW1lRnJvbVNlbGVjdG9ycygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVGltZUZpZWxkc0NvbnRlbnQoKTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGltZUZpZWxkc0NvbnRlbnQoKSB7XG4gICAgICAgIGNvbnN0IHtmcm9tSG91ciwgZnJvbU1pbnV0ZSwgdW50aWxIb3VyLCB1bnRpbE1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdG9yVmF1bGVzQXNTdHJpbmcoKTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20uaG91ckZpZWxkLmlubmVyVGV4dCA9IGZyb21Ib3VyO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlRmllbGQuaW5uZXJUZXh0ID0gZnJvbU1pbnV0ZTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXJGaWVsZC5pbm5lclRleHQgPSB1bnRpbEhvdXI7XG4gICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwubWludXRlRmllbGQuaW5uZXJUZXh0ID0gdW50aWxNaW51dGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlVGltZVVudGlsU2VsZWN0b3JzKCkge1xuICAgICAgICBjb25zdCB7ZnJvbUhvdXIsIGZyb21NaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZEZyb20oKTtcbiAgICAgICAgY29uc3Qge3VudGlsSG91ciwgdW50aWxNaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZFVudGlsKCk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpIDwgZnJvbUhvdXI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmcm9tSG91ciA9PT0gdW50aWxIb3VyKSB7XG4gICAgICAgICAgICBpZiAoZnJvbU1pbnV0ZSA+IHVudGlsTWludXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUuc2VsZWN0ZWRJbmRleCA9IDQ7XG5cbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPCBmcm9tTWludXRlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZVRpbWVGcm9tU2VsZWN0b3JzKCkge1xuICAgICAgICBjb25zdCB7ZnJvbUhvdXIsIGZyb21NaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZEZyb20oKTtcbiAgICAgICAgY29uc3Qge3VudGlsSG91ciwgdW50aWxNaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZFVudGlsKCk7XG5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPiB1bnRpbEhvdXI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmcm9tSG91ciA9PT0gdW50aWxIb3VyKSB7XG4gICAgICAgICAgICBpZiAoZnJvbU1pbnV0ZSA+IHVudGlsTWludXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUuc2VsZWN0ZWRJbmRleCA9IDQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7dW50aWxNaW51dGU6IHVudGlsTWludXRlQWZ0ZXJVcGRhdGV9ID0gdGhpcy5nZXRTZWxlY3RlZFVudGlsKCk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpID4gdW50aWxNaW51dGVBZnRlclVwZGF0ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPCBmcm9tTWludXRlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VW50aWxUaW1lQ29uc3RyYWludChzZWxlY3RlZERhdGVzOiBEYXRlW10pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlVGltZVVudGlsU2VsZWN0b3JzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFRpbWVJZk5lZWQoKSB7XG4gICAgICAgIGNvbnN0IHtmcm9tSG91ciwgZnJvbU1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkRnJvbSgpO1xuICAgICAgICBjb25zdCB7dW50aWxIb3VyLCB1bnRpbE1pbnV0ZX0gPSB0aGlzLmdldFNlbGVjdGVkVW50aWwoKTtcblxuICAgICAgICBpZiAoKGZyb21Ib3VyID4gdW50aWxIb3VyKSB8fCAoZnJvbUhvdXIgPT09IHVudGlsSG91ciAmJiBmcm9tTWludXRlID4gdW50aWxNaW51dGUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFRpbWUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnNlbGVjdGVkSW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwuaG91ci5zZWxlY3RlZEluZGV4ID0gMjM7XG4gICAgICAgIHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLnNlbGVjdGVkSW5kZXggPSA0O1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGltZUZpZWxkc0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdG9yVmF1bGVzQXNTdHJpbmcoKToge1xuICAgICAgICBmcm9tSG91cjogc3RyaW5nLFxuICAgICAgICBmcm9tTWludXRlOiBzdHJpbmcsXG4gICAgICAgIHVudGlsSG91cjogc3RyaW5nLFxuICAgICAgICB1bnRpbE1pbnV0ZTogc3RyaW5nXG4gICAgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmcm9tSG91cjogdGhpcy5lbGVtZW50cy5mcm9tLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5zZWxlY3RlZEluZGV4XS52YWx1ZSxcbiAgICAgICAgICAgIGZyb21NaW51dGU6IHRoaXMuZWxlbWVudHMuZnJvbS5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnNlbGVjdGVkSW5kZXhdLnZhbHVlLFxuICAgICAgICAgICAgdW50aWxIb3VyOiB0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIuc2VsZWN0ZWRJbmRleF0udmFsdWUsXG4gICAgICAgICAgICB1bnRpbE1pbnV0ZTogdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4XS52YWx1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkRnJvbSgpOiB7IGZyb21Ib3VyOiBudW1iZXIsIGZyb21NaW51dGU6IG51bWJlciB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZyb21Ib3VyOiBOdW1iZXIodGhpcy5lbGVtZW50cy5mcm9tLmhvdXIub3B0aW9uc1t0aGlzLmVsZW1lbnRzLmZyb20uaG91ci5zZWxlY3RlZEluZGV4XS52YWx1ZSksXG4gICAgICAgICAgICBmcm9tTWludXRlOiBOdW1iZXIodGhpcy5lbGVtZW50cy5mcm9tLm1pbnV0ZS5vcHRpb25zW3RoaXMuZWxlbWVudHMuZnJvbS5taW51dGUuc2VsZWN0ZWRJbmRleF0udmFsdWUpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRVbnRpbCgpOiB7IHVudGlsSG91cjogbnVtYmVyLCB1bnRpbE1pbnV0ZTogbnVtYmVyIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdW50aWxIb3VyOiBOdW1iZXIodGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLm9wdGlvbnNbdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSxcbiAgICAgICAgICAgIHVudGlsTWludXRlOiBOdW1iZXIodGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUub3B0aW9uc1t0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5zZWxlY3RlZEluZGV4XS52YWx1ZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSYW5nZUNvbnN0cmFpbnRzKHNlbGVjdGVkRGF0ZXM6IERhdGVbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKCkgJiYgdGhpcy5tYXhSYW5nZURheXMpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShzZWxlY3RlZERhdGVzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gbmV3IERhdGUoc2VsZWN0ZWREYXRlc1swXSk7XG5cbiAgICAgICAgICAgICAgICBtaW5EYXRlLnNldERhdGUobWluRGF0ZS5nZXREYXRlKCkgLSB0aGlzLm1heFJhbmdlRGF5cyk7XG4gICAgICAgICAgICAgICAgbWF4RGF0ZS5zZXREYXRlKG1heERhdGUuZ2V0RGF0ZSgpICsgdGhpcy5tYXhSYW5nZURheXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0cGlja3IuY29uZmlnLm1pbkRhdGUgPSBtaW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHBpY2tyLmNvbmZpZy5tYXhEYXRlID0gbWF4RGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q29uc3RyYWludHMoKSB7XG4gICAgICAgIHRoaXMuZmxhdHBpY2tyLmNvbmZpZy5taW5EYXRlID0gdGhpcy5jb25maWcubWluRGF0ZTtcbiAgICAgICAgdGhpcy5mbGF0cGlja3IuY29uZmlnLm1heERhdGUgPSB0aGlzLmNvbmZpZy5tYXhEYXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSYW5nZVdpdGhUaW1lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JhbmdlKCkgJiYgdGhpcy5jb25maWcuZW5hYmxlVGltZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVtcHR5RmllbGRTdGF0ZUlmTmVlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSgpICYmIHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnNldEVtcHR5RmllbGRTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGlja2VySWZOZWVkKHZhbHVlOiBTZWxlY3RlZERhdGVzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZsYXRwaWNrcikge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlcyA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRlc1dpdGhEYXRlUGlja2VyRm9ybWF0KHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRTZWxlY3RlZERhdGVzV2l0aERhdGVQaWNrZXJGb3JtYXQodmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwodmFsdWVzLCBzZWxlY3RlZERhdGVzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUZyb21JbnB1dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkRGF0ZXNXaXRoRGF0ZVBpY2tlckZvcm1hdChkYXRlUmFuZ2U6IFNlbGVjdGVkRGF0ZXMpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChkYXRlUmFuZ2UgJiYgZGF0ZVJhbmdlLmxlbmd0aCAmJiB0eXBlb2YgKGRhdGVSYW5nZVswXSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGRhdGVSYW5nZSBhcyBEYXRlW10pLm1hcCgoZGF0ZSkgPT4gdGhpcy50b0RhdGVQaWNrZXJGb3JtYXQoZGF0ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGVSYW5nZSBhcyBzdHJpbmdbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvRGF0ZVBpY2tlckZvcm1hdChkYXRlPzogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2RhdGUuZ2V0RGF0ZSgpfS4ke2RhdGUuZ2V0TW9udGgoKSArIDF9LiR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3Vic3RpdHV0aW9uIG9mIGljb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VOZXh0SWNvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgSWNvbnMgPSB7XG4gICAgICAgICAgICBQUkVWOiBgXG4gICAgICAgICAgICAgICAgPHN2ZyBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNiAxNlwiIHdpZHRoPVwiNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1jMD1cIlwiIGQ9XCJNNiAwTDAgOEw2IDE2VjBaXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYgMTYpIHJvdGF0ZSgxODApXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDwvc3ZnPmAsXG4gICAgICAgICAgICBORVhUOiBgXG4gICAgICAgICAgICAgICAgPHN2ZyBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNiAxNlwiIHdpZHRoPVwiNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggX25nY29udGVudC1jMD1cIlwiIGQ9XCJNNiAwTDAgOEw2IDE2VjBaXCIgZmlsbD1cIndoaXRlXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDwvc3ZnPmAsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mbGF0cGlja3IubmV4dE1vbnRoTmF2LmlubmVySFRNTCA9IEljb25zLlBSRVY7XG4gICAgICAgIHRoaXMuZmxhdHBpY2tyLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBJY29ucy5ORVhUO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVzY3JpcHRpb25JZk5lZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gY3NzQ2xhc3Nlcy5ERVNDUklQVElPTjtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrci5yQ29udGFpbmVyLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2FtZURhdGUoZmlyc3REYXRlOiBEYXRlLCBzZWNvbmREYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaXJzdERhdGUgJiYgc2Vjb25kRGF0ZSAmJiBmaXJzdERhdGUuZ2V0RGF0ZSgpID09PSBzZWNvbmREYXRlLmdldERhdGUoKSAmJlxuICAgICAgICAgICAgZmlyc3REYXRlLmdldE1vbnRoKCkgPT09IHNlY29uZERhdGUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgICAgZmlyc3REYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlY29uZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkSW5kZXhCeU1pbnV0ZXMobWludXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWludXRlcyAvIDUpICogNSAvIDE1O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRUaW1lQWZ0ZXJPcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlV2l0aFRpbWUoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlcyA9IHRoaXMuZmxhdHBpY2tyLnNlbGVjdGVkRGF0ZXM7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlc1swXSAmJiBzZWxlY3RlZERhdGVzWzFdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5mcm9tLmhvdXIuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkRGF0ZXNbMF0uZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLnNlbGVjdGVkSW5kZXggPSB0aGlzLmdldFNlbGVjdGVkSW5kZXhCeU1pbnV0ZXMoc2VsZWN0ZWREYXRlc1swXS5nZXRNaW51dGVzKCkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5ob3VyLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZERhdGVzWzFdLmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy51bnRpbC5taW51dGUuc2VsZWN0ZWRJbmRleCA9IHRoaXMuZ2V0U2VsZWN0ZWRJbmRleEJ5TWludXRlcyhzZWxlY3RlZERhdGVzWzFdLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDb25zdHJhaW50c0FmdGVyT3BlbihzZWxlY3RlZERhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVGaWVsZHNDb250ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbnN0cmFpbnRzQWZ0ZXJPcGVuKHNlbGVjdGVkRGF0ZXM6IFtEYXRlLCBEYXRlXSkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHNlbGVjdGVkRGF0ZXNbMF0sIHNlbGVjdGVkRGF0ZXNbMV0pKSB7XG4gICAgICAgICAgICBjb25zdCB7ZnJvbUhvdXIsIGZyb21NaW51dGV9ID0gdGhpcy5nZXRTZWxlY3RlZEZyb20oKTtcbiAgICAgICAgICAgIGNvbnN0IHt1bnRpbEhvdXIsIHVudGlsTWludXRlfSA9IHRoaXMuZ2V0U2VsZWN0ZWRVbnRpbCgpO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuZnJvbS5ob3VyLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gTnVtYmVyKG9wdGlvbi52YWx1ZSkgPiB1bnRpbEhvdXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLmhvdXIub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uOiBPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBOdW1iZXIob3B0aW9uLnZhbHVlKSA8IGZyb21Ib3VyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChmcm9tSG91ciA9PT0gdW50aWxIb3VyKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpID4gdW50aWxNaW51dGU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudW50aWwubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IE51bWJlcihvcHRpb24udmFsdWUpIDwgZnJvbU1pbnV0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLmZyb20ubWludXRlLm9wdGlvbnMpLmZvckVhY2goKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnVudGlsLm1pbnV0ZS5vcHRpb25zKS5mb3JFYWNoKChvcHRpb246IE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgI2ZsYXRwaWNrciBjbGFzcz1cImV2by1kYXRlcGlja2VyXCIgW2V2b1VpQ2xhc3NdPVwidG90YWxDbGFzc2VzXCIgKGNsaWNrKT1cIm9uRGF0ZXBpY2tlckNsaWNrKCRldmVudClcIj5cbiAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgZGF0YS1pbnB1dFxuICAgICAgICBjbGFzcz1cImV2by1kYXRlcGlja2VyX19pbnB1dFwiXG4gICAgICAgIFtldm9VaUNsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgICAgICBbaW1hc2tdPVwibWFza0NvbmZpZ1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZWFkb25seV09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjb21wbGV0ZSk9XCJoYW5kbGVNYXNrQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxzcGFuICpuZ0lmPVwiaXNSYW5nZSgpICYmIGlucHV0LnZhbHVlXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fdmFsdWVcIj57e2lucHV0LnZhbHVlfX08L3NwYW4+XG5cbiAgICA8c3BhbiAqbmdJZj1cInNob3VsZFNob3dFbXB0eVRleHQoKVwiIGNsYXNzPVwiZXZvLWRhdGVwaWNrZXJfX2VtcHR5LXRleHRcIj57e2lzUmFuZ2UoKSA/ICfQl9CwINC/0LXRgNC40L7QtCc6ICfQlNCw0YLQsCd9fTwvc3Bhbj5cblxuICAgIDxzcGFuICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fb3BlbmVyXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTIwIDNIMTlWMkMxOSAxLjQ1IDE4LjU1IDEgMTggMUMxNy40NSAxIDE3IDEuNDUgMTcgMlYzSDdWMkM3IDEuNDUgNi41NSAxIDYgMUM1LjQ1IDEgNSAxLjQ1IDUgMlYzSDRDMi45IDMgMiAzLjkgMiA1VjIxQzIgMjIuMSAyLjkgMjMgNCAyM0gyMEMyMS4xIDIzIDIyIDIyLjEgMjIgMjFWNUMyMiAzLjkgMjEuMSAzIDIwIDNaTTE5IDIxSDVDNC40NSAyMSA0IDIwLjU1IDQgMjBWOEgyMFYyMEMyMCAyMC41NSAxOS41NSAyMSAxOSAyMVpcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiIXVpU3RhdGUuaXNFbXB0eUZpZWxkXCIgY2xhc3M9XCJldm8tZGF0ZXBpY2tlcl9fb3BlbmVyLXRyaWFuZ2xlXCI+PC9zcGFuPlxuPC9kaXY+XG5cbjxldm8tY29udHJvbC1lcnJvciAqbmdJZj1cInNob3dFcnJvcnNcIiBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCIgW2Vycm9yc01lc3NhZ2VzXT1cImVycm9yc01lc3NhZ2VzXCI+PC9ldm8tY29udHJvbC1lcnJvcj5cbiJdfQ==
@@ -3196,6 +3196,27 @@ class EvoDatepickerComponent extends EvoBaseControl {
3196
3196
  this.propagateChange = (_) => {
3197
3197
  };
3198
3198
  }
3199
+ get inputClass() {
3200
+ return {
3201
+ 'disabled': this.disabled,
3202
+ 'hidden': !this.isValueExist(),
3203
+ 'valid': this.currentState[EvoControlStates.valid],
3204
+ 'invalid': this.currentState[EvoControlStates.invalid],
3205
+ };
3206
+ }
3207
+ get totalClasses() {
3208
+ const classes = [];
3209
+ if (this.theme) {
3210
+ classes.push(this.theme);
3211
+ }
3212
+ if (this.uiState.isOpen) {
3213
+ classes.push('opened');
3214
+ }
3215
+ if (this.folded) {
3216
+ classes.push('folded');
3217
+ }
3218
+ return classes;
3219
+ }
3199
3220
  writeValue(value) {
3200
3221
  this.updatePickerIfNeed(value);
3201
3222
  this.propagateChange(value);
@@ -3239,27 +3260,6 @@ class EvoDatepickerComponent extends EvoBaseControl {
3239
3260
  this.flatpickr = null;
3240
3261
  this.flatpickrElement.nativeElement._flatpickr.destroy();
3241
3262
  }
3242
- get inputClass() {
3243
- return {
3244
- 'disabled': this.disabled,
3245
- 'hidden': !this.isValueExist(),
3246
- 'valid': this.currentState[EvoControlStates.valid],
3247
- 'invalid': this.currentState[EvoControlStates.invalid],
3248
- };
3249
- }
3250
- get totalClasses() {
3251
- const classes = [];
3252
- if (this.theme) {
3253
- classes.push(this.theme);
3254
- }
3255
- if (this.uiState.isOpen) {
3256
- classes.push('opened');
3257
- }
3258
- if (this.folded) {
3259
- classes.push('folded');
3260
- }
3261
- return classes;
3262
- }
3263
3263
  initMask() {
3264
3264
  if (this.config.allowInput && this.maskedInput) {
3265
3265
  this.maskConfig = {
@@ -3305,18 +3305,18 @@ class EvoDatepickerComponent extends EvoBaseControl {
3305
3305
  this.setRangeConstraints(selectedDates);
3306
3306
  this.setTimeConstraints(selectedDates);
3307
3307
  this.updateLabelValues(selectedDates);
3308
- this.writeValue(selectedDates);
3308
+ this.zone.run(() => this.writeValue(selectedDates));
3309
3309
  }, onClose: (selectedDates) => {
3310
3310
  this.handleSingleSelectedValueInRange(selectedDates);
3311
3311
  this.setEmptyFieldStateIfNeed();
3312
3312
  this.resetConstraints();
3313
3313
  this.setOpenedState(false);
3314
- this.closePicker.emit(selectedDates);
3314
+ this.zone.run(() => this.closePicker.emit(selectedDates));
3315
3315
  }, onOpen: () => {
3316
3316
  this.setOpenedState(true);
3317
3317
  this.resetTimeAfterOpen();
3318
3318
  this.updateLabelValues(this.flatpickr.selectedDates);
3319
- this.onTouched();
3319
+ this.zone.run(() => this.onTouched());
3320
3320
  } }, (!this.appendToBody && { appendTo: this.elementRef.nativeElement }));
3321
3321
  }
3322
3322
  getConfig() {