@skyux/datetime 9.0.0-alpha.8 → 9.0.0-beta.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.
- package/documentation.json +1408 -1468
- package/esm2022/lib/modules/date-pipe/date-pipe.module.mjs +3 -4
- package/esm2022/lib/modules/date-pipe/date.service.mjs +6 -3
- package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +2 -2
- package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +4 -16
- package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +4 -15
- package/esm2022/lib/modules/datepicker/datepicker.component.mjs +7 -4
- package/esm2022/lib/modules/datepicker/datepicker.module.mjs +2 -5
- package/esm2022/lib/modules/datepicker/daypicker.component.mjs +3 -3
- package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +3 -3
- package/esm2022/lib/modules/datepicker/yearpicker.component.mjs +3 -3
- package/esm2022/lib/modules/shared/sky-datetime-resources.module.mjs +4 -4
- package/esm2022/lib/modules/timepicker/timepicker.component.mjs +7 -4
- package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +4 -15
- package/esm2022/lib/modules/timepicker/timepicker.module.mjs +2 -5
- package/fesm2022/skyux-datetime.mjs +41 -71
- package/fesm2022/skyux-datetime.mjs.map +1 -1
- package/lib/modules/datepicker/datepicker-input-fuzzy.directive.d.ts +3 -3
- package/lib/modules/datepicker/datepicker-input.directive.d.ts +3 -3
- package/lib/modules/datepicker/datepicker.module.d.ts +1 -1
- package/lib/modules/timepicker/timepicker.directive.d.ts +1 -2
- package/lib/modules/timepicker/timepicker.module.d.ts +1 -1
- package/package.json +8 -8
@@ -141,9 +141,8 @@ export class SkyFuzzyDatepickerInputDirective {
|
|
141
141
|
#elementRef;
|
142
142
|
#fuzzyDateService;
|
143
143
|
#renderer;
|
144
|
-
#resourcesService;
|
145
144
|
#datepickerComponent;
|
146
|
-
constructor(changeDetector, configService, elementRef, fuzzyDateService, localeProvider, renderer,
|
145
|
+
constructor(changeDetector, configService, elementRef, fuzzyDateService, localeProvider, renderer, datepickerComponent) {
|
147
146
|
/**
|
148
147
|
* Whether to disable date validation on the fuzzy datepicker input.
|
149
148
|
* @default false
|
@@ -172,7 +171,6 @@ export class SkyFuzzyDatepickerInputDirective {
|
|
172
171
|
this.#elementRef = elementRef;
|
173
172
|
this.#fuzzyDateService = fuzzyDateService;
|
174
173
|
this.#renderer = renderer;
|
175
|
-
this.#resourcesService = resourcesService;
|
176
174
|
this.#datepickerComponent = datepickerComponent;
|
177
175
|
this.#locale = localeProvider.defaultLocale;
|
178
176
|
localeProvider
|
@@ -193,16 +191,6 @@ export class SkyFuzzyDatepickerInputDirective {
|
|
193
191
|
}
|
194
192
|
const element = this.#elementRef.nativeElement;
|
195
193
|
this.#renderer.addClass(element, 'sky-form-control');
|
196
|
-
const hasAriaLabel = element.getAttribute('aria-label');
|
197
|
-
/* istanbul ignore else */
|
198
|
-
if (!hasAriaLabel) {
|
199
|
-
this.#resourcesService
|
200
|
-
.getString('skyux_date_field_default_label')
|
201
|
-
.pipe(takeUntil(this.#ngUnsubscribe))
|
202
|
-
.subscribe((value) => {
|
203
|
-
this.#renderer.setAttribute(element, 'aria-label', value);
|
204
|
-
});
|
205
|
-
}
|
206
194
|
}
|
207
195
|
ngAfterContentInit() {
|
208
196
|
this.#datepickerComponent.dateChange
|
@@ -441,7 +429,7 @@ export class SkyFuzzyDatepickerInputDirective {
|
|
441
429
|
}
|
442
430
|
this.#setInputElementValue(formattedDate || '');
|
443
431
|
}
|
444
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyFuzzyDateService }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token:
|
432
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyFuzzyDateService }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
445
433
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: SkyFuzzyDatepickerInputDirective, selector: "[skyFuzzyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", futureDisabled: "futureDisabled", maxDate: "maxDate", minDate: "minDate", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", yearRequired: "yearRequired" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
|
446
434
|
SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,
|
447
435
|
SKY_FUZZY_DATEPICKER_VALIDATOR,
|
@@ -456,7 +444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
456
444
|
SKY_FUZZY_DATEPICKER_VALIDATOR,
|
457
445
|
],
|
458
446
|
}]
|
459
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyFuzzyDateService }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type:
|
447
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyFuzzyDateService }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i4.SkyDatepickerComponent, decorators: [{
|
460
448
|
type: Optional
|
461
449
|
}] }]; }, propDecorators: { dateFormat: [{
|
462
450
|
type: Input
|
@@ -484,4 +472,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
484
472
|
type: HostListener,
|
485
473
|
args: ['input']
|
486
474
|
}] } });
|
487
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBTXBELE1BQU0sbUNBQW1DLEdBQUc7SUFDMUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUc7SUFDckMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFTRixNQUFNLE9BQU8sZ0NBQWdDO0lBUzNDOzs7O09BSUc7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUF5QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixNQUFN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SyxXQUFXO3NCQURyQixLQUFLO2dCQWtCSyxZQUFZO3NCQUR0QixLQUFLO2dCQXFKQyxhQUFhO3NCQURuQixZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNM0IsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxNQUFNO2dCQWdCYixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyLCBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEYXRlRm9ybWF0dGVyIH0gZnJvbSAnLi9kYXRlLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGUgfSBmcm9tICcuL2Z1enp5LWRhdGUnO1xuaW1wb3J0IHsgU2t5RnV6enlEYXRlU2VydmljZSB9IGZyb20gJy4vZnV6enktZGF0ZS5zZXJ2aWNlJztcblxuY29uc3QgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreUZ1enp5RGF0ZXBpY2tlcklucHV0XScsXG4gIHByb3ZpZGVyczogW1xuICAgIFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTElEQVRPUixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RnV6enlEYXRlcGlja2VySW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGVGb3JtYXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiN2YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGVcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jX2RhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UuZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGRhdGVwaWNrZXIgb24gdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBEb24ndCB1c2UgdGhpcyBpbnB1dCBvbiByZWFjdGl2ZSBmb3JtcyBiZWNhdXNlIHRoZXkgbWF5IG92ZXJ3cml0ZSB0aGUgaW5wdXQgb3IgbGVhdmUgdGhlIGNvbnRyb2wgb3V0IG9mIHN5bmMuXG4gICAqIFRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb24gcmVhY3RpdmUgZm9ybXMsIHVzZSB0aGUgYEZvcm1Db250cm9sYCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSB2YWx1ZTtcblxuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBzcGVjaWZ5aW5nIGRhdGVzIHRoYXQgYXJlIGluIHRoZSBmdXR1cmUuXG4gICAqIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZ1dHVyZURpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2Z1dHVyZURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnV0dXJlRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19mdXR1cmVEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGZ1enp5IGRhdGUgYWxsb3dlZC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBwcmV2ZW50IGZ1enp5IGRhdGVzIGFmdGVyIGEgc3BlY2lmaWVkIGRhdGUuIFRoaXMgcHJvcGVydHkgYWNjZXB0c1xuICAgKiBhIGBTa3lGdXp6eURhdGVgIHZhbHVlIHRoYXQgaW5jbHVkZXMgbnVtZXJpYyBtb250aCwgZGF5LCBhbmQgeWVhciB2YWx1ZXMuXG4gICAqIEZvciBleGFtcGxlOiBgeyBtb250aDogMSwgZGF5OiAxLCB5ZWFyOiAyMDI3IH1gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWF4RGF0ZSA9IHRoaXMuI2dldE1heERhdGUoKTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBiZWZvcmUgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWVcbiAgICogdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMDcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5taW5EYXRlID0gdGhpcy4jZ2V0TWluRGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZnV6enkgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnRpbmcgZGF5IG9mIHRoZSB3ZWVrIGluIHRoZSBjYWxlbmRhciwgd2hlcmUgYDBgIHNldHMgdGhlIHN0YXJ0aW5nIGRheVxuICAgKiB0byBTdW5kYXkuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAgICogaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFydGluZ0RheSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zdGFydGluZ0RheSA9IHRoaXMuc3RhcnRpbmdEYXk7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YXJ0aW5nRGF5IHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2Uuc3RhcnRpbmdEYXk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIHRoZSB5ZWFyIGluIGZ1enp5IGRhdGVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB5ZWFyUmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfeWVhclJlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgeWVhclJlcXVpcmVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfeWVhclJlcXVpcmVkO1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICNkYXRlRm9ybWF0dGVyID0gbmV3IFNreURhdGVGb3JtYXR0ZXIoKTtcblxuICAjbG9jYWxlOiBzdHJpbmc7XG5cbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2Z1dHVyZURpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19kaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gICNfbWF4RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfbWluRGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjX3ZhbHVlOiBhbnk7XG5cbiAgI195ZWFyUmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2U7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNyZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29uZmlnU2VydmljZTogU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBmdXp6eURhdGVTZXJ2aWNlOiBTa3lGdXp6eURhdGVTZXJ2aWNlLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RnV6enlEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jY29uZmlnU2VydmljZSA9IGNvbmZpZ1NlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jZnV6enlEYXRlU2VydmljZSA9IGZ1enp5RGF0ZVNlcnZpY2U7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50ID0gZGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jbG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICAgIFNreURhdGVGb3JtYXR0ZXIuc2V0TG9jYWxlKHRoaXMuI2xvY2FsZSk7XG4gICAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCA9XG4gICAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5nZXRQcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCd5JykgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IGhhdmUgY29uZmlndXJlZCBjb25mbGljdGluZyBzZXR0aW5ncy4gWWVhciBpcyByZXF1aXJlZCBhbmQgZGF0ZUZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHllYXIuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnc2t5LWZvcm0tY29udHJvbCcpO1xuXG4gICAgY29uc3QgaGFzQXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFoYXNBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhcmlhLWxhYmVsJywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgIHRoaXMuI2xvY2FsZVxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jY29udHJvbD8udmFsaWQpIHtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmdXp6eURhdGUueWVhciAmJiB0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICB5ZWFyUmVxdWlyZWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIGZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICAgIGxldCBmdXp6eURhdGVSYW5nZTtcblxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghZnV6enlEYXRlUmFuZ2UudmFsaWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICAgICAgbWF4RGF0ZTogdmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSxcbiAgICAgICAgICAgIGZ1enp5RGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0Q3VycmVudEZ1enp5RGF0ZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIGZ1dHVyZURpc2FibGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgI2dldE1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShcbiAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICApO1xuICAgICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBtYXhEYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAjZ2V0TWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLm1pbkRhdGVcbiAgICAgICk7XG4gICAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbkRhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjZnV6enlEYXRlc0VxdWFsKGRhdGVBPzogU2t5RnV6enlEYXRlLCBkYXRlQj86IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkYXRlQSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBkYXRlQiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoKCFkYXRlQS5kYXkgJiYgIWRhdGVCLmRheSkgfHwgZGF0ZUEuZGF5ID09PSBkYXRlQi5kYXkpICYmXG4gICAgICAoKCFkYXRlQS5tb250aCAmJiAhZGF0ZUIubW9udGgpIHx8IGRhdGVBLm1vbnRoID09PSBkYXRlQi5tb250aCkgJiZcbiAgICAgICgoIWRhdGVBLnllYXIgJiYgIWRhdGVCLnllYXIpIHx8IGRhdGVBLnllYXIgPT09IGRhdGVCLnllYXIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuI192YWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICh0aGlzLiNfdmFsdWUgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZ1enp5TW9tZW50OiBhbnk7XG4gICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm9ybWF0dGVkRGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICBpZiAoZnV6enlEYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlIGFzIFNreUZ1enp5RGF0ZTtcbiAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgKTtcbiAgICAgIGZ1enp5TW9tZW50ID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSk7XG5cbiAgICAgIGlmIChmdXp6eU1vbWVudCkge1xuICAgICAgICBkYXRlVmFsdWUgPSBmdXp6eU1vbWVudC50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcmVGdXp6eURhdGVzRXF1YWwgPSB0aGlzLiNmdXp6eURhdGVzRXF1YWwodGhpcy4jX3ZhbHVlLCBmdXp6eURhdGUpO1xuICAgIGNvbnN0IGlzTmV3VmFsdWUgPSBmdXp6eURhdGUgIT09IHRoaXMuI192YWx1ZSB8fCAhYXJlRnV6enlEYXRlc0VxdWFsO1xuXG4gICAgdGhpcy4jX3ZhbHVlID0gZnV6enlEYXRlIHx8IHZhbHVlO1xuXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlIHx8ICcnKTtcbiAgfVxufVxuIl19
|
475
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBTXBELE1BQU0sbUNBQW1DLEdBQUc7SUFDMUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUc7SUFDckMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFTRixNQUFNLE9BQU8sZ0NBQWdDO0lBUzNDOzs7O09BSUc7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUF5QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixNQUFN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U0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDN0Q7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E1aUJVLGdDQUFnQztrR0FBaEMsZ0NBQWdDLG1aQUxoQztZQUNULG1DQUFtQztZQUNuQyw4QkFBOEI7U0FDL0I7OzJGQUVVLGdDQUFnQztrQkFQNUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1QsbUNBQW1DO3dCQUNuQyw4QkFBOEI7cUJBQy9CO2lCQUNGOzswQkFxTUksUUFBUTs0Q0FyTEEsVUFBVTtzQkFEcEIsS0FBSztnQkE4QkssUUFBUTtzQkFEbEIsS0FBSztnQkFzQkssY0FBYztzQkFEeEIsS0FBSztnQkFpQkssT0FBTztzQkFEakIsS0FBSztnQkFrQkssT0FBTztzQkFEakIsS0FBSztnQkFnQkMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBa0JLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBc0lDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU0zQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBZ0JiLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5pbXBvcnQgeyBTa3lGdXp6eURhdGVTZXJ2aWNlIH0gZnJvbSAnLi9mdXp6eS1kYXRlLnNlcnZpY2UnO1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5RnV6enlEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0ZVWlpZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGF0ZUZvcm1hdCA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuI3ZhbHVlKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICAgIHRoaXMuI3ZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgKTtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLiNfZGF0ZUZvcm1hdCB8fFxuICAgICAgdGhpcy4jY29uZmlnU2VydmljZS5kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IHZhbHVlO1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJldmVudCB1c2VycyBmcm9tIHNwZWNpZnlpbmcgZGF0ZXMgdGhhdCBhcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZnV0dXJlRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZnV0dXJlRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBmdXR1cmVEaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Z1dHVyZURpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZnV6enkgZGF0ZSBhbGxvd2VkLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIHByZXZlbnQgZnV6enkgZGF0ZXMgYWZ0ZXIgYSBzcGVjaWZpZWQgZGF0ZS4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzXG4gICAqIGEgYFNreUZ1enp5RGF0ZWAgdmFsdWUgdGhhdCBpbmNsdWRlcyBudW1lcmljIG1vbnRoLCBkYXksIGFuZCB5ZWFyIHZhbHVlcy5cbiAgICogRm9yIGV4YW1wbGU6IGB7IG1vbnRoOiAxLCBkYXk6IDEsIHllYXI6IDIwMjcgfWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heERhdGUodmFsdWU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy4jZ2V0TWF4RGF0ZSgpO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVhcmxpZXN0IGZ1enp5IGRhdGUgYWxsb3dlZC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBwcmV2ZW50IGZ1enp5IGRhdGVzIGJlZm9yZSBhIHNwZWNpZmllZCBkYXRlLiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgU2t5RnV6enlEYXRlYCB2YWx1ZVxuICAgKiB0aGF0IGluY2x1ZGVzIG51bWVyaWMgbW9udGgsIGRheSwgYW5kIHllYXIgdmFsdWVzLlxuICAgKiBGb3IgZXhhbXBsZTogYHsgbW9udGg6IDEsIGRheTogMSwgeWVhcjogMjAwNyB9YC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRGF0ZSh2YWx1ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1pbkRhdGUgPSB0aGlzLiNnZXRNaW5EYXRlKCk7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgZGF0ZSB2YWxpZGF0aW9uIG9uIHRoZSBmdXp6eSBkYXRlcGlja2VyIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNreURhdGVwaWNrZXJOb1ZhbGlkYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydGluZyBkYXkgb2YgdGhlIHdlZWsgaW4gdGhlIGNhbGVuZGFyLCB3aGVyZSBgMGAgc2V0cyB0aGUgc3RhcnRpbmcgZGF5XG4gICAqIHRvIFN1bmRheS4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdFxuICAgKiBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YXJ0aW5nRGF5KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc3RhcnRpbmdEYXkgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBzdGFydGluZ0RheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc3RhcnRpbmdEYXkgfHwgdGhpcy4jY29uZmlnU2VydmljZS5zdGFydGluZ0RheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlcXVpcmUgdGhlIHllYXIgaW4gZnV6enkgZGF0ZXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHllYXJSZXF1aXJlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI195ZWFyUmVxdWlyZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCB5ZWFyUmVxdWlyZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI195ZWFyUmVxdWlyZWQ7XG4gIH1cblxuICBnZXQgI3ZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIHNldCAjdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuI3VwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gICNjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ7XG5cbiAgI2RhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuXG4gICNsb2NhbGU6IHN0cmluZztcblxuICAjcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZnV0dXJlRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjX2RhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI19tYXhEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19taW5EYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG5cbiAgI19zdGFydGluZ0RheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICNfdmFsdWU6IGFueTtcblxuICAjX3llYXJSZXF1aXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNmdXp6eURhdGVTZXJ2aWNlOiBTa3lGdXp6eURhdGVTZXJ2aWNlO1xuICAjcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgI2RhdGVwaWNrZXJDb21wb25lbnQ6IFNreURhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZSxcbiAgICBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBkYXRlcGlja2VyQ29tcG9uZW50PzogU2t5RGF0ZXBpY2tlckNvbXBvbmVudFxuICApIHtcbiAgICBpZiAoIWRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lGdXp6eURhdGVwaWNrZXJJbnB1dGAgZGlyZWN0aXZlIHdpdGhpbiBhICcgK1xuICAgICAgICAgICdgPHNreS1kYXRlcGlja2VyPmAgY29tcG9uZW50ISdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb25maWdTZXJ2aWNlID0gY29uZmlnU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlID0gZnV6enlEYXRlU2VydmljZTtcbiAgICB0aGlzLiNyZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQgPSBkYXRlcGlja2VyQ29tcG9uZW50O1xuXG4gICAgdGhpcy4jbG9jYWxlID0gbG9jYWxlUHJvdmlkZXIuZGVmYXVsdExvY2FsZTtcbiAgICBsb2NhbGVQcm92aWRlclxuICAgICAgLmdldExvY2FsZUluZm8oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICB0aGlzLiNsb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcbiAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5zZXRMb2NhbGUodGhpcy4jbG9jYWxlKTtcbiAgICAgICAgdGhpcy4jcHJlZmVycmVkU2hvcnREYXRlRm9ybWF0ID1cbiAgICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLmdldFByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMueWVhclJlcXVpcmVkKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRm9ybWF0Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3knKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdZb3UgaGF2ZSBjb25maWd1cmVkIGNvbmZsaWN0aW5nIHNldHRpbmdzLiBZZWFyIGlzIHJlcXVpcmVkIGFuZCBkYXRlRm9ybWF0IGRvZXMgbm90IGluY2x1ZGUgeWVhci4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IERhdGUpID0+IHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cbiAgICBpZiAodGhpcy4jY29udHJvbCAmJiB0aGlzLiNjb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI3ZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICB0aGlzLiN2YWx1ZSxcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgIHRoaXMuI2xvY2FsZVxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jY29udHJvbD8udmFsaWQpIHtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB2YWxpZGF0aW9uRXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmdXp6eURhdGUueWVhciAmJiB0aGlzLnllYXJSZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICB5ZWFyUmVxdWlyZWQ6IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIGZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICAgIGxldCBmdXp6eURhdGVSYW5nZTtcblxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgZnV6enlEYXRlUmFuZ2UgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZVJhbmdlKFxuICAgICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghZnV6enlEYXRlUmFuZ2UudmFsaWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICAgICAgbWF4RGF0ZTogdmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSxcbiAgICAgICAgICAgIGZ1enp5RGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0Q3VycmVudEZ1enp5RGF0ZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIGZ1dHVyZURpc2FibGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgI2dldE1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShcbiAgICAgICAgdGhpcy5tYXhEYXRlXG4gICAgICApO1xuICAgICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBtYXhEYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5mdXR1cmVEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1heERhdGU7XG4gIH1cblxuICAjZ2V0TWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKFxuICAgICAgICB0aGlzLm1pbkRhdGVcbiAgICAgICk7XG4gICAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbkRhdGUudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNjb25maWdTZXJ2aWNlLm1pbkRhdGU7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjZnV6enlEYXRlc0VxdWFsKGRhdGVBPzogU2t5RnV6enlEYXRlLCBkYXRlQj86IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkYXRlQSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBkYXRlQiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoKCFkYXRlQS5kYXkgJiYgIWRhdGVCLmRheSkgfHwgZGF0ZUEuZGF5ID09PSBkYXRlQi5kYXkpICYmXG4gICAgICAoKCFkYXRlQS5tb250aCAmJiAhZGF0ZUIubW9udGgpIHx8IGRhdGVBLm1vbnRoID09PSBkYXRlQi5tb250aCkgJiZcbiAgICAgICgoIWRhdGVBLnllYXIgJiYgIWRhdGVCLnllYXIpIHx8IGRhdGVBLnllYXIgPT09IGRhdGVCLnllYXIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuI192YWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICh0aGlzLiNfdmFsdWUgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZ1enp5TW9tZW50OiBhbnk7XG4gICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm9ybWF0dGVkRGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5mb3JtYXQodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmdXp6eURhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEZ1enp5RGF0ZUZyb21TdHJpbmcoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICBpZiAoZnV6enlEYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1enp5RGF0ZSA9IHZhbHVlIGFzIFNreUZ1enp5RGF0ZTtcbiAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRoaXMuI2xvY2FsZVxuICAgICAgKTtcbiAgICAgIGZ1enp5TW9tZW50ID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSk7XG5cbiAgICAgIGlmIChmdXp6eU1vbWVudCkge1xuICAgICAgICBkYXRlVmFsdWUgPSBmdXp6eU1vbWVudC50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcmVGdXp6eURhdGVzRXF1YWwgPSB0aGlzLiNmdXp6eURhdGVzRXF1YWwodGhpcy4jX3ZhbHVlLCBmdXp6eURhdGUpO1xuICAgIGNvbnN0IGlzTmV3VmFsdWUgPSBmdXp6eURhdGUgIT09IHRoaXMuI192YWx1ZSB8fCAhYXJlRnV6enlEYXRlc0VxdWFsO1xuXG4gICAgdGhpcy4jX3ZhbHVlID0gZnV6enlEYXRlIHx8IHZhbHVlO1xuXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LnNlbGVjdGVkRGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlIHx8ICcnKTtcbiAgfVxufVxuIl19
|
@@ -146,9 +146,8 @@ export class SkyDatepickerInputDirective {
|
|
146
146
|
#elementRef;
|
147
147
|
#localeProvider;
|
148
148
|
#renderer;
|
149
|
-
#resourcesService;
|
150
149
|
#datepickerComponent;
|
151
|
-
constructor(adapter, changeDetector, configService, elementRef, localeProvider, renderer,
|
150
|
+
constructor(adapter, changeDetector, configService, elementRef, localeProvider, renderer, datepickerComponent) {
|
152
151
|
/**
|
153
152
|
* Whether to disable date validation on the datepicker input.
|
154
153
|
* @default false
|
@@ -177,7 +176,6 @@ export class SkyDatepickerInputDirective {
|
|
177
176
|
this.#elementRef = elementRef;
|
178
177
|
this.#localeProvider = localeProvider;
|
179
178
|
this.#renderer = renderer;
|
180
|
-
this.#resourcesService = resourcesService;
|
181
179
|
this.#datepickerComponent = datepickerComponent;
|
182
180
|
this.#initialPlaceholder = this.#adapter.getPlaceholder(this.#elementRef);
|
183
181
|
this.#updatePlaceholder();
|
@@ -194,15 +192,6 @@ export class SkyDatepickerInputDirective {
|
|
194
192
|
ngOnInit() {
|
195
193
|
const element = this.#elementRef.nativeElement;
|
196
194
|
this.#renderer.addClass(element, 'sky-form-control');
|
197
|
-
const hasAriaLabel = element.getAttribute('aria-label');
|
198
|
-
if (!hasAriaLabel) {
|
199
|
-
this.#resourcesService
|
200
|
-
.getString('skyux_date_field_default_label')
|
201
|
-
.pipe(takeUntil(this.#ngUnsubscribe))
|
202
|
-
.subscribe((value) => {
|
203
|
-
this.#renderer.setAttribute(element, 'aria-label', value);
|
204
|
-
});
|
205
|
-
}
|
206
195
|
}
|
207
196
|
ngAfterContentInit() {
|
208
197
|
this.#datepickerComponent.dateChange
|
@@ -486,7 +475,7 @@ export class SkyDatepickerInputDirective {
|
|
486
475
|
}
|
487
476
|
}
|
488
477
|
}
|
489
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDatepickerInputDirective, deps: [{ token: i1.SkyDatepickerAdapterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token:
|
478
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDatepickerInputDirective, deps: [{ token: i1.SkyDatepickerAdapterService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
490
479
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", maxDate: "maxDate", minDate: "minDate", skyDatepickerInput: "skyDatepickerInput", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", strict: "strict" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
|
491
480
|
SKY_DATEPICKER_VALUE_ACCESSOR,
|
492
481
|
SKY_DATEPICKER_VALIDATOR,
|
@@ -503,7 +492,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
503
492
|
SkyDatepickerAdapterService,
|
504
493
|
],
|
505
494
|
}]
|
506
|
-
}], ctorParameters: function () { return [{ type: i1.SkyDatepickerAdapterService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type:
|
495
|
+
}], ctorParameters: function () { return [{ type: i1.SkyDatepickerAdapterService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i4.SkyDatepickerComponent, decorators: [{
|
507
496
|
type: Optional
|
508
497
|
}] }]; }, propDecorators: { dateFormat: [{
|
509
498
|
type: Input
|
@@ -531,4 +520,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
531
520
|
type: HostListener,
|
532
521
|
args: ['input']
|
533
522
|
}] } });
|
534
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQUkzRSxNQUFNLDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLHdCQUF3QixHQUFHO0lBQy9CLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBVUYsTUFBTSxPQUFPLDJCQUEyQjtJQVN0Qzs7OztPQUlHO0lBQ0gsSUFDVyxVQUFVLENBQUMsS0FBeUI7UUFDN0MsMEJBQTBC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YUFDekM7U0FDRjtJQUNILENBQUM7OEdBdGtCVSwyQkFBMkI7a0dBQTNCLDJCQUEyQiwwWUFOM0I7WUFDVCw2QkFBNkI7WUFDN0Isd0JBQXdCO1lBQ3hCLDJCQUEyQjtTQUM1Qjs7MkZBRVUsMkJBQTJCO2tCQVJ2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFNBQVMsRUFBRTt3QkFDVCw2QkFBNkI7d0JBQzdCLHdCQUF3Qjt3QkFDeEIsMkJBQTJCO3FCQUM1QjtpQkFDRjs7MEJBOExJLFFBQVE7NENBOUtBLFVBQVU7c0JBRHBCLEtBQUs7Z0JBd0JLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0JLLE9BQU87c0JBRGpCLEtBQUs7Z0JBa0JLLE9BQU87c0JBRGpCLEtBQUs7Z0JBb0JLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFvQkMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBc0JLLE1BQU07c0JBRGhCLEtBQUs7Z0JBaUlDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBCM0IsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxNQUFNO2dCQU1iLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIsIFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICAgIFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4RGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19tYXhEYXRlIHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2UubWF4RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZWFybGllc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC4gVG8gYXZvaWQgdmFsaWRhdGlvbiBlcnJvcnMsIHRoZSB0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWluaW11bSBkYXRlIG11c3QgYmUgbWlkbmlnaHQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRhdGVwaWNrZXIgYXV0b21hdGljYWxseSBzZXRzIHRoZSB0aW1lIG9uIHRoZSBgRGF0ZWAgb2JqZWN0IGZvciBzZWxlY3RlZCBkYXRlcyB0byBtaWRuaWdodCBpbiB0aGUgY3VycmVudCB1c2VyJ3MgdGltZSB6b25lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGUgfHwgdGhpcy4jY29uZmlnU2VydmljZS5taW5EYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGRpcmVjdGl2ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50LiBUaGUgdmFsdWUgdGhhdCB1c2VycyBzZWxlY3QgaXMgZHJpdmVuXG4gICAqIHRocm91Z2ggdGhlIGBuZ01vZGVsYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lEYXRlcGlja2VySW5wdXQoXG4gICAgdmFsdWU6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCAnJ1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tEZXByZWNhdGlvbiB3YXJuaW5nXSBZb3Ugbm8gbG9uZ2VyIG5lZWQgdG8gcHJvdmlkZSBhIHRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSAnICtcbiAgICAgICAgICAndG8gdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGF0dHJpYnV0ZSAodGhpcyB3aWxsIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGluIHRoZSBuZXh0ICcgK1xuICAgICAgICAgICdtYWpvciB2ZXJzaW9uIHJlbGVhc2UpLlxcbicgK1xuICAgICAgICAgICdEbyB0aGlzIGluc3RlYWQ6XFxuJyArXG4gICAgICAgICAgJzxza3ktZGF0ZXBpY2tlcj5cXG4gIDxpbnB1dCBza3lEYXRlcGlja2VySW5wdXQgLz5cXG48L3NreS1kYXRlcGlja2VyPidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBpbiB0aGUgY2FsZW5kYXIsIHdoZXJlIGAwYCBzZXRzIHRoZSBzdGFydGluZyBkYXlcbiAgICogdG8gU3VuZGF5LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4gICAqIGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdEYXkodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdGFydGluZ0RheSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc3RhcnRpbmdEYXkgPSB0aGlzLnN0YXJ0aW5nRGF5O1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IHN0YXJ0aW5nRGF5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zdGFydGluZ0RheSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLnN0YXJ0aW5nRGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSB2YWx1ZSBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgZnJvbSB0aGUgYGRhdGVGb3JtYXRgIHZhbHVlLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIHRoZSBpbnB1dCBpcyBtYXJrZWQgYXMgaW52YWxpZC5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgZmFsc2VgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogaXQgYXR0ZW1wdHMgdG8gZm9ybWF0IHRoZSBzdHJpbmcgYmFzZWQgb24gdGhlIFtJU08gODYwMSBzdGFuZGFyZCBmb3JtYXRdKGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTg2MDEtZGF0ZS1hbmQtdGltZS1mb3JtYXQuaHRtbCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0cmljdCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdHJpY3QgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyaWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfc3RyaWN0O1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuICAjZGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG4gICNpbml0aWFsUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcbiAgI19tYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAjX21pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19zdHJpY3QgPSBmYWxzZTtcbiAgI192YWx1ZTogYW55O1xuXG4gICNhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXI7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI2RhdGVwaWNrZXJDb21wb25lbnQ6IFNreURhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWRhcHRlcjogU2t5RGF0ZXBpY2tlckFkYXB0ZXJTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZSxcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBkaXJlY3RpdmUgd2l0aGluIGEgJyArXG4gICAgICAgICAgJ2A8c2t5LWRhdGVwaWNrZXI+YCBjb21wb25lbnQhJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb25maWdTZXJ2aWNlID0gY29uZmlnU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlciA9IGxvY2FsZVByb3ZpZGVyO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jcmVzb3VyY2VzU2VydmljZSA9IHJlc291cmNlc1NlcnZpY2U7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG4gICAgdGhpcy4jaW5pdGlhbFBsYWNlaG9sZGVyID0gdGhpcy4jYWRhcHRlci5nZXRQbGFjZWhvbGRlcih0aGlzLiNlbGVtZW50UmVmKTtcbiAgICB0aGlzLiN1cGRhdGVQbGFjZWhvbGRlcigpO1xuXG4gICAgdGhpcy4jbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5zZXRMb2NhbGUobG9jYWxlSW5mby5sb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuI2FwcGx5RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG5cbiAgICBjb25zdCBoYXNBcmlhTGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuXG4gICAgaWYgKCFoYXNBcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2VcbiAgICAgICAgLmdldFN0cmluZygnc2t5dXhfZGF0ZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICdhcmlhLWxhYmVsJywgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNjb250cm9sICYmIHRoaXMuI2NvbnRyb2wucGFyZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jdmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAodGhpcy5za3lEYXRlcGlja2VyTm9WYWxpZGF0ZSkge1xuICAgICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgdmFsdWUgaW50byBhIERhdGUgdmFsdWUgaWYgaXQgaXMgbWFsZm9ybWVkLlxuICAgIGlmICh0aGlzLiNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlKTtcblxuICAgIHRoaXMuI2NvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICBza3lEYXRlOiB7XG4gICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgICAgLy8gQWNjb3VudCBmb3IgYW55IGRhdGUgY29udmVyc2lvbiB0aGF0IG1heSBoYXZlIG9jY3VycmVkIHByaW9yIHRvIHZhbGlkYXRpb24uXG4gICAgICBpZiAodGhpcy4jY29udHJvbC52YWx1ZSAhPT0gdGhpcy4jdmFsdWUpIHtcbiAgICAgICAgdGhpcy4jY29udHJvbC5wYXRjaFZhbHVlKHRoaXMuI3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGlzRGF0ZVZhbGlkID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZCh2YWx1ZSk7XG5cbiAgICAgIGlmICghaXNEYXRlVmFsaWQpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtaW5EYXRlICYmXG4gICAgICAgIHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWluRGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPCBtaW5EYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtaW5EYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWF4RGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1heERhdGUpICYmXG4gICAgICAgIHZhbHVlID4gbWF4RGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWF4RGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gICNhcHBseURhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICBpZiAodGhpcy4jdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgdGhpcy4jdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRhdGUgdmFsdWUgZnJvbSBhIHZhbHVlIC0gaWYgcG9zc2libGUuXG4gICAqIFdpbGwgbm90IGNvbnZlcnQgdW5jb252ZXJ0aWJsZSBkYXRlcyBvciBudW1iZXJzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgdmFsdWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQuXG4gICAqL1xuICAjZ2V0RGF0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgZGF0ZSBvYmplY3QgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGRhdGUgc3RyaW5nLlxuICAgKiBJdCB3aWxsIGFsc28gY29udmVydCBudW1lcmljIGlucHV0IHRvIGEgZGF0ZSBpZiB0aGF0IG51bWJlciBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogSWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCwgYHVuZGVmaW5lZGAgYmUgcmV0dXJuZWQuXG4gICAqL1xuICAjZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAvLyBXZSByZXF1aXJlIDggZGlnaXRzIGluIG9yZGVyIHRvIGtub3cgdGhhdCB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoYXQgcGFydCBvZiB0aGUgbnVtYmVyIGlzIHRoZSBtb250aCAoMiksIGRheSAoMiksIGFuZCB5ZWFyICg0KS5cbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC9cXGIoTU0pXFxifFxcYihERClcXGJ8XFxiKFlZKVxcYnxcXGIoWVlZWSlcXGIvLCAnZycpO1xuICAgICAgICBjb25zdCBmb3JtYXRUb2tlbnNPbmx5ID0gdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICAgPy5tYXRjaChyZWdleClcbiAgICAgICAgICA/LmpvaW4oJycpXG4gICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgvWSsvKSwgJ1lZWVknKTtcblxuICAgICAgICBpZiAoZm9ybWF0VG9rZW5zT25seSAmJiBmb3JtYXRUb2tlbnNPbmx5Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBmb3JtYXRUb2tlbnNPbmx5LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHNob3J0Y3V0RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbnVtKTtcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gc2hvcnRjdXREYXRlLmdldERhdGUoKTtcbiAgICAgIGlmIChudW0gPiAwICYmIG51bSA8PSBkYXlzSW5Nb250aCkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXREYXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy5zdHJpY3RcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChkYXRlKSkge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVuc3VyZSBpdCBpcyBmb3JtYXR0ZWQgY29ycmVjdGx5LlxuICAgKi9cbiAgI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIERvZXMgdGhlIHZhbHVlIG9ubHkgaW5jbHVkZSBkaWdpdHMsIGRhc2hlcywgb3Igc2xhc2hlcz9cbiAgICBjb25zdCByZWdleHAgPSAvXltcXGQvLV0rJC87XG4gICAgY29uc3QgaXNWYWxpZCA9IHJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QsIGRvZXMgaXQgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgSVNPIGZvcm1hdD9cbiAgICBjb25zdCBpc1ZhbGlkSXNvID0gbW9tZW50KHZhbHVlLCBtb21lbnQuSVNPXzg2MDEpLmlzVmFsaWQoKTtcblxuICAgIHJldHVybiBpc1ZhbGlkSXNvO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgI3VwZGF0ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jaW5pdGlhbFBsYWNlaG9sZGVyICYmIHRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgdGhpcy4jYWRhcHRlci5zZXRQbGFjZWhvbGRlcih0aGlzLiNlbGVtZW50UmVmLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNfdmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZERhdGVTdHJpbmcgPSB0aGlzLiNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSk7XG5cbiAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIHN1cHBsaWVkIGlzIG1hbGZvcm1lZCwgZG8gbm90IHNldCB0aGUgdmFsdWUgdG8gaXRzIERhdGUgZXF1aXZhbGVudC5cbiAgICAvLyAoSmF2YVNjcmlwdCdzIERhdGUgcGFyc2VyIHdpbGwgY29udmVydCBwb29ybHkgZm9ybWF0dGVkIGRhdGVzIHRvIERhdGUgb2JqZWN0cywgc3VjaCBhcyBcImFiYyAxMjNcIiwgd2hpY2ggaXNuJ3QgaWRlYWwuKVxuICAgIGlmICghaXNWYWxpZERhdGVTdHJpbmcpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy4jX3ZhbHVlO1xuXG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgZGF0ZSB2YWx1ZSBmb3IgdGhlIGlucHV0IGlmIHBvc3NpYmxlLlxuICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIHRha2UgaW50byBhY2NvdW50IGFsbCBzaG9ydGN1dCBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZGF0ZVZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkID0gdGhpcy4jZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgY29uc3QgYXJlRGF0ZXNFcXVhbCA9XG4gICAgICAgIHRoaXMuI192YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgZGF0ZVZhbHVlICYmXG4gICAgICAgIGRhdGVWYWx1ZS5nZXRUaW1lKCkgPT09IHRoaXMuI192YWx1ZS5nZXRUaW1lKCk7XG5cbiAgICAgIGlmIChkYXRlVmFsdWUgIT09IHRoaXMuI192YWx1ZSB8fCAhYXJlRGF0ZXNFcXVhbCkge1xuICAgICAgICB0aGlzLiNfdmFsdWUgPSBkYXRlVmFsdWUgfHwgdmFsdWU7XG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLiNfdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZVN0cmluZyA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICAgIGRhdGVWYWx1ZSxcbiAgICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZVN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSB8fCAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQUkzRSxNQUFNLDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLHdCQUF3QixHQUFHO0lBQy9CLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBVUYsTUFBTSxPQUFPLDJCQUEyQjtJQVN0Qzs7OztPQUlHO0lBQ0gsSUFDVyxVQUFVLENBQUMsS0FBeUI7UUFDN0MsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQVcsVUFBVTtRQUNuQixPQUFPLENBQ0wsSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVO1lBQzlCLElBQUksQ0FBQyx5QkFBeUIsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBMEI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFDOUIsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csT0FBTyxDQUFDLEtBQXVCO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csT0FBTyxDQUFDLEtBQXVCO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxrQkFBa0IsQ0FDM0IsS0FBOEM7UUFFOUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUNWLG9GQUFvRjtnQkFDbEYsb0ZBQW9GO2dCQUNwRiwyQkFBMkI7Z0JBQzNCLG9CQUFvQjtnQkFDcEIscUVBQXFFLENBQ3hFLENBQUM7U0FDSDtJQUNILENBQUM7SUFTRDs7Ozs7T0FLRztJQUNILElBQ1csV0FBVyxDQUFDLEtBQXlCO1FBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUV6RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLE1BQU0sQ0FBQyxLQUEwQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBOEI7SUFDdEMsY0FBYyxDQUEwQjtJQUN4QyxtQkFBbUIsQ0FBUztJQUM1Qix5QkFBeUIsQ0FBcUI7SUFDOUMsY0FBYyxDQUF1QjtJQUVyQyxZQUFZLENBQXFCO0lBQ2pDLFVBQVUsQ0FBUztJQUNuQixTQUFTLENBQW1CO0lBQzVCLFNBQVMsQ0FBbUI7SUFDNUIsYUFBYSxDQUFxQjtJQUNsQyxRQUFRLENBQVM7SUFDakIsT0FBTyxDQUFNO0lBRWIsUUFBUSxDQUE4QjtJQUN0QyxlQUFlLENBQW9CO0lBQ25DLGNBQWMsQ0FBNkI7SUFDM0MsV0FBVyxDQUFhO0lBQ3hCLGVBQWUsQ0FBdUI7SUFDdEMsU0FBUyxDQUFZO0lBQ3JCLG9CQUFvQixDQUF5QjtJQUU3QyxZQUNFLE9BQW9DLEVBQ3BDLGNBQWlDLEVBQ2pDLGFBQXlDLEVBQ3pDLFVBQXNCLEVBQ3RCLGNBQW9DLEVBQ3BDLFFBQW1CLEVBQ1AsbUJBQTRDO1FBaEYxRDs7O1dBR0c7UUFFSSw0QkFBdUIsR0FBd0IsS0FBSyxDQUFDO1FBK0M1RCxtQkFBYyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUd4QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHckMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUluQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBdVVqQixnRUFBZ0U7UUFDaEUsdUJBQXVCO1FBQ3ZCLGNBQVMsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzNCLGdFQUFnRTtRQUNoRSx1QkFBdUI7UUFDdkIsZUFBVSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN0QixnRUFBZ0U7UUFDaEUsdUJBQXVCO1FBQ3ZCLHVCQUFrQixHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQTNUNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNERBQTREO2dCQUMxRCwrQkFBK0IsQ0FDbEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGVBQWU7YUFDakIsYUFBYSxFQUFFO2FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMseUJBQXlCO2dCQUM1QixnQkFBZ0IsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFFBQVE7UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUUvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVO2FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLEtBQVcsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlO1FBQ3BCLGdEQUFnRDtRQUNoRCxtRkFBbUY7UUFDbkYsdURBQXVEO1FBQ3ZELG9GQUFvRjtRQUNwRiw2REFBNkQ7UUFDN0QsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ25DLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhLENBQUMsS0FBVTtRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUVELDRFQUE0RTtRQUM1RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7WUFDdkIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2FBQ2Q7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR00sV0FBVztRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUdNLE9BQU87UUFDWixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLDhFQUE4RTtZQUM5RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3RDtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sS0FBSyxHQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFckMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7WUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIscUZBQXFGO2dCQUNyRix3RkFBd0Y7Z0JBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRTlCLE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQLE9BQU8sRUFBRSxLQUFLO3FCQUNmO2lCQUNGLENBQUM7YUFDSDtZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0IsSUFDRSxPQUFPO2dCQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsS0FBSyxHQUFHLE9BQU8sRUFDZjtnQkFDQSxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxPQUFPO3FCQUNSO2lCQUNGLENBQUM7YUFDSDtZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0IsSUFDRSxPQUFPO2dCQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsS0FBSyxHQUFHLE9BQU8sRUFDZjtnQkFDQSxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxPQUFPO3FCQUNSO2lCQUNGLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxxRkFBcUY7WUFDckYsd0ZBQXdGO1lBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFOUIsT0FBTztnQkFDTCxPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUF3QjtRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBYztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0seUJBQXlCLENBQUMsRUFBYztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUM5QyxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEtBQWM7UUFDMUIsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsS0FBYTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLHlKQUF5SjtZQUN6SixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVTtvQkFDdEMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNkLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztxQkFDVCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXJDLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDaEQsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixJQUFJLENBQ0wsQ0FBQztvQkFDRixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN6QyxPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFDRjthQUNGO1lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsRUFBRTtnQkFDakMsT0FBTyxZQUFZLENBQUM7YUFDckI7U0FDRjthQUFNO1lBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDaEQsS0FBSyxFQUNMLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekMsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsMERBQTBEO1FBQzFELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELHNEQUFzRDtRQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1RCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLHVCQUF1QjtJQUN2QixTQUFTLENBQWtCO0lBQzNCLGdFQUFnRTtJQUNoRSx1QkFBdUI7SUFDdkIsVUFBVSxDQUFZO0lBQ3RCLGdFQUFnRTtJQUNoRSx1QkFBdUI7SUFDdkIsa0JBQWtCLENBQVk7SUFFOUIsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQVUsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUN2QyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpELDBGQUEwRjtRQUMxRix3SEFBd0g7UUFDeEgsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM3RDtZQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUV0RCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNMLGtFQUFrRTtZQUNsRSxnRUFBZ0U7WUFDaEUsTUFBTSxTQUFTLEdBQXFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxPQUFPLFlBQVksSUFBSTtnQkFDNUIsU0FBUztnQkFDVCxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVqRCxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUM7Z0JBQ2xDLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQzdEO2dCQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN2RDtZQUVELElBQUksU0FBUyxFQUFFO2dCQUNiLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQ3BELFNBQVMsRUFDVCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO2dCQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7OEdBeGpCVSwyQkFBMkI7a0dBQTNCLDJCQUEyQiwwWUFOM0I7WUFDVCw2QkFBNkI7WUFDN0Isd0JBQXdCO1lBQ3hCLDJCQUEyQjtTQUM1Qjs7MkZBRVUsMkJBQTJCO2tCQVJ2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFNBQVMsRUFBRTt3QkFDVCw2QkFBNkI7d0JBQzdCLHdCQUF3Qjt3QkFDeEIsMkJBQTJCO3FCQUM1QjtpQkFDRjs7MEJBNExJLFFBQVE7NENBNUtBLFVBQVU7c0JBRHBCLEtBQUs7Z0JBd0JLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0JLLE9BQU87c0JBRGpCLEtBQUs7Z0JBa0JLLE9BQU87c0JBRGpCLEtBQUs7Z0JBb0JLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFvQkMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBc0JLLE1BQU07c0JBRGhCLEtBQUs7Z0JBbUhDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBCM0IsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxNQUFNO2dCQU1iLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICAgIFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIHRoZSBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG4gICAgICB0aGlzLiNhcHBseURhdGVGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4RGF0ZSh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhEYXRlID0gdmFsdWU7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IG1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19tYXhEYXRlIHx8IHRoaXMuI2NvbmZpZ1NlcnZpY2UubWF4RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZWFybGllc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC4gVG8gYXZvaWQgdmFsaWRhdGlvbiBlcnJvcnMsIHRoZSB0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWluaW11bSBkYXRlIG11c3QgYmUgbWlkbmlnaHQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRhdGVwaWNrZXIgYXV0b21hdGljYWxseSBzZXRzIHRoZSB0aW1lIG9uIHRoZSBgRGF0ZWAgb2JqZWN0IGZvciBzZWxlY3RlZCBkYXRlcyB0byBtaWRuaWdodCBpbiB0aGUgY3VycmVudCB1c2VyJ3MgdGltZSB6b25lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XG5cbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3IgdG8gbm90IGhhdmUgZ2V0dGVyIGxvZ2ljXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkRhdGUgfHwgdGhpcy4jY29uZmlnU2VydmljZS5taW5EYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIGNhbGVuZGFyLiBQbGFjZSB0aGlzIGRpcmVjdGl2ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnQsXG4gICAqIGFuZCB3cmFwIHRoZSBpbnB1dCBpbiBhIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50LiBUaGUgdmFsdWUgdGhhdCB1c2VycyBzZWxlY3QgaXMgZHJpdmVuXG4gICAqIHRocm91Z2ggdGhlIGBuZ01vZGVsYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lEYXRlcGlja2VySW5wdXQoXG4gICAgdmFsdWU6IFNreURhdGVwaWNrZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCAnJ1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tEZXByZWNhdGlvbiB3YXJuaW5nXSBZb3Ugbm8gbG9uZ2VyIG5lZWQgdG8gcHJvdmlkZSBhIHRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSAnICtcbiAgICAgICAgICAndG8gdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGF0dHJpYnV0ZSAodGhpcyB3aWxsIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGluIHRoZSBuZXh0ICcgK1xuICAgICAgICAgICdtYWpvciB2ZXJzaW9uIHJlbGVhc2UpLlxcbicgK1xuICAgICAgICAgICdEbyB0aGlzIGluc3RlYWQ6XFxuJyArXG4gICAgICAgICAgJzxza3ktZGF0ZXBpY2tlcj5cXG4gIDxpbnB1dCBza3lEYXRlcGlja2VySW5wdXQgLz5cXG48L3NreS1kYXRlcGlja2VyPidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBpbiB0aGUgY2FsZW5kYXIsIHdoZXJlIGAwYCBzZXRzIHRoZSBzdGFydGluZyBkYXlcbiAgICogdG8gU3VuZGF5LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4gICAqIGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdEYXkodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdGFydGluZ0RheSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc3RhcnRpbmdEYXkgPSB0aGlzLnN0YXJ0aW5nRGF5O1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IHN0YXJ0aW5nRGF5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zdGFydGluZ0RheSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLnN0YXJ0aW5nRGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSB2YWx1ZSBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgZnJvbSB0aGUgYGRhdGVGb3JtYXRgIHZhbHVlLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIHRoZSBpbnB1dCBpcyBtYXJrZWQgYXMgaW52YWxpZC5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgZmFsc2VgIGFuZCB0aGUgZGF0ZXBpY2tlciBpbnB1dCBkaXJlY3RpdmUgY2Fubm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHRoZW5cbiAgICogaXQgYXR0ZW1wdHMgdG8gZm9ybWF0IHRoZSBzdHJpbmcgYmFzZWQgb24gdGhlIFtJU08gODYwMSBzdGFuZGFyZCBmb3JtYXRdKGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTg2MDEtZGF0ZS1hbmQtdGltZS1mb3JtYXQuaHRtbCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0cmljdCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdHJpY3QgPSB2YWx1ZSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyaWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfc3RyaWN0O1xuICB9XG5cbiAgZ2V0ICN2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICBzZXQgI3ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAjY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuICAjZGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG4gICNpbml0aWFsUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19kYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcbiAgI19tYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICAjX21pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICNfc3RhcnRpbmdEYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19zdHJpY3QgPSBmYWxzZTtcbiAgI192YWx1ZTogYW55O1xuXG4gICNhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNjb25maWdTZXJ2aWNlOiBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXI7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBTa3lEYXRlcGlja2VyQWRhcHRlclNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgbG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgZGF0ZXBpY2tlckNvbXBvbmVudD86IFNreURhdGVwaWNrZXJDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKCFkYXRlcGlja2VyQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3UgbXVzdCB3cmFwIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBkaXJlY3RpdmUgd2l0aGluIGEgJyArXG4gICAgICAgICAgJ2A8c2t5LWRhdGVwaWNrZXI+YCBjb21wb25lbnQhJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNjb25maWdTZXJ2aWNlID0gY29uZmlnU2VydmljZTtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNsb2NhbGVQcm92aWRlciA9IGxvY2FsZVByb3ZpZGVyO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG4gICAgdGhpcy4jaW5pdGlhbFBsYWNlaG9sZGVyID0gdGhpcy4jYWRhcHRlci5nZXRQbGFjZWhvbGRlcih0aGlzLiNlbGVtZW50UmVmKTtcbiAgICB0aGlzLiN1cGRhdGVQbGFjZWhvbGRlcigpO1xuXG4gICAgdGhpcy4jbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgU2t5RGF0ZUZvcm1hdHRlci5zZXRMb2NhbGUobG9jYWxlSW5mby5sb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuI2FwcGx5RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuZGF0ZUNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNjb250cm9sICYmIHRoaXMuI2NvbnRyb2wucGFyZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jdmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAodGhpcy5za3lEYXRlcGlja2VyTm9WYWxpZGF0ZSkge1xuICAgICAgdGhpcy4jb25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgdmFsdWUgaW50byBhIERhdGUgdmFsdWUgaWYgaXQgaXMgbWFsZm9ybWVkLlxuICAgIGlmICh0aGlzLiNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlKTtcblxuICAgIHRoaXMuI2NvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICBza3lEYXRlOiB7XG4gICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy4jY29udHJvbD8ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuI2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2wgPSBjb250cm9sO1xuICAgICAgLy8gQWNjb3VudCBmb3IgYW55IGRhdGUgY29udmVyc2lvbiB0aGF0IG1heSBoYXZlIG9jY3VycmVkIHByaW9yIHRvIHZhbGlkYXRpb24uXG4gICAgICBpZiAodGhpcy4jY29udHJvbC52YWx1ZSAhPT0gdGhpcy4jdmFsdWUpIHtcbiAgICAgICAgdGhpcy4jY29udHJvbC5wYXRjaFZhbHVlKHRoaXMuI3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGlzRGF0ZVZhbGlkID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZCh2YWx1ZSk7XG5cbiAgICAgIGlmICghaXNEYXRlVmFsaWQpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtaW5EYXRlICYmXG4gICAgICAgIHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWluRGF0ZSkgJiZcbiAgICAgICAgdmFsdWUgPCBtaW5EYXRlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgICBtaW5EYXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbWF4RGF0ZSAmJlxuICAgICAgICB0aGlzLiNkYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1heERhdGUpICYmXG4gICAgICAgIHZhbHVlID4gbWF4RGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgbWF4RGF0ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNYXJrIHRoZSBpbnZhbGlkIGNvbnRyb2wgYXMgdG91Y2hlZCBzbyB0aGF0IHRoZSBpbnB1dCdzIGludmFsaWQgQ1NTIHN0eWxlcyBhcHBlYXIuXG4gICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gICNhcHBseURhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICBpZiAodGhpcy4jdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgdGhpcy4jdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICAgIHRoaXMuI3NldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI29uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICAjc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRhdGUgdmFsdWUgZnJvbSBhIHZhbHVlIC0gaWYgcG9zc2libGUuXG4gICAqIFdpbGwgbm90IGNvbnZlcnQgdW5jb252ZXJ0aWJsZSBkYXRlcyBvciBudW1iZXJzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgdmFsdWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQuXG4gICAqL1xuICAjZ2V0RGF0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgZGF0ZSBvYmplY3QgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGRhdGUgc3RyaW5nLlxuICAgKiBJdCB3aWxsIGFsc28gY29udmVydCBudW1lcmljIGlucHV0IHRvIGEgZGF0ZSBpZiB0aGF0IG51bWJlciBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogSWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCwgYHVuZGVmaW5lZGAgYmUgcmV0dXJuZWQuXG4gICAqL1xuICAjZ2V0U2hvcnRjdXRPckRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAvLyBXZSByZXF1aXJlIDggZGlnaXRzIGluIG9yZGVyIHRvIGtub3cgdGhhdCB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoYXQgcGFydCBvZiB0aGUgbnVtYmVyIGlzIHRoZSBtb250aCAoMiksIGRheSAoMiksIGFuZCB5ZWFyICg0KS5cbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC9cXGIoTU0pXFxifFxcYihERClcXGJ8XFxiKFlZKVxcYnxcXGIoWVlZWSlcXGIvLCAnZycpO1xuICAgICAgICBjb25zdCBmb3JtYXRUb2tlbnNPbmx5ID0gdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICAgPy5tYXRjaChyZWdleClcbiAgICAgICAgICA/LmpvaW4oJycpXG4gICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgvWSsvKSwgJ1lZWVknKTtcblxuICAgICAgICBpZiAoZm9ybWF0VG9rZW5zT25seSAmJiBmb3JtYXRUb2tlbnNPbmx5Lmxlbmd0aCA9PT0gOCkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLiNkYXRlRm9ybWF0dGVyLmdldERhdGVGcm9tU3RyaW5nKFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBmb3JtYXRUb2tlbnNPbmx5LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuI2RhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHNob3J0Y3V0RGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbnVtKTtcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gc2hvcnRjdXREYXRlLmdldERhdGUoKTtcbiAgICAgIGlmIChudW0gPiAwICYmIG51bSA8PSBkYXlzSW5Nb250aCkge1xuICAgICAgICByZXR1cm4gc2hvcnRjdXREYXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy4jZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy5zdHJpY3RcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy4jZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChkYXRlKSkge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVuc3VyZSBpdCBpcyBmb3JtYXR0ZWQgY29ycmVjdGx5LlxuICAgKi9cbiAgI2lzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIERvZXMgdGhlIHZhbHVlIG9ubHkgaW5jbHVkZSBkaWdpdHMsIGRhc2hlcywgb3Igc2xhc2hlcz9cbiAgICBjb25zdCByZWdleHAgPSAvXltcXGQvLV0rJC87XG4gICAgY29uc3QgaXNWYWxpZCA9IHJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QsIGRvZXMgaXQgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgSVNPIGZvcm1hdD9cbiAgICBjb25zdCBpc1ZhbGlkSXNvID0gbW9tZW50KHZhbHVlLCBtb21lbnQuSVNPXzg2MDEpLmlzVmFsaWQoKTtcblxuICAgIHJldHVybiBpc1ZhbGlkSXNvO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgI29uVmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cbiAgI3VwZGF0ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jaW5pdGlhbFBsYWNlaG9sZGVyICYmIHRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgdGhpcy4jYWRhcHRlci5zZXRQbGFjZWhvbGRlcih0aGlzLiNlbGVtZW50UmVmLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgYW5kIGlucHV0IGVsZW1lbnRcbiAgICogQHBhcmFtIGVtaXRFdmVudCBEZW5vdGVzIGlmIHdlIGVtaXQgYW4gZXZlbnQgdG8gdGhlIGNvbnN1bWVyJ3MgZm9ybSBjb250cm9sLiBXZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSB2YWx1ZSBpcyBiZWluZyB1cGRhdGVkIHZpYSBhIGBzZXRWYWx1ZWAgY2FsbCBvciBhIGBwYXRjaFZhbHVlYCBjYWxsIGFzIHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IEFuZ3VsYXIuXG4gICAqIEluIHRoZXNlIGNhc2VzIHdlIGRvIG5vdCB3YW50IHRvIGZpcmUgYG9uQ2hhbmdlYCBhcyBpdCB3aWxsIGNhdXNlIGV4dHJhIGB2YWx1ZUNoYW5nZWAgYW5kIGBzdGF0dXNDaGFuZ2VgIGV2ZW50cyBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZm9ybSBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuXG4gICAqL1xuICAjdXBkYXRlVmFsdWUodmFsdWU6IGFueSwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNfdmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNWYWxpZERhdGVTdHJpbmcgPSB0aGlzLiNpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSk7XG5cbiAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIHN1cHBsaWVkIGlzIG1hbGZvcm1lZCwgZG8gbm90IHNldCB0aGUgdmFsdWUgdG8gaXRzIERhdGUgZXF1aXZhbGVudC5cbiAgICAvLyAoSmF2YVNjcmlwdCdzIERhdGUgcGFyc2VyIHdpbGwgY29udmVydCBwb29ybHkgZm9ybWF0dGVkIGRhdGVzIHRvIERhdGUgb2JqZWN0cywgc3VjaCBhcyBcImFiYyAxMjNcIiwgd2hpY2ggaXNuJ3QgaWRlYWwuKVxuICAgIGlmICghaXNWYWxpZERhdGVTdHJpbmcpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29udHJvbD8uc2V0VmFsdWUodGhpcy4jX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy4jX3ZhbHVlO1xuXG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgZGF0ZSB2YWx1ZSBmb3IgdGhlIGlucHV0IGlmIHBvc3NpYmxlLlxuICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIHRha2UgaW50byBhY2NvdW50IGFsbCBzaG9ydGN1dCBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZGF0ZVZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkID0gdGhpcy4jZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgY29uc3QgYXJlRGF0ZXNFcXVhbCA9XG4gICAgICAgIHRoaXMuI192YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgZGF0ZVZhbHVlICYmXG4gICAgICAgIGRhdGVWYWx1ZS5nZXRUaW1lKCkgPT09IHRoaXMuI192YWx1ZS5nZXRUaW1lKCk7XG5cbiAgICAgIGlmIChkYXRlVmFsdWUgIT09IHRoaXMuI192YWx1ZSB8fCAhYXJlRGF0ZXNFcXVhbCkge1xuICAgICAgICB0aGlzLiNfdmFsdWUgPSBkYXRlVmFsdWUgfHwgdmFsdWU7XG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICB0aGlzLiNvbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2NvbnRyb2w/LnNldFZhbHVlKHRoaXMuI192YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLiNfdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZVN0cmluZyA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICAgIGRhdGVWYWx1ZSxcbiAgICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZVN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSB8fCAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|