@fundamental-ngx/core 0.58.0-rc.72 → 0.58.0-rc.74
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/calendar/index.d.ts +40 -27
- package/date-picker/index.d.ts +25 -14
- package/datetime-picker/index.d.ts +23 -13
- package/fesm2022/fundamental-ngx-core-calendar.mjs +105 -98
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +34 -12
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +26 -18
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-date-picker.mjs","sources":["../tmp-esm2022/date-picker/tokens.js","../tmp-esm2022/date-picker/date-picker-mobile/date-picker-mobile.component.js","../tmp-esm2022/date-picker/errors.js","../tmp-esm2022/date-picker/date-picker.component.js","../tmp-esm2022/date-picker/date-picker.module.js","../tmp-esm2022/date-picker/fundamental-ngx-core-date-picker.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const FD_DATE_PICKER_COMPONENT = new InjectionToken('FdDatePickerComponent');\nexport const FD_DATE_PICKER_MOBILE_CONFIG = new InjectionToken('FdDatePickerMobileConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFrQix1QkFBdUIsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFtQiwwQkFBMEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPERhdGVQaWNrZXI8YW55Pj4oJ0ZkRGF0ZVBpY2tlckNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TW9iaWxlTW9kZUNvbmZpZz4oJ0ZkRGF0ZVBpY2tlck1vYmlsZUNvbmZpZycpO1xuIl19","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from '../tokens';\nimport * as i0 from \"@angular/core\";\nexport class DatePickerMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(datePickerConfig, datePickerComponent) {\n super(datePickerComponent, MobileModeControl.DATE_PICKER);\n this.datePickerConfig = datePickerConfig;\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.selectedDate;\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n this._selectedBackup = this._component.getSelectedDate();\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, deps: [{ token: FD_DATE_PICKER_MOBILE_CONFIG }, { token: FD_DATE_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerMobileComponent, isStandalone: true, selector: \"fd-date-picker-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker-mobile', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogFooterComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogHeaderComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_MOBILE_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUNILG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFtQm5GLE1BQU0sT0FBTyx5QkFBNkIsU0FBUSxjQUE2QjtJQU8zRSxjQUFjO0lBQ2QsWUFFVyxnQkFBMkYsRUFDaEUsbUJBQWtDO1FBRXBFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhuRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJFO1FBS2xHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWE7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWM7SUFDZCxhQUFhO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsSUFBYTtRQUMvQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQWEsQ0FBQztZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLEtBQUs7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDM0QsTUFBTSxFQUFFLElBQUk7WUFDWixzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDWixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNwRCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0E5RFEseUJBQXlCLGtCQVN0Qiw0QkFBNEIsYUFFNUIsd0JBQXdCO2tHQVgzQix5QkFBeUIsME5DbkN0Qyx1c0NBeUJBLDRDRERRLGNBQWMsMEhBQ2QsZ0JBQWdCLG9KQUNoQixxQkFBcUIsNkRBQ3JCLGVBQWUsc0dBQ2YsbUJBQW1CLHdGQUNuQiwwQkFBMEIsK0dBQzFCLHFCQUFxQiw2REFDckIsa0JBQWtCLDRIQUNsQixxQkFBcUI7OzJGQUdoQix5QkFBeUI7a0JBakJyQyxTQUFTOytCQUNJLHVCQUF1QixpQkFFbEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDTCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3FCQUN4Qjs7MEJBV0ksTUFBTTsyQkFBQyw0QkFBNEI7OzBCQUVuQyxNQUFNOzJCQUFDLHdCQUF3Qjt5Q0FUUCxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5pdGlhbEZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgRGlhbG9nSGVhZGVyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUJhc2UsIE1vYmlsZU1vZGVDb250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICcuLi9kYXRlLXBpY2tlci5tb2RlbCc7XG5pbXBvcnQgeyBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsIEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGUtcGlja2VyLW1vYmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRpdGxlQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQmFyQ29tcG9uZW50LFxuICAgICAgICBJbml0aWFsRm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4gZXh0ZW5kcyBNb2JpbGVNb2RlQmFzZTxEYXRlUGlja2VyPEQ+PiB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScpIGRpYWxvZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZEJhY2t1cDogRCB8IEFycmF5PEQ+IHwgRGF0ZVJhbmdlPEQ+IHwgQXJyYXk8RGF0ZVJhbmdlPEQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRkRfREFURV9QSUNLRVJfTU9CSUxFX0NPTkZJRylcbiAgICAgICAgcHVibGljIGRhdGVQaWNrZXJDb25maWc6IHsgY2FsZW5kYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0sXG4gICAgICAgIEBJbmplY3QoRkRfREFURV9QSUNLRVJfQ09NUE9ORU5UKSBkYXRlUGlja2VyQ29tcG9uZW50OiBEYXRlUGlja2VyPEQ+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGRhdGVQaWNrZXJDb21wb25lbnQsIE1vYmlsZU1vZGVDb250cm9sLkRBVEVfUElDS0VSKTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnQuaXNPcGVuQ2hhbmdlLnN1YnNjcmliZSgoaXNPcGVuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEaWFsb2coaXNPcGVuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nQXBwcm92ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nRGlzbWlzcyh0aGlzLl9zZWxlY3RlZEJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVEaWFsb2cob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuc2VsZWN0ZWREYXRlITtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuZ2V0U2VsZWN0ZWREYXRlKCk7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgICAgICAgICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlUGlja2VyQ29uZmlnLmNhbGVuZGFyVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyPlxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBmZFR5cGU9XCJlbXBoYXNpemVkXCIgW2xhYmVsXT1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlQXBwcm92ZSgpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZka0luaXRpYWxGb2N1cyBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPlxuICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`FdDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQWdCO0lBQ2pFLE9BQU8sS0FBSyxDQUNSLHVDQUF1QyxRQUFRLHlDQUF5QztRQUNwRixtRUFBbUU7UUFDbkUsd0JBQXdCLENBQy9CLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENyZWF0ZXMgYW4gZXJyb3IgdG8gYmUgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byB1c2UgYW4gaW52YWxpZCBkYXRlIGltcGxlbWVudGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcihwcm92aWRlcjogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBFcnJvcihcbiAgICAgICAgYEZkRGF0ZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yICR7cHJvdmlkZXJ9LiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICBgbW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IEZkRGF0ZXRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBgICtcbiAgICAgICAgICAgIGBjdXN0b20gaW1wbGVtZW50YXRpb24uYFxuICAgICk7XG59XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, forwardRef, Inject, inject, Injector, Input, Optional, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DynamicComponentService, FocusTrapService } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CalendarComponent, CalendarTypeEnum, DateRange, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FormMessageComponent, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverModule, PopoverService } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"@fundamental-ngx/core/form\";\nimport * as i3 from \"@fundamental-ngx/core/popover\";\nimport * as i4 from \"@angular/forms\";\nlet datePickerCounter = 0;\n/**\n * The datetime picker component is an opinionated composition of the fd-popover and\n * fd-calendar components to accomplish the UI pattern for picking a date.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-date-picker [(ngModel)]=\"date\"></fd-date-picker>\n * ```\n *\n */\nexport class DatePickerComponent {\n /** Text displayed in message */\n set message(message) {\n this._message = message;\n }\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n set messageTriggers(triggers) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n /**\n * The state of the form control - applies css classes.\n * Also, this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n set state(state) {\n this._state = state || 'default';\n }\n /** @hidden */\n get state() {\n if (this._state == null && this.useValidation && this._isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n /** Whether the date picker is open. Can be used through two-way binding. */\n set isOpen(value) {\n if (value === this._isOpen) {\n return;\n }\n this._isOpen = value;\n this._showPopoverContents = value;\n this._changeDetectionRef.detectChanges();\n }\n get isOpen() {\n return this._isOpen;\n }\n /** @hidden */\n get _rangeDelimiter() {\n return this._dateTimeFormats.rangeDelimiter;\n }\n /**\n * Date input aria label key based on type\n * @hidden\n */\n get _dateInputArialLabelKey() {\n // return either input value or a key for \"fdTranslate\" pipe\n return this.type === CalendarTypeEnum.Range\n ? 'coreDatePicker.dateRangeInputLabel'\n : 'coreDatePicker.dateInputLabel';\n }\n /** @hidden */\n constructor(_changeDetectionRef, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats, _popoverFormMessage) {\n this._changeDetectionRef = _changeDetectionRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n this._popoverFormMessage = _popoverFormMessage;\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n this.type = CalendarTypeEnum.Single;\n /** Date picker input placeholder string */\n this.placeholder = '';\n /** If it is mandatory field */\n this.required = false;\n /** The currently selected date model in multiple mode. */\n this.selectedMultipleDates = [];\n /** The currently selected date model with start and end in range mode. */\n this.selectedRangeDate = { start: null, end: null };\n /** The currently selected date model with multiple ranges. */\n this.selectedMultipleDateRanges = [];\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n this.rangeHoverEffect = false;\n /** Whether to validate the date picker input. */\n this.useValidation = true;\n /** Whether a null input is considered valid. */\n this.allowNull = true;\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n this.activeView = FdCalendarViewEnum.Day;\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n this.placement = 'bottom-start';\n /** Defines if date picker should be closed after date choose */\n this.closeOnDateChoose = true;\n /** Enables Today-Selection-Button if true */\n this.showTodayButton = false;\n /** Label for Today-Selection-Button */\n this.todayButtonLabel = 'Today';\n /**\n * @deprecated Popover is toggled with f4 key\n */\n this.buttonFocusable = false;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = true;\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = false;\n /** Should date picker be inlined. */\n this.inline = true;\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n this.processInputOnBlur = false;\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n this.preventScrollOnFocus = false;\n /** Whether date picker should rendered in mobile mode. */\n this.mobile = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** Whether to select and display the date range in MM/YYYY or YYYY format\n * For month and year format value is 'month'\n * For year format value is 'year'\n */\n this.dateRangeFormat = '';\n /** Event emitted when the state of the isOpen property changes. */\n this.isOpenChange = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /** Event thrown every time calendar active view is changed */\n this.activeViewChange = new EventEmitter();\n /** @hidden */\n this._message = null;\n /** @hidden */\n this._messageTriggers = ['focusin', 'focusout'];\n /** @hidden The value of the input */\n this._inputFieldDate = null;\n /** @hidden Whether the date input is invalid */\n this._isInvalidDateInput = false;\n /** @hidden */\n this._showPopoverContents = false;\n /** @hidden */\n this._formValueStateMessageId = `fd-date-picker-form-message-${datePickerCounter++}`;\n /** @hidden */\n this._isOpen = false;\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this._state = 'default';\n /** @hidden */\n this._injector = inject(Injector);\n /** @hidden */\n this._dynamicComponentService = inject(DynamicComponentService);\n /** @hidden */\n this._focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n /**\n * Function used to disable certain dates in the calendar.\n */\n this.disableFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n this.disableRangeStartFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n this.disableRangeEndFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n /** @hidden */\n dialogApprove() { }\n /** @hidden */\n dialogDismiss(prevValue) {\n if (this.allowMultipleSelection) {\n if (this._isMultipleDateRanges(prevValue)) {\n this.handleMultipleDateRangesChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleMultipleDatesChange(value);\n }\n }\n else {\n if (this._isDateRange(prevValue)) {\n this.handleRangeDateChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleSingleDateChange(value);\n }\n }\n }\n /** @hidden */\n ngOnInit() {\n // initial view should be month or year if dateRangeFormat is provided\n if (this.dateRangeFormat === 'month') {\n this.activeView = FdCalendarViewEnum.Month;\n }\n else if (this.dateRangeFormat === 'year') {\n this.activeView = FdCalendarViewEnum.Year;\n }\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.formatInputDate(this.selectedDate);\n this._changeDetectionRef.detectChanges();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetectionRef.detectChanges();\n }\n }\n /** @hidden */\n ngAfterViewInit() {\n this._InitialiseVariablesInMessageService();\n this._calendars.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const calendar = this._calendars.first;\n this._calendarComponent = calendar;\n setTimeout(() => {\n if (this._calendarComponent) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService?.unpauseCurrentFocusTrap();\n }\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n });\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView) {\n this.activeViewChange.emit(activeView);\n }\n /** @hidden */\n closeFromCalendar() {\n if (this.type === CalendarTypeEnum.Single && this.closeOnDateChoose && !this.allowMultipleSelection) {\n this.onTouched();\n this.closeCalendar();\n }\n }\n /** Opens the calendar */\n openCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(true);\n this._changeMessageVisibility();\n }\n /** Toggles the calendar open or closed */\n toggleCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(!this.isOpen);\n if (!this.isOpen) {\n this.onTouched();\n }\n this._changeMessageVisibility();\n }\n /** Closes the calendar if it is open */\n closeCalendar() {\n if (!this.isOpen) {\n return;\n }\n this._setOpenState(false);\n this._changeMessageVisibility();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected single date changed\n */\n handleSingleDateChange(date) {\n if (!date) {\n return;\n }\n this.selectedDate = date;\n this.selectedDateChange.emit(date);\n this.onChange(date);\n this._refreshCurrentlyDisplayedCalendarDate(date);\n this.formatInputDate(date);\n this._isInvalidDateInput = !this.isModelValid();\n if (this.closeOnDateChoose && this.type === CalendarTypeEnum.Single) {\n this.closeCalendar();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple dates change.\n */\n handleMultipleDatesChange(dates) {\n if (!dates || dates.length === 0) {\n this.selectedMultipleDates = [];\n this.selectedMultipleDatesChange.emit([]);\n this.onChange([]);\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this._inputFieldDate = null;\n return;\n }\n this.selectedMultipleDates = dates;\n this.selectedMultipleDatesChange.emit(dates);\n this.onChange(dates);\n /** Assuming the first date in the array is used for refresh */\n if (this.showTodayButton) {\n this._refreshCurrentlyDisplayedCalendarDate(dates[0]);\n }\n this._inputFieldDate = this.formatDateArray(dates);\n this._isInvalidDateInput = !this.isModelValid();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected range date changed\n */\n handleRangeDateChange(dates) {\n const startChanged = !this._dateTimeAdapter.datesEqual(dates.start, this.selectedRangeDate.start);\n const endChanged = !this._dateTimeAdapter.datesEqual(dates.end, this.selectedRangeDate.end);\n if (dates && (startChanged || endChanged)) {\n const shouldClose = this.closeOnDateChoose && dates.end !== null;\n if (dates.end !== null) {\n this._inputFieldDate = this._formatDateRange(dates);\n this.selectedRangeDate = {\n start: dates.start,\n end: dates.end\n };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this._refreshCurrentlyDisplayedCalendarDate(dates.start);\n this._isInvalidDateInput = !this.isModelValid();\n }\n if (shouldClose) {\n this.closeCalendar();\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple range dates change.\n */\n handleMultipleDateRangesChange(dates) {\n let hasChanged = false;\n // Check for changes in the date ranges\n if (dates.length !== this.selectedMultipleDateRanges.length) {\n hasChanged = true;\n }\n else {\n for (let i = 0; i < dates.length; i++) {\n if (!this._dateTimeAdapter.datesEqual(dates[i].start, this.selectedMultipleDateRanges[i].start) ||\n !this._dateTimeAdapter.datesEqual(dates[i].end, this.selectedMultipleDateRanges[i].end)) {\n hasChanged = true;\n break;\n }\n }\n }\n // If any date range has changed, update the internal state and emit changes\n if (hasChanged) {\n this.selectedMultipleDateRanges = dates;\n // Update the formatted input field\n this._inputFieldDate = this._formatMultipleDateRanges(dates);\n // Emit the change event\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n // Perform any additional actions such as updating the model or refreshing the calendar\n this.onChange(this.selectedMultipleDateRanges);\n // if you want to refresh the calendar view, you can use the following line\n // this._refreshCurrentlyDisplayedCalendarDate(dates[0].start);\n this._calendarPendingDate = dates[0].start;\n this._isInvalidDateInput = !this.isModelValid();\n }\n }\n /**\n * @hidden\n * Method that is triggered date formatting in the date control\n */\n formatInputDate(date) {\n if (!date) {\n return;\n }\n this._inputFieldDate = this._formatDate(date);\n }\n /**\n * @hidden\n * Method that is triggered when Today-Selection-Button clicked, it changes selected date or date range to today's date\n */\n onTodayButtonClick() {\n const todayDate = this._dateTimeAdapter.today();\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleMultipleDatesChange([todayDate]);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleMultipleDateRangesChange([\n {\n start: todayDate,\n end: todayDate\n }\n ]);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleSingleDateChange(todayDate);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleRangeDateChange({\n start: todayDate,\n end: todayDate\n });\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered when the text input is confirmed to ba changed, by clicking enter, or blur\n */\n handleInputChange(strDate, isTypeEvent) {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this.dateStringUpdate(strDate);\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected) {\n /** If written value is not defined, null, empty string */\n if (!selected) {\n this._inputFieldDate = '';\n this._refreshCurrentlyDisplayedCalendarDate(this._dateTimeAdapter.today());\n this.selectedRangeDate = {\n start: null,\n end: null\n };\n this.selectedDate = null;\n this.selectedMultipleDates = [];\n this.selectedMultipleDateRanges = [];\n this._changeDetectionRef.detectChanges();\n return;\n }\n if (this.allowMultipleSelection && Array.isArray(selected)) {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n // selected = this._parseDate(selected)\n selected = selected;\n this.selectedMultipleDates = selected;\n this._inputFieldDate = this.formatDateArray(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected[0]);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected && selected.length > 0) {\n const filteredRanges = selected.filter((range) => range.start !== null && range.end !== null);\n if (filteredRanges.length > 0) {\n this.selectedMultipleDateRanges = filteredRanges.map((range) => ({\n start: this._parseDate(range.start),\n end: this._parseDate(range.end)\n }));\n this._refreshCurrentlyDisplayedCalendarDate(filteredRanges[0].start);\n this._inputFieldDate = this._formatMultipleDateRanges(filteredRanges);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n selected = this._parseDate(selected);\n this.selectedDate = selected;\n this._inputFieldDate = this._formatDate(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected?.start) {\n this.selectedRangeDate = {\n start: this._parseDate(selected.start),\n end: this._parseDate(selected.end)\n };\n this._refreshCurrentlyDisplayedCalendarDate(selected.start);\n this._inputFieldDate = this._formatDateRange(selected);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n this._isInvalidDateInput = !this.isModelValid();\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Method, which is responsible for transforming string to date, depending on type or\n * validation the results are different. It also changes the state of _isInvalidDateInput\n */\n dateStringUpdate(dateStr) {\n this._inputFieldDate = dateStr;\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.updateMultipleDates(dateStr);\n }\n else {\n this._updateMultipleDateRanges(dateStr);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this._updateSingleDate(dateStr);\n }\n else {\n this._updateRangeDate(dateStr);\n }\n }\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid() {\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isMultipleModelValid(this.selectedMultipleDates);\n }\n else {\n return this._isMultipleRangesModelValid(this.selectedMultipleDateRanges);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isSingleModelValid(this.selectedDate);\n }\n else {\n return this._isRangeModelValid(this.selectedRangeDate);\n }\n }\n }\n /** Returns current selected date. */\n getSelectedDate() {\n return (this.selectedDate || this.selectedMultipleDates || this.selectedRangeDate || this.selectedMultipleDateRanges);\n }\n /** @hidden */\n _changeMessageVisibility() {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n }\n else {\n this._popoverFormMessage.show();\n }\n }\n /** @hidden */\n _onOpenStateChanged(isOpen) {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n }\n /**\n * Renders the calendar right before the popover is opened.\n * Used for correct calculations of overlay position and size.\n */\n _beforePopoverOpen() {\n this._showPopoverContents = true;\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _onBlur(event) {\n this.onTouched();\n this.handleInputChange(event.target.value, false);\n }\n /** Method that returns info if single model given is valid */\n _isSingleModelValid(date) {\n return (this._isDateValid(date) && !this.disableFunction(date)) || (!date && this.allowNull);\n }\n /** Method that returns info if multiple date model given is valid */\n _isMultipleModelValid(dates) {\n return dates?.every((date) => this._isSingleModelValid(date));\n }\n /** Method that returns info if range date model given is valid */\n _isRangeModelValid(fdRangeDate) {\n return ((fdRangeDate && this._isStartDateValid(fdRangeDate.start) && this._isEndDateValid(fdRangeDate.end)) ||\n (!fdRangeDate.start && !fdRangeDate.end && this.allowNull));\n }\n /** Method that returns info if multiple range date model given is valid */\n _isMultipleRangesModelValid(ranges) {\n if (!ranges || ranges.length === 0) {\n return this.allowNull;\n }\n return ranges.every((range) => range.start && range.end && this._isRangeModelValid(range));\n }\n /** Method that returns info if end date model given is valid */\n _isEndDateValid(endDate) {\n return this._isDateValid(endDate) && !this.disableRangeEndFunction(endDate);\n }\n /** Method that returns info if start date model given is valid */\n _isStartDateValid(startDate) {\n return this._isDateValid(startDate) && !this.disableRangeStartFunction(startDate);\n }\n /** Method that returns info if given date model is valid */\n _isDateValid(date) {\n return this._dateTimeAdapter.isValid(date);\n }\n /** @hidden */\n _refreshCurrentlyDisplayedCalendarDate(date) {\n this._calendarPendingDate = date;\n this._calendarComponent?.setCurrentlyDisplayed(date);\n }\n /** @hidden */\n _formatDate(date) {\n if (this.customDateTimeFormat) {\n return this._dateTimeAdapter.format(date, this.customDateTimeFormat);\n }\n return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateInput);\n }\n /** @hidden */\n formatDateArray(dates) {\n return dates.map((date) => this._formatDate(date)).join(', ');\n }\n /** @hidden */\n _parseDate(date) {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n /**\n * Helper method to parse a date string into an array of dates.\n * @param dateStr The date string to parse.\n * @returns An array of dates.\n */\n parseDateString(dateStr) {\n return dateStr\n .split(',')\n .map((date) => this._parseDate(date.trim()))\n .filter((date) => date !== null);\n }\n /** @hidden */\n _formatDateRange(dateRange) {\n const startDate = this._formatDate(dateRange.start);\n const endDate = this._formatDate(dateRange.end);\n return startDate + this._rangeDelimiter + endDate;\n }\n /** @hidden */\n _formatMultipleDateRanges(dateRanges) {\n return dateRanges.map((dateRange) => this._formatDateRange(dateRange)).join(', ');\n }\n /** @hidden */\n _InitialiseVariablesInMessageService() {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.message = this._messagePopoverTemplate;\n }\n /** @hidden */\n _setOpenState(isOpen) {\n this._showPopoverContents = isOpen;\n this._changeDetectionRef.detectChanges();\n this.isOpen = isOpen;\n this.isOpenChange.emit(this.isOpen);\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATE_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATE_PICKER_MOBILE_CONFIG,\n useValue: { calendarTemplate: this._calendarTemplate, controlTemplate: this._controlTemplate }\n }\n ],\n parent: this._injector\n });\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent({}, (DatePickerMobileComponent), {\n container: 'body'\n }, {\n injector\n });\n }\n /** @hidden */\n _isDateRange(value) {\n return !!value && value.start && value.end;\n }\n /** @hidden */\n _isMultipleDateRanges(value) {\n return Array.isArray(value) && value.every((item) => this._isDateRange(item));\n }\n /**\n * @hidden\n * Updates the selected single date from a date string.\n * @param dateStr The date string to parse and update the selected date.\n */\n _updateSingleDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedDate = null;\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedDate);\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n return;\n }\n const date = this._parseDate(dateStr);\n if (!this._dateTimeAdapter.datesEqual(date, this.selectedDate)) {\n this._isInvalidDateInput = !this._isSingleModelValid(date);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(date);\n }\n this.selectedDate = date;\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n }\n }\n /**\n * @hidden\n * Updates the selected range date from a date string.\n * @param dateStr The date string to parse and update the selected range date.\n */\n _updateRangeDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedRangeDate = { start: null, end: null };\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n this.onChange(this.selectedRangeDate);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n return;\n }\n const [startDateStr, endDateStr] = dateStr.split(this._rangeDelimiter);\n const startDate = this._parseDate(startDateStr);\n const endDate = this._parseDate(endDateStr);\n if (!this._dateTimeAdapter.datesEqual(startDate, this.selectedRangeDate.start) ||\n !this._dateTimeAdapter.datesEqual(endDate, this.selectedRangeDate.end)) {\n let selectedRangeDate = null;\n if (this._dateTimeAdapter.isValid(startDate) &&\n this._dateTimeAdapter.isValid(endDate) &&\n this._dateTimeAdapter.compareDate(startDate, endDate) > 0) {\n selectedRangeDate = { start: endDate, end: startDate };\n }\n else {\n selectedRangeDate = { start: startDate, end: endDate };\n }\n this._isInvalidDateInput = !this._isRangeModelValid(selectedRangeDate);\n this.selectedRangeDate = selectedRangeDate;\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n if (this._isStartDateValid(this.selectedRangeDate.start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n }\n }\n }\n /**\n * @hidden\n * Updates the selected multiple dates from a date string.\n * @param dateStr The date string to parse and update the selected multiple dates.\n */\n updateMultipleDates(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDates = [];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n return;\n }\n const parsedDates = this.parseDateString(dateStr);\n // Check if the new parsed dates are different from the previously selected dates\n const datesChanged = !this._areDatesEqual(parsedDates, this.selectedMultipleDates);\n if (datesChanged) {\n this._isInvalidDateInput = !this._isMultipleModelValid(parsedDates);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(parsedDates[0]);\n }\n this.selectedMultipleDates = parsedDates;\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n }\n }\n /** Helper method to compare two arrays of dates */\n _areDatesEqual(dates1, dates2) {\n if (dates1.length !== dates2.length) {\n return false;\n }\n return dates1.every((date, index) => this._dateTimeAdapter.datesEqual(date, dates2[index]));\n }\n /**\n * @hidden\n * Updates the selected multiple date ranges from a date string.\n * @param dateStr The date string to parse and update the selected multiple date ranges.\n */\n _updateMultipleDateRanges(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDateRanges = [{ start: null, end: null }];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n return;\n }\n const rangeStrings = dateStr.split(',').map((range) => range.trim());\n const parsedRanges = rangeStrings.map((rangeStr) => {\n const [startStr, endStr] = rangeStr.split(this._rangeDelimiter).map((date) => date.trim());\n return {\n start: this._parseDate(startStr),\n end: this._parseDate(endStr)\n };\n });\n // Check if the new parsed ranges are different from the previously selected ranges\n const rangesChanged = !this._areDateRangesEqual(parsedRanges, this.selectedMultipleDateRanges);\n this._isInvalidDateInput = !this._isMultipleRangesModelValid(parsedRanges);\n if (!this._isInvalidDateInput && rangesChanged) {\n if (this._isStartDateValid(this.selectedMultipleDateRanges[0].start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedMultipleDateRanges[0].start);\n }\n this.selectedMultipleDateRanges = parsedRanges;\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n }\n }\n /** Helper method to compare two arrays of date ranges */\n _areDateRangesEqual(ranges1, ranges2) {\n if (ranges1.length !== ranges2.length) {\n return false;\n }\n return ranges1.every((range, index) => this._dateTimeAdapter.datesEqual(range.start, ranges2[index].start) &&\n this._dateTimeAdapter.datesEqual(range.end, ranges2[index].end));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerComponent, isStandalone: true, selector: \"fd-date-picker\", inputs: { type: \"type\", placeholder: \"placeholder\", inputId: \"inputId\", required: \"required\", customDateTimeFormat: \"customDateTimeFormat\", message: \"message\", messageTriggers: \"messageTriggers\", selectedDate: \"selectedDate\", selectedMultipleDates: \"selectedMultipleDates\", selectedRangeDate: \"selectedRangeDate\", selectedMultipleDateRanges: \"selectedMultipleDateRanges\", startingDayOfWeek: \"startingDayOfWeek\", rangeHoverEffect: \"rangeHoverEffect\", useValidation: \"useValidation\", allowNull: \"allowNull\", activeView: \"activeView\", placement: \"placement\", appendTo: \"appendTo\", disabled: \"disabled\", closeOnDateChoose: \"closeOnDateChoose\", showTodayButton: \"showTodayButton\", todayButtonLabel: \"todayButtonLabel\", previousButtonDisableFunction: \"previousButtonDisableFunction\", nextButtonDisableFunction: \"nextButtonDisableFunction\", state: \"state\", buttonFocusable: \"buttonFocusable\", specialDaysRules: \"specialDaysRules\", yearGrid: \"yearGrid\", aggregatedYearGrid: \"aggregatedYearGrid\", markWeekends: \"markWeekends\", showWeekNumbers: \"showWeekNumbers\", allowMultipleSelection: \"allowMultipleSelection\", isOpen: \"isOpen\", inline: \"inline\", ariaLabelledBy: \"ariaLabelledBy\", processInputOnBlur: [\"processInputOnBlur\", \"processInputOnBlur\", booleanAttribute], preventScrollOnFocus: \"preventScrollOnFocus\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", mobileLandscape: \"mobileLandscape\", mobilePortrait: \"mobilePortrait\", dateRangeFormat: \"dateRangeFormat\", disableFunction: \"disableFunction\", disableRangeStartFunction: \"disableRangeStartFunction\", disableRangeEndFunction: \"disableRangeEndFunction\" }, outputs: { isOpenChange: \"isOpenChange\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", activeViewChange: \"activeViewChange\" }, host: { listeners: { \"blur\": \"onTouched()\" }, properties: { \"class.fd-date-picker\": \"true\", \"class.fd-date-picker-custom\": \"inline\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], viewQueries: [{ propertyName: \"_inputGroupElement\", first: true, predicate: [\"inputGroupComponent\"], descendants: true, read: ElementRef }, { propertyName: \"_inputElement\", first: true, predicate: InputGroupInputDirective, descendants: true, read: ElementRef }, { propertyName: \"_controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"_calendarTemplate\", first: true, predicate: [\"calendarTemplate\"], descendants: true }, { propertyName: \"_messagePopoverTemplate\", first: true, predicate: [\"popoverMessageTemplate\"], descendants: true }, { propertyName: \"_calendars\", predicate: CalendarComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i3.PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: i3.PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: i3.PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: CalendarComponent, selector: \"fd-calendar\", inputs: [\"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"mobileLandscape\", \"mobilePortrait\", \"activeView\", \"startingDayOfWeek\", \"calType\", \"id\", \"specialDaysRules\", \"yearGrid\", \"aggregatedYearGrid\", \"rangeHoverEffect\", \"dateRangeFormat\", \"previousButtonDisableFunction\", \"nextButtonDisableFunction\", \"associatedLegendId\", \"escapeFocusFunction\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\"], outputs: [\"activeViewChange\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"isValidDateChange\", \"closeCalendar\", \"closeClicked\"] }, { kind: \"component\", type: BarComponent, selector: \"[fd-bar]\", inputs: [\"class\", \"barDesign\", \"inPage\", \"inHomePage\", \"clear\", \"size\", \"role\"] }, { kind: \"directive\", type: BarRightDirective, selector: \"[fd-bar-right]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker', host: {\n '(blur)': 'onTouched()',\n '[class.fd-date-picker]': 'true',\n '[class.fd-date-picker-custom]': 'inline'\n }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverModule,\n FormMessageComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n CalendarComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n FdTranslatePipe\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.PopoverFormMessageService }], propDecorators: { type: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], inputId: [{\n type: Input\n }], required: [{\n type: Input\n }], customDateTimeFormat: [{\n type: Input\n }], message: [{\n type: Input\n }], messageTriggers: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], useValidation: [{\n type: Input\n }], allowNull: [{\n type: Input\n }], activeView: [{\n type: Input\n }], placement: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], disabled: [{\n type: Input\n }], closeOnDateChoose: [{\n type: Input\n }], showTodayButton: [{\n type: Input\n }], todayButtonLabel: [{\n type: Input\n }], previousButtonDisableFunction: [{\n type: Input\n }], nextButtonDisableFunction: [{\n type: Input\n }], state: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], allowMultipleSelection: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], inline: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], processInputOnBlur: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], preventScrollOnFocus: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], mobilePortrait: [{\n type: Input\n }], dateRangeFormat: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], _inputGroupElement: [{\n type: ViewChild,\n args: ['inputGroupComponent', {\n read: ElementRef\n }]\n }], _inputElement: [{\n type: ViewChild,\n args: [InputGroupInputDirective, {\n read: ElementRef\n }]\n }], _controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], _calendarTemplate: [{\n type: ViewChild,\n args: ['calendarTemplate']\n }], _messagePopoverTemplate: [{\n type: ViewChild,\n args: ['popoverMessageTemplate']\n }], _calendars: [{\n type: ViewChildren,\n args: [CalendarComponent]\n }], disableFunction: [{\n type: Input\n }], disableRangeStartFunction: [{\n type: Input\n }], disableRangeEndFunction: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRWhILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUNILGlCQUFpQixFQUVqQixnQkFBZ0IsRUFFaEIsU0FBUyxFQUdULGtCQUFrQixFQUVyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVB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bW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLCBGb2N1c1RyYXBTZXJ2aWNlLCBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJhckNvbXBvbmVudCwgQmFyRWxlbWVudERpcmVjdGl2ZSwgQmFyUmlnaHREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBDYWxlbmRhclR5cGUsXG4gICAgQ2FsZW5kYXJUeXBlRW51bSxcbiAgICBDYWxlbmRhclllYXJHcmlkLFxuICAgIERhdGVSYW5nZSxcbiAgICBEYXlzT2ZXZWVrLFxuICAgIEZkQ2FsZW5kYXJWaWV3LFxuICAgIEZkQ2FsZW5kYXJWaWV3RW51bSxcbiAgICBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyLCBEYXRlVGltZUZvcm1hdHMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuaW1wb3J0IHtcbiAgICBGb3JtSXRlbUNvbnRyb2wsXG4gICAgRm9ybU1lc3NhZ2VDb21wb25lbnQsXG4gICAgUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZSxcbiAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQ29tcG9uZW50LCBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlLCBQb3BvdmVyU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFBsYWNlbWVudCwgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyLCBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5tb2RlbCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsIEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcgfSBmcm9tICcuL3Rva2Vucyc7XG5cbmxldCBkYXRlUGlja2VyQ291bnRlciA9IDA7XG5cbi8qKlxuICogVGhlIGRhdGV0aW1lIHBpY2tlciBjb21wb25lbnQgaXMgYW4gb3BpbmlvbmF0ZWQgY29tcG9zaXRpb24gb2YgdGhlIGZkLXBvcG92ZXIgYW5kXG4gKiBmZC1jYWxlbmRhciBjb21wb25lbnRzIHRvIGFjY29tcGxpc2ggdGhlIFVJIHBhdHRlcm4gZm9yIHBpY2tpbmcgYSBkYXRlLlxuICpcbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtZGF0ZS1waWNrZXIgWyhuZ01vZGVsKV09XCJkYXRlXCI+PC9mZC1kYXRlLXBpY2tlcj5cbiAqIGBgYFxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1kYXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhibHVyKSc6ICdvblRvdWNoZWQoKScsXG4gICAgICAgICdbY2xhc3MuZmQtZGF0ZS1waWNrZXJdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyLWN1c3RvbV0nOiAnaW5saW5lJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogRGF0ZVBpY2tlckNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZSxcbiAgICAgICAgUG9wb3ZlclNlcnZpY2UsXG4gICAgICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgRm9ybU1lc3NhZ2VDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudDxEPlxuICAgIGltcGxlbWVudHNcbiAgICAgICAgRGF0ZVBpY2tlcjxEPixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkRlc3Ryb3ksXG4gICAgICAgIE9uQ2hhbmdlcyxcbiAgICAgICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICAgICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICAgIFZhbGlkYXRvcixcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFRoZSB0eXBlIG9mIGNhbGVuZGFyLCAnc2luZ2xlJyBmb3Igc2luZ2xlIGRhdGUgc2VsZWN0aW9uIG9yICdyYW5nZScgZm9yIGEgcmFuZ2Ugb2YgZGF0ZXMuICovXG4gICAgQElucHV0KClcbiAgICB0eXBlOiBDYWxlbmRhclR5cGUgPSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZTtcblxuICAgIC8qKiBEYXRlIHBpY2tlciBpbnB1dCBwbGFjZWhvbGRlciBzdHJpbmcgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKiogSUQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlUGlja2VyIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZDogc3RyaW5nO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBEZWZpbmUgYSBjdXN0b20gZGF0ZXRpbWUgZm9ybWF0LiBDYW4gYmUgYSBzdHJpbmcgZm9yIERheWpzRGF0ZXRpbWVBZGFwdGVyIG9yIG9iamVjdCBmb3IgRmREYXRldGltZUFkYXB0ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbURhdGVUaW1lRm9ybWF0OiB1bmtub3duO1xuXG4gICAgLyoqIFRleHQgZGlzcGxheWVkIGluIG1lc3NhZ2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHRyaWdnZXIgZXZlbnRzIHRoYXQgd2lsbCBvcGVuL2Nsb3NlIHRoZSBtZXNzYWdlIGJveC5cbiAgICAgKiAgQWNjZXB0cyBhbnkgW0hUTUwgRE9NIEV2ZW50c10oaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9kb21fb2JqX2V2ZW50LmFzcCkuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWVzc2FnZVRyaWdnZXJzKHRyaWdnZXJzOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlVHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdHJpZ2dlcnM7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCBpbiBzaW5nbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIG11bHRpcGxlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZE11bHRpcGxlRGF0ZXM6IEFycmF5PEQ+ID0gW107XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIHdpdGggc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCB3aXRoIG11bHRpcGxlIHJhbmdlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+ID0gW107XG5cbiAgICAvKiogVGhlIGRheSBvZiB0aGUgd2VlayB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IG9uLiAxIHJlcHJlc2VudHMgU3VuZGF5LCAyIGlzIE1vbmRheSwgMyBpcyBUdWVzZGF5LCBhbmQgc28gb24uICovXG4gICAgQElucHV0KClcbiAgICBzdGFydGluZ0RheU9mV2VlazogRGF5c09mV2VlaztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIGRheSBjZWxscyBvbiBob3Zlci5cbiAgICAgKiBXb3JrcyBvbmx5IG9uIHJhbmdlIG1vZGUsIHdoZW4gc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZCBvbiBEYXkgVmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlSG92ZXJFZmZlY3QgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZVZhbGlkYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgYSBudWxsIGlucHV0IGlzIGNvbnNpZGVyZWQgdmFsaWQuICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd051bGwgPSB0cnVlO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRhdGUgcGlja2VyIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgZGF0ZSBjaG9vc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25EYXRlQ2hvb3NlID0gdHJ1ZTtcblxuICAgIC8qKiBFbmFibGVzIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gaWYgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RvZGF5QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogTGFiZWwgZm9yIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvZGF5QnV0dG9uTGFiZWwgPSAnVG9kYXknO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIHByZXZpb3VzIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgbmV4dCBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvLCB0aGlzIGlzIGFwcGxpZWQgdG8gbWVzc2FnZS5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXRlKHN0YXRlOiBOdWxsYWJsZTxGb3JtU3RhdGVzPikge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlIHx8ICdkZWZhdWx0JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09IG51bGwgJiYgdGhpcy51c2VWYWxpZGF0aW9uICYmIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFBvcG92ZXIgaXMgdG9nZ2xlZCB3aXRoIGY0IGtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgbXVsdGlwbGUgZGF5cyBvciBtdWx0aXBsZSByYW5nZSBkYXRlcy5cbiAgICAgKiBJZiBgZGlzcGxheVdlZWtOdW1iZXJzYCBpcyB0cnVlLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIHdlZWsgbnVtYmVyIHRvIG1hcmsgdGhlIHJlbGF0ZWQgcm93LlxuICAgICAqIFRoZSB1c2VyIGNhbiBjbGljayBvbiB3ZWVrIGRheXMgdG8gbWFyayB0aGUgcmVsYXRlZCBjb2x1bW4uXG4gICAgICogTm90ZTogQ2xpY2thYmxlIHNlbGVjdGlvbiBmb3Igd2VlayByb3cgb3IgY29sdW1uIGRvZXMgbm90IHdvcmsgZm9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgb3Blbi4gQ2FuIGJlIHVzZWQgdGhyb3VnaCB0d28td2F5IGJpbmRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaXNPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5faXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNPcGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICAgIH1cblxuICAgIC8qKiBTaG91bGQgZGF0ZSBwaWNrZXIgYmUgaW5saW5lZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlubGluZSA9IHRydWU7XG5cbiAgICAvKiogYXJpYS1sYWJlbGxlZGJ5IGZvciBlbGVtZW50IGRlc2NyaWJpbmcgZGF0ZS1waWNrZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldmVudCBwYWdlIHNjcm9sbGluZyB3aGVuIGZvY3VzaW5nIGRhdGUgcGlja2VyIGlucHV0IGZpZWxkIGFmdGVyIGNhbGVuZGFyIGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBkYXRlIHBpY2tlciBzaG91bGQgcmVuZGVyZWQgaW4gbW9iaWxlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBNb2JpbGUgbW9kZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIGxhbmRzY2FwZSBtb2RlLCBpdCBhbHNvIGFkZHMgY2xvc2UgYnV0dG9uIG9uIHJpZ2h0IHNpZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIHBvcnRyYWl0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZVBvcnRyYWl0ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBzZWxlY3QgYW5kIGRpc3BsYXkgdGhlIGRhdGUgcmFuZ2UgaW4gTU0vWVlZWSBvciBZWVlZIGZvcm1hdFxuICAgICAqIEZvciBtb250aCBhbmQgeWVhciBmb3JtYXQgdmFsdWUgaXMgJ21vbnRoJ1xuICAgICAqIEZvciB5ZWFyIGZvcm1hdCB2YWx1ZSBpcyAneWVhcidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGVSYW5nZUZvcm1hdCA9ICcnO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBkYXRlIGluIHNpbmdsZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPE51bGxhYmxlPEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkYXRlcyBpbiBtdWx0aXBsZSBtb2RlIGFyZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIHJhbmdlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHRoZSBmaXJzdCBvciBsYXN0IGRhdGUgaW4gbXVsdGlwbGUgcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8RGF0ZVJhbmdlPEQ+Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgICAgICBBcnJheTxEYXRlUmFuZ2U8RD4+XG4gICAgPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250cm9sVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY2FsZW5kYXJUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2FsZW5kYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncG9wb3Zlck1lc3NhZ2VUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVBvcG92ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZWVuICovXG4gICAgQFZpZXdDaGlsZHJlbihDYWxlbmRhckNvbXBvbmVudClcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jYWxlbmRhcnM6IFF1ZXJ5TGlzdDxDYWxlbmRhckNvbXBvbmVudDxEPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgKi9cbiAgICBfaW5wdXRGaWVsZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gV2hldGhlciB0aGUgZGF0ZSBpbnB1dCBpcyBpbnZhbGlkICovXG4gICAgX2lzSW52YWxpZERhdGVJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZm9ybVZhbHVlU3RhdGVNZXNzYWdlSWQgPSBgZmQtZGF0ZS1waWNrZXItZm9ybS1tZXNzYWdlLSR7ZGF0ZVBpY2tlckNvdW50ZXIrK31gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJQZW5kaW5nRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNUcmFwU2VydmljZSA9IGluamVjdChGb2N1c1RyYXBTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vYmlsZUNvbXBvbmVudFJlZjogTnVsbGFibGU8Q29tcG9uZW50UmVmPERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9yYW5nZURlbGltaXRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLnJhbmdlRGVsaW1pdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERhdGUgaW5wdXQgYXJpYSBsYWJlbCBrZXkgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWxLZXkoKTogRmRMYW5ndWFnZUtleUlkZW50aWZpZXIge1xuICAgICAgICAvLyByZXR1cm4gZWl0aGVyIGlucHV0IHZhbHVlIG9yIGEga2V5IGZvciBcImZkVHJhbnNsYXRlXCIgcGlwZVxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlXG4gICAgICAgICAgICA/ICdjb3JlRGF0ZVBpY2tlci5kYXRlUmFuZ2VJbnB1dExhYmVsJ1xuICAgICAgICAgICAgOiAnY29yZURhdGVQaWNrZXIuZGF0ZUlucHV0TGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKVxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfcG9wb3ZlckZvcm1NZXNzYWdlOiBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGZvciB0aGUgcmFuZ2Ugc3RhcnQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpYWxvZ0Rpc21pc3MocHJldlZhbHVlOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc011bHRpcGxlRGF0ZVJhbmdlcyhwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgQXJyYXk8RD47XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVzQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RhdGVSYW5nZShwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgRDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZURhdGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaW5pdGlhbCB2aWV3IHNob3VsZCBiZSBtb250aCBvciB5ZWFyIGlmIGRhdGVSYW5nZUZvcm1hdCBpcyBwcm92aWRlZFxuICAgICAgICBpZiAodGhpcy5kYXRlUmFuZ2VGb3JtYXQgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IEZkQ2FsZW5kYXJWaWV3RW51bS5Nb250aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVSYW5nZUZvcm1hdCA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnaXNPcGVuJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5fY2FsZW5kYXJzLmZpcnN0O1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQgPSBjYWxlbmRhcjtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy51bnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXI/LmluaXRpYWxGb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZSBjYWxlbmRhciBhY3RpdmUgdmlldyBjaGFuZ2UgYW5kIHRocm93cyBldmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbG9zZUZyb21DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUgJiYgdGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiAhdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIGNhbGVuZGFyICovXG4gICAgb3BlbkNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE9wZW5TdGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgY2FsZW5kYXIgb3BlbiBvciBjbG9zZWQgKi9cbiAgICB0b2dnbGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRPcGVuU3RhdGUoIXRoaXMuaXNPcGVuKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBDbG9zZXMgdGhlIGNhbGVuZGFyIGlmIGl0IGlzIG9wZW4gKi9cbiAgICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0T3BlblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBzaW5nbGUgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlKTtcbiAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUoZGF0ZSk7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiB0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShkYXRlczogQXJyYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlcyB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoW10pO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KGRhdGVzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlcyk7XG4gICAgICAgIC8qKiBBc3N1bWluZyB0aGUgZmlyc3QgZGF0ZSBpbiB0aGUgYXJyYXkgaXMgdXNlZCBmb3IgcmVmcmVzaCAqL1xuICAgICAgICBpZiAodGhpcy5zaG93VG9kYXlCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5mb3JtYXREYXRlQXJyYXkoZGF0ZXMpO1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBoYW5kbGVSYW5nZURhdGVDaGFuZ2UoZGF0ZXM6IERhdGVSYW5nZTxEPik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENoYW5nZWQgPSAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZXMuc3RhcnQsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRDaGFuZ2VkID0gIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzLmVuZCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpO1xuICAgICAgICBpZiAoZGF0ZXMgJiYgKHN0YXJ0Q2hhbmdlZCB8fCBlbmRDaGFuZ2VkKSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xvc2UgPSB0aGlzLmNsb3NlT25EYXRlQ2hvb3NlICYmIGRhdGVzLmVuZCAhPT0gbnVsbDtcbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGVzLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IGRhdGVzLmVuZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlcy5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSByYW5nZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKGRhdGVzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGRhdGUgcmFuZ2VzXG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggIT09IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlc1tpXS5zdGFydCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5zdGFydCkgfHxcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzW2ldLmVuZCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5lbmQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgZGF0ZSByYW5nZSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZSBhbmQgZW1pdCBjaGFuZ2VzXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZXM7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZm9ybWF0dGVkIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlcyk7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuXG4gICAgICAgICAgICAvLyBQZXJmb3JtIGFueSBhZGRpdGlvbmFsIGFjdGlvbnMgc3VjaCBhcyB1cGRhdGluZyB0aGUgbW9kZWwgb3IgcmVmcmVzaGluZyB0aGUgY2FsZW5kYXJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICAvLyBpZiB5b3Ugd2FudCB0byByZWZyZXNoIHRoZSBjYWxlbmRhciB2aWV3LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGVzWzBdLnN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgZm9ybWF0SW5wdXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiBjbGlja2VkLCBpdCBjaGFuZ2VzIHNlbGVjdGVkIGRhdGUgb3IgZGF0ZSByYW5nZSB0byB0b2RheSdzIGRhdGVcbiAgICAgKi9cbiAgICBvblRvZGF5QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5RGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShbdG9kYXlEYXRlXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUZyb21DYWxlbmRhcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZShbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0b2RheURhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZSh0b2RheURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VGcm9tQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdG9kYXlEYXRlLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0IGlucHV0IGlzIGNvbmZpcm1lZCB0byBiYSBjaGFuZ2VkLCBieSBjbGlja2luZyBlbnRlciwgb3IgYmx1clxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0Q2hhbmdlKHN0ckRhdGU6IHN0cmluZywgaXNUeXBlRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKChpc1R5cGVFdmVudCAmJiB0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikgfHwgKCFpc1R5cGVFdmVudCAmJiAhdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpKSB7XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IHRydWUsIGlnbm9yZSB0eXBlIGV2ZW50XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IGZhbHNlLCBpZ25vcmUgYmx1ci9lbnRlciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVN0cmluZ1VwZGF0ZShzdHJEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhbGlkKClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShcbiAgICAgICAgZm46IChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgICAgICB2b2lkO1xuICAgICAgICB9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciB0aGF0IGFsbG93cyB0byB1c2UgWyhuZ01vZGVsKV0gb3IgZm9ybXNcbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHNlbGVjdGVkOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvKiogSWYgd3JpdHRlbiB2YWx1ZSBpcyBub3QgZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nICovXG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZW5kOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gPEFycmF5PEQ+PnNlbGVjdGVkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZUFycmF5KHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBBcnJheTxEYXRlUmFuZ2U8RD4+O1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmFuZ2VzID0gc2VsZWN0ZWQuZmlsdGVyKChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgIT09IG51bGwgJiYgcmFuZ2UuZW5kICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBmaWx0ZXJlZFJhbmdlcy5tYXAoKHJhbmdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUocmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKHJhbmdlLmVuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZmlsdGVyZWRSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXRNdWx0aXBsZURhdGVSYW5nZXMoZmlsdGVyZWRSYW5nZXMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKSBhcyBEO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkPy5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5zdGFydCksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5lbmQpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoc2VsZWN0ZWQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmb3JtaW5nIHN0cmluZyB0byBkYXRlLCBkZXBlbmRpbmcgb24gdHlwZSBvclxuICAgICAqIHZhbGlkYXRpb24gdGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiBfaXNJbnZhbGlkRGF0ZUlucHV0XG4gICAgICovXG4gICAgZGF0ZVN0cmluZ1VwZGF0ZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBkYXRlU3RyO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTXVsdGlwbGVEYXRlUmFuZ2VzKGRhdGVTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVSYW5nZURhdGUoZGF0ZVN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgbW9kZWwgc2VsZWN0ZWQgZGF0ZS9kYXRlcyBoYXZlIHByb3Blcmx5IHR5cGVzIGFuZCBhcmUgdmFsaWQgKi9cbiAgICBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIGdldFNlbGVjdGVkRGF0ZSgpOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlIHx8IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzIHx8IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2Uuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuU3RhdGVDaGFuZ2VkKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIC8vIGZvY3VzIGlucHV0IGNvbnRyb2wgZXZlcnkgdGltZSBwb3B1cCBpcyBjbG9zZWRcbiAgICAgICAgaWYgKCFpc09wZW4gJiYgdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdGhpcy5wcmV2ZW50U2Nyb2xsT25Gb2N1c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXJzIHRoZSBjYWxlbmRhciByaWdodCBiZWZvcmUgdGhlIHBvcG92ZXIgaXMgb3BlbmVkLlxuICAgICAqIFVzZWQgZm9yIGNvcnJlY3QgY2FsY3VsYXRpb25zIG9mIG92ZXJsYXkgcG9zaXRpb24gYW5kIHNpemUuXG4gICAgICovXG4gICAgX2JlZm9yZVBvcG92ZXJPcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIGFueSkudmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIG11bHRpcGxlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc011bHRpcGxlTW9kZWxWYWxpZChkYXRlczogQXJyYXk8TnVsbGFibGU8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkYXRlcz8uZXZlcnkoKGRhdGUpID0+IHRoaXMuX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNSYW5nZU1vZGVsVmFsaWQoZmRSYW5nZURhdGU6IERhdGVSYW5nZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZkUmFuZ2VEYXRlICYmIHRoaXMuX2lzU3RhcnREYXRlVmFsaWQoZmRSYW5nZURhdGUuc3RhcnQpICYmIHRoaXMuX2lzRW5kRGF0ZVZhbGlkKGZkUmFuZ2VEYXRlLmVuZCkpIHx8XG4gICAgICAgICAgICAoIWZkUmFuZ2VEYXRlLnN0YXJ0ICYmICFmZFJhbmdlRGF0ZS5lbmQgJiYgdGhpcy5hbGxvd051bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBtdWx0aXBsZSByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNNdWx0aXBsZVJhbmdlc01vZGVsVmFsaWQocmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmFuZ2VzIHx8IHJhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzLmV2ZXJ5KChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kICYmIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHJhbmdlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBlbmQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRW5kRGF0ZVZhbGlkKGVuZERhdGU6IE51bGxhYmxlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RhdGVWYWxpZChlbmREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbihlbmREYXRlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHN0YXJ0IGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1N0YXJ0RGF0ZVZhbGlkKHN0YXJ0RGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKHN0YXJ0RGF0ZSkgJiYgIXRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbihzdGFydERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgZ2l2ZW4gZGF0ZSBtb2RlbCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRGF0ZVZhbGlkKGRhdGU6IE51bGxhYmxlPEQ+KTogZGF0ZSBpcyBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclBlbmRpbmdEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQ/LnNldEN1cnJlbnRseURpc3BsYXllZChkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUFycmF5KGRhdGVzOiBBcnJheTxEPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkYXRlcy5tYXAoKGRhdGUpID0+IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZSkpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZURhdGUoZGF0ZTogdW5rbm93bik6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHBhcnNlIGEgZGF0ZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBkYXRlcy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cjogc3RyaW5nKTogRFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGVTdHJcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChkYXRlKSA9PiB0aGlzLl9wYXJzZURhdGUoZGF0ZS50cmltKCkpKVxuICAgICAgICAgICAgLmZpbHRlcigoZGF0ZSkgPT4gZGF0ZSAhPT0gbnVsbCkgYXMgRFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RGF0ZVJhbmdlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZSArIHRoaXMuX3JhbmdlRGVsaW1pdGVyICsgZW5kRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlUmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGRhdGVSYW5nZXMubWFwKChkYXRlUmFuZ2UpID0+IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlUmFuZ2UpKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5pbml0KHRoaXMuX2lucHV0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VQb3BvdmVyVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRPcGVuU3RhdGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSBpc09wZW47XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogeyBjYWxlbmRhclRlbXBsYXRlOiB0aGlzLl9jYWxlbmRhclRlbXBsYXRlLCBjb250cm9sVGVtcGxhdGU6IHRoaXMuX2NvbnRyb2xUZW1wbGF0ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlQ29tcG9uZW50UmVmID0gdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY0NvbXBvbmVudChcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlUmFuZ2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLnN0YXJ0ICYmIHZhbHVlLmVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzTXVsdGlwbGVEYXRlUmFuZ2VzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0aGlzLl9pc0RhdGVSYW5nZShpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGZyb20gYSBkYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fcGFyc2VEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKGRhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIHJhbmdlIGRhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlUmFuZ2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3N0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0cl0gPSBkYXRlU3RyLnNwbGl0KHRoaXMuX3JhbmdlRGVsaW1pdGVyKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fcGFyc2VEYXRlKHN0YXJ0RGF0ZVN0cik7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLl9wYXJzZURhdGUoZW5kRGF0ZVN0cik7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHN0YXJ0RGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgfHxcbiAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChlbmREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGVuZERhdGUpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGVuZERhdGUsIGVuZDogc3RhcnREYXRlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogc3RhcnREYXRlLCBlbmQ6IGVuZERhdGUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0YXJ0RGF0ZVZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWREYXRlcyA9IHRoaXMucGFyc2VEYXRlU3RyaW5nKGRhdGVTdHIpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIGRhdGVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBkYXRlc1xuICAgICAgICBjb25zdCBkYXRlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZXNFcXVhbChwYXJzZWREYXRlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuXG4gICAgICAgIGlmIChkYXRlc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc011bHRpcGxlTW9kZWxWYWxpZChwYXJzZWREYXRlcyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShwYXJzZWREYXRlc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gcGFyc2VkRGF0ZXM7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gY29tcGFyZSB0d28gYXJyYXlzIG9mIGRhdGVzICovXG4gICAgcHJpdmF0ZSBfYXJlRGF0ZXNFcXVhbChkYXRlczE6IERbXSwgZGF0ZXMyOiBEW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRhdGVzMS5sZW5ndGggIT09IGRhdGVzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZXMxLmV2ZXJ5KChkYXRlLCBpbmRleCkgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgZGF0ZXMyW2luZGV4XSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlIHJhbmdlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGUgcmFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZU11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gW3sgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9XTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFuZ2VTdHJpbmdzID0gZGF0ZVN0ci5zcGxpdCgnLCcpLm1hcCgocmFuZ2UpID0+IHJhbmdlLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJhbmdlcyA9IHJhbmdlU3RyaW5ncy5tYXAoKHJhbmdlU3RyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnRTdHIsIGVuZFN0cl0gPSByYW5nZVN0ci5zcGxpdCh0aGlzLl9yYW5nZURlbGltaXRlcikubWFwKChkYXRlKSA9PiBkYXRlLnRyaW0oKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUoc3RhcnRTdHIpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKGVuZFN0cilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIHJhbmdlcyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcmFuZ2VzXG4gICAgICAgIGNvbnN0IHJhbmdlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZVJhbmdlc0VxdWFsKHBhcnNlZFJhbmdlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG5cbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHBhcnNlZFJhbmdlcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgJiYgcmFuZ2VzQ2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzU3RhcnREYXRlVmFsaWQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1swXS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyA9IHBhcnNlZFJhbmdlcztcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGVscGVyIG1ldGhvZCB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZGF0ZSByYW5nZXMgKi9cbiAgICBwcml2YXRlIF9hcmVEYXRlUmFuZ2VzRXF1YWwocmFuZ2VzMTogRGF0ZVJhbmdlPEQ+W10sIHJhbmdlczI6IERhdGVSYW5nZTxEPltdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyYW5nZXMxLmxlbmd0aCAhPT0gcmFuZ2VzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzMS5ldmVyeShcbiAgICAgICAgICAgIChyYW5nZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwocmFuZ2Uuc3RhcnQsIHJhbmdlczJbaW5kZXhdLnN0YXJ0KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHJhbmdlLmVuZCwgcmFuZ2VzMltpbmRleF0uZW5kKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBjb250cm9sVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwb3BvdmVyTWVzc2FnZVRlbXBsYXRlPlxuICAgIEBpZiAoX21lc3NhZ2UpIHtcbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbZW1iZWRkZWRdPVwidHJ1ZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChiZWZvcmVPcGVuKT1cIl9iZWZvcmVQb3BvdmVyT3BlbigpXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJfb25PcGVuU3RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCI+XG4gICAgICAgICAgICBAaWYgKF9zaG93UG9wb3ZlckNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBvcG92ZXJNZXNzYWdlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsZW5kYXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBnbHlwaD1cImFwcG9pbnRtZW50LTJcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ2NvcmVEYXRlUGlja2VyLmRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCInY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0XCJcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImdyaWRcIlxuICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9kYXRlSW5wdXRBcmlhbExhYmVsS2V5IHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJfaW5wdXRGaWVsZERhdGVcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5mNCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfb25CbHVyKCRldmVudClcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhclRlbXBsYXRlPlxuICAgIDxmZC1jYWxlbmRhclxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICBbYWxsb3dNdWx0aXBsZVNlbGVjdGlvbl09XCJhbGxvd011bHRpcGxlU2VsZWN0aW9uXCJcbiAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICBbY2FsVHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvblwiXG4gICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgW3NlbGVjdGVkTXVsdGlwbGVEYXRlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZXNcIlxuICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICBbc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNdPVwic2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNcIlxuICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwic3RhcnRpbmdEYXlPZldlZWtcIlxuICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwicHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW21vYmlsZUxhbmRzY2FwZV09XCJtb2JpbGUgJiYgbW9iaWxlTGFuZHNjYXBlXCJcbiAgICAgICAgW21vYmlsZVBvcnRyYWl0XT1cIm1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdFwiXG4gICAgICAgIFtkYXRlUmFuZ2VGb3JtYXRdPVwiZGF0ZVJhbmdlRm9ybWF0XCJcbiAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJoYW5kbGVTaW5nbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlKT1cImhhbmRsZU11bHRpcGxlRGF0ZXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZSk9XCJoYW5kbGVSYW5nZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZSk9XCJoYW5kbGVNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNsb3NlQ2FsZW5kYXIpPVwiY2xvc2VGcm9tQ2FsZW5kYXIoKVwiXG4gICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgQGlmIChzaG93VG9kYXlCdXR0b24pIHtcbiAgICAgICAgPGRpdiBmZC1iYXIgYmFyRGVzaWduPVwiZm9vdGVyXCIgY2xhc3M9XCJmZC1kYXRlLXBpY2tlcl9fYmFyXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2RheUJ1dHRvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPGRpdiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPlxuICAgICAgICBAc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgQGNhc2UgKCdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgIHt7ICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnaW5mb3JtYXRpb24nKSB7XG4gICAgICAgICAgICAgICAge3sgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnd2FybmluZycpIHtcbiAgICAgICAgICAgICAgICB7eyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZVdhcm5pbmdNZXNzYWdlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIHt7ICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlRXJyb3JNZXNzYWdlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAge3sgX21lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { DatePickerComponent } from './date-picker.component';\nimport * as i0 from \"@angular/core\";\nexport class DatePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent], exports: [DatePickerComponent, DatePickerMobileComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [DatePickerComponent, DatePickerMobileComponent],\n exports: [DatePickerComponent, DatePickerMobileComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU05RCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5QixhQUM5QyxtQkFBbUIsRUFBRSx5QkFBeUI7K0dBRS9DLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5Qjs7MkZBRy9DLGdCQUFnQjtrQkFKNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDekQsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLENBQUM7aUJBQzVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbW9iaWxlL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudCwgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0RhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZS1waWNrZXIvZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACO,MAAM,wBAAwB,GAAG,IAAI,cAAc,CAAC,uBAAuB,CAAC;AAC5E,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAAC,0BAA0B,CAAC;;ACQnF,MAAM,yBAAyB,SAAS,cAAc,CAAC;AAC9D;AACA,IAAI,WAAW,CAAC,gBAAgB,EAAE,mBAAmB,EAAE;AACvD,QAAQ,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,WAAW,CAAC;AACjE,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK;AAC3D,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACtC,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACvC,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3D,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;AAC/D,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;AACvD,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACvE,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,sBAAsB,EAAE,KAAK;AACzC,YAAY,eAAe,EAAE,IAAI;AACjC,YAAY,GAAG,IAAI,CAAC,YAAY;AAChC,YAAY,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;AACxC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AAChE,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACvG,YAAY,KAAK,EAAE,CAAC,IAAI,KAAK;AAC7B,gBAAgB,IAAI,IAAI,KAAK,QAAQ,EAAE;AACvC,oBAAoB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACvE,oBAAoB,MAAM,CAAC,WAAW,EAAE;AACxC,gBAAgB;AAChB,YAAY;AACZ,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvQ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,usCAAusC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACpuF;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACnI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AACzJ,wBAAwB,cAAc;AACtC,wBAAwB,gBAAgB;AACxC,wBAAwB,qBAAqB;AAC7C,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,0BAA0B;AAClD,wBAAwB,qBAAqB;AAC7C,wBAAwB,kBAAkB;AAC1C,wBAAwB;AACxB,qBAAqB,EAAE,QAAQ,EAAE,usCAAusC,EAAE;AAC1uC,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,4BAA4B;AACvD,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACtD,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,wBAAwB;AACnD,iBAAiB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;AAC1D,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,EAAE,CAAC;;AClFnB;AACO,SAAS,oCAAoC,CAAC,QAAQ,EAAE;AAC/D,IAAI,OAAO,KAAK,CAAC,CAAC,oCAAoC,EAAE,QAAQ,CAAC,uCAAuC,CAAC;AACzG,QAAQ,CAAC,iEAAiE,CAAC;AAC3E,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACjC;;ACkBA,IAAI,iBAAiB,GAAG,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;AAC/B,IAAI;AACJ;AACA;AACA,IAAI,IAAI,eAAe,CAAC,QAAQ,EAAE;AAClC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AACxC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,QAAQ;AACpD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AACrB,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,SAAS;AACxC,IAAI;AACJ;AACA,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACnF,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AACpC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACzC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ;AACA,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc;AACnD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,uBAAuB,GAAG;AAClC;AACA,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC9C,cAAc;AACd,cAAc,+BAA+B;AAC7C,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,mBAAmB;AACnC;AACA,IAAI,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE;AAC7D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AACtD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AACtD;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM;AAC3C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;AAC7B;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B;AACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3D;AACA,QAAQ,IAAI,CAAC,0BAA0B,GAAG,EAAE;AAC5C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK;AACrC;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG;AAChD;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,cAAc;AACvC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI;AACrC;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,OAAO;AACvC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAClC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;AACxB,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,EAAE;AAClB,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG;AAClC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,EAAE;AAClB,SAAS;AACT;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAC3C;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACvC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACzC;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;AAC3B;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,EAAE;AACjC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AAC9C;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,EAAE;AACpD;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,YAAY,EAAE;AAC7D;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE;AACzD;AACA,QAAQ,IAAI,CAAC,gCAAgC,GAAG,IAAI,YAAY,EAAE;AAClE;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,EAAE;AAClD;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;AACvD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACxC;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACzC;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC5F;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAE;AAChD;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,SAAS;AAC/B;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACzC;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACvE;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,EAAE;AAC1D,YAAY,QAAQ,EAAE;AACtB,SAAS,CAAC;AACV;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,KAAK;AAC1C;AACA;AACA;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,KAAK;AACpD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,MAAM,KAAK;AAClD;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAY,MAAM,oCAAoC,CAAC,iBAAiB,CAAC;AACzE,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAY,MAAM,oCAAoC,CAAC,mBAAmB,CAAC;AAC3E,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,aAAa,GAAG,EAAE;AACtB;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;AACvD,gBAAgB,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC;AAC9D,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,KAAK,GAAG,SAAS;AACvC,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACrD,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;AAC9C,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;AACrD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,KAAK,GAAG,SAAS;AACvC,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAClD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE;AAC9C,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK;AACtD,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM,EAAE;AAClD,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI;AACrD,QAAQ;AACR,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACpD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,QAAQ,IAAI,OAAO,EAAE;AACjC,YAAY,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACpD,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,oCAAoC,EAAE;AACnD,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AAC5G,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AAClD,YAAY,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAC9C,YAAY,UAAU,CAAC,MAAM;AAC7B,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7C,oBAAoB,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,EAAE;AACnE,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,EAAE;AACrE,gBAAgB;AAChB,gBAAgB,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC1E,gBAAgB,QAAQ,EAAE,YAAY,EAAE;AACxC,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACzC,QAAQ,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE;AAC3C,IAAI;AACJ;AACA;AACA;AACA,IAAI,8BAA8B,CAAC,UAAU,EAAE;AAC/C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC7G,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,IAAI;AACJ;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAQ;AACR,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACjC,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,IAAI,EAAE;AACjC,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;AACzD,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAClC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AACvD,QAAQ,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC7E,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,YAAY,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC3C,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7B,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;AAC7D,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI;AACvC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAC1C,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5B;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI,CAAC,sCAAsC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACzG,QAAQ,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACnG,QAAQ,IAAI,KAAK,KAAK,YAAY,IAAI,UAAU,CAAC,EAAE;AACnD,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;AAC5E,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;AACpC,gBAAgB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACnE,gBAAgB,IAAI,CAAC,iBAAiB,GAAG;AACzC,oBAAoB,KAAK,EAAE,KAAK,CAAC,KAAK;AACtC,oBAAoB,GAAG,EAAE,KAAK,CAAC;AAC/B,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACzE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrD,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,KAAK,CAAC,KAAK,CAAC;AACxE,gBAAgB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY;AACZ,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,IAAI,CAAC,aAAa,EAAE;AACpC,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,8BAA8B,CAAC,KAAK,EAAE;AAC1C,QAAQ,IAAI,UAAU,GAAG,KAAK;AAC9B;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE;AACrE,YAAY,UAAU,GAAG,IAAI;AAC7B,QAAQ;AACR,aAAa;AACb,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/G,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC7G,oBAAoB,UAAU,GAAG,IAAI;AACrC,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACnD;AACA,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACxE;AACA,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACvF;AACA,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAC1D;AACA;AACA,YAAY,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;AACtD,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACvD,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3D,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;AACxC,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAC3D,gBAAgB,IAAI,CAAC,8BAA8B,CAAC;AACpD,oBAAoB;AACpB,wBAAwB,KAAK,EAAE,SAAS;AACxC,wBAAwB,GAAG,EAAE;AAC7B;AACA,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;AACtD,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;AACxC,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAC3D,gBAAgB,IAAI,CAAC,qBAAqB,CAAC;AAC3C,oBAAoB,KAAK,EAAE,SAAS;AACpC,oBAAoB,GAAG,EAAE;AACzB,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE;AAC5C,QAAQ,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;AACpG;AACA;AACA,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,YAAY;AAChC,cAAc;AACd,cAAc;AACd,gBAAgB,cAAc,EAAE;AAChC,oBAAoB,KAAK,EAAE;AAC3B;AACA,aAAa;AACb,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B,IAAI;AACJ;AACA,IAAI,iBAAiB,CAAC,EAAE,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU;AAClC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,IAAI,CAAC,eAAe,GAAG,EAAE;AACrC,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AACtF,YAAY,IAAI,CAAC,iBAAiB,GAAG;AACrC,gBAAgB,KAAK,EAAE,IAAI;AAC3B,gBAAgB,GAAG,EAAE;AACrB,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC,YAAY,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC3C,YAAY,IAAI,CAAC,0BAA0B,GAAG,EAAE;AAChD,YAAY,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,sBAAsB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACpE,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,GAAG,QAAQ;AACnC,gBAAgB,IAAI,CAAC,qBAAqB,GAAG,QAAQ;AACrD,gBAAgB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACrE,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxE,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;AACtD;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,GAAG,QAAQ;AACnC,gBAAgB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,oBAAoB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC;AACjH,oBAAoB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,wBAAwB,IAAI,CAAC,0BAA0B,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AACzF,4BAA4B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/D,4BAA4B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG;AAC1D,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,IAAI,CAAC,sCAAsC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5F,wBAAwB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC;AAC7F,oBAAoB;AACpB,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,eAAe,GAAG,EAAE;AACjD,oBAAoB;AACpB,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,GAAG,EAAE;AAC7C,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACpD,gBAAgB,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5C,gBAAgB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACjE,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,QAAQ,CAAC;AACrE,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;AACtD;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,GAAG,QAAQ;AACnC,gBAAgB,IAAI,QAAQ,EAAE,KAAK,EAAE;AACrC,oBAAoB,IAAI,CAAC,iBAAiB,GAAG;AAC7C,wBAAwB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC9D,wBAAwB,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;AACzD,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,sCAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/E,oBAAoB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC1E,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,GAAG,EAAE;AAC7C,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AACvD,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9B,QAAQ,IAAI,CAAC,eAAe,GAAG,OAAO;AACtC,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AACjD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;AACvD,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC/C,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC7E,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACxF,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACvD,gBAAgB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;AAClE,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACtE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,QAAQ,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,0BAA0B;AAC5H,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC3C,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC3C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,MAAM,EAAE;AAChC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AAC3C,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,gBAAgB,aAAa,EAAE,IAAI,CAAC;AACpC,aAAa,CAAC;AACd,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,IAAI;AACJ;AACA,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;AACzD,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE;AAC9B,QAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;AACpG,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,OAAO,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACrE,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,WAAW,EAAE;AACpC,QAAQ,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC;AAClH,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;AACtE,IAAI;AACJ;AACA,IAAI,2BAA2B,CAAC,MAAM,EAAE;AACxC,QAAQ,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAY,OAAO,IAAI,CAAC,SAAS;AACjC,QAAQ;AACR,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAClG,IAAI;AACJ;AACA,IAAI,eAAe,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AACnF,IAAI;AACJ;AACA,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC;AACzF,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,IAAI;AACJ;AACA,IAAI,sCAAsC,CAAC,IAAI,EAAE;AACjD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC,QAAQ,IAAI,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,IAAI,CAAC;AAC5D,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC;AAChF,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;AAC1F,IAAI;AACJ;AACA,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACrE,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;AACvF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO;AACf,aAAa,KAAK,CAAC,GAAG;AACtB,aAAa,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACvD,aAAa,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAC5C,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAChC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3D,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;AACvD,QAAQ,OAAO,SAAS,GAAG,IAAI,CAAC,eAAe,GAAG,OAAO;AACzD,IAAI;AACJ;AACA,IAAI,yBAAyB,CAAC,UAAU,EAAE;AAC1C,QAAQ,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzF,IAAI;AACJ;AACA,IAAI,oCAAoC,GAAG;AAC3C,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC9D,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB;AACjE,QAAQ,IAAI,CAAC,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB;AACvE,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,MAAM,EAAE;AAC1B,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM;AAC1C,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,QAAQ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAChD,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzC,YAAY,SAAS,EAAE;AACvB,gBAAgB,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE;AACrE,gBAAgB;AAChB,oBAAoB,OAAO,EAAE,4BAA4B;AACzD,oBAAoB,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB;AAChH;AACA,aAAa;AACb,YAAY,MAAM,EAAE,IAAI,CAAC;AACzB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,EAAE,GAAG,yBAAyB,GAAG;AACzH,YAAY,SAAS,EAAE;AACvB,SAAS,EAAE;AACX,YAAY;AACZ,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,KAAK,EAAE;AACxB,QAAQ,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG;AAClD,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS;AACtD,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1E,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5C,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3D,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;AACxE,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACtE,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3C,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;AACjE,YAAY;AACZ,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5C,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9B,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS;AACtD,YAAY,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AAC/D,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACrF,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACjD,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9E,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACvD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACnD,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACtF,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACpF,YAAY,IAAI,iBAAiB,GAAG,IAAI;AACxC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;AACxD,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AACtD,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC3E,gBAAgB,iBAAiB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;AACtE,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,iBAAiB,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE;AACtE,YAAY;AACZ,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;AAClF,YAAY,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AACtD,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACjD,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACtE,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACzF,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS;AACtD,YAAY,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC3C,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;AAC7D,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACrD,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC7E,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;AACzD;AACA,QAAQ,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAC1F,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;AAC/E,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3C,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3E,YAAY;AACZ,YAAY,IAAI,CAAC,qBAAqB,GAAG,WAAW;AACpD,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACrD,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC7E,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;AACnC,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AAC7C,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnG,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,OAAO,EAAE;AACvC,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS;AACtD,YAAY,IAAI,CAAC,0BAA0B,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC1E,YAAY,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;AAC7D,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAC1D,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACvF,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5E,QAAQ,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK;AAC5D,YAAY,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AACtG,YAAY,OAAO;AACnB,gBAAgB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAChD,gBAAgB,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC3C,aAAa;AACb,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACtG,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;AAClF,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,aAAa,EAAE;AACxD,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AAClF,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrG,YAAY;AACZ,YAAY,IAAI,CAAC,0BAA0B,GAAG,YAAY;AAC1D,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAC1D,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACvF,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE;AAC1C,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AAC/C,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAClH,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5E,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1V,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,6BAA6B,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE;AAChrE,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClE,gBAAgB,KAAK,EAAE;AACvB,aAAa;AACb,YAAY;AACZ,gBAAgB,OAAO,EAAE,aAAa;AACtC,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClE,gBAAgB,KAAK,EAAE;AACvB,aAAa;AACb,YAAY;AACZ,gBAAgB,OAAO,EAAE,wBAAwB;AACjD,gBAAgB,WAAW,EAAE;AAC7B,aAAa;AACb,YAAY,uBAAuB,CAAC,mBAAmB,CAAC;AACxD,YAAY,yBAAyB;AACrC,YAAY,cAAc;AAC1B,YAAY;AACZ,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,yBAAyB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,ygLAAygL,EAAE,MAAM,EAAE,CAAC,wPAAwP,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,QAAQ,EAAE,wCAAwC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,6CAA6C,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,8MAA8M,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,qDAAqD,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,cAAc,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACxvT;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE;AACvD,wBAAwB,QAAQ,EAAE,aAAa;AAC/C,wBAAwB,wBAAwB,EAAE,MAAM;AACxD,wBAAwB,+BAA+B,EAAE;AACzD,qBAAqB,EAAE,SAAS,EAAE;AAClC,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAC9E,4BAA4B,KAAK,EAAE;AACnC,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,aAAa;AAClD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAC9E,4BAA4B,KAAK,EAAE;AACnC,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,wBAAwB;AAC7D,4BAA4B,WAAW,EAAE;AACzC,yBAAyB;AACzB,wBAAwB,uBAAuB,CAAC,mBAAmB,CAAC;AACpE,wBAAwB,yBAAyB;AACjD,wBAAwB,cAAc;AACtC,wBAAwB;AACxB,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AACxH,wBAAwB,gBAAgB;AACxC,wBAAwB,aAAa;AACrC,wBAAwB,oBAAoB;AAC5C,wBAAwB,mBAAmB;AAC3C,wBAAwB,wBAAwB;AAChD,wBAAwB,WAAW;AACnC,wBAAwB,iBAAiB;AACzC,wBAAwB,YAAY;AACpC,wBAAwB,iBAAiB;AACzC,wBAAwB,mBAAmB;AAC3C,wBAAwB,eAAe;AACvC,wBAAwB;AACxB,qBAAqB,EAAE,QAAQ,EAAE,ygLAAygL,EAAE,MAAM,EAAE,CAAC,wPAAwP,CAAC,EAAE;AAChzL,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AAC5G,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACtD,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,EAAE;AACnB,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;AACxF,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;AACxC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,0BAA0B,EAAE,CAAC;AAC7C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,6BAA6B,EAAE,CAAC;AAChD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;AAC5C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;AACzC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE,KAAK;AAC3B,gBAAgB,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;AACtD,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,2BAA2B,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gCAAgC,EAAE,CAAC;AACnD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,qBAAqB,EAAE;AAC9C,wBAAwB,IAAI,EAAE;AAC9B,qBAAqB;AACrB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,wBAAwB,EAAE;AACjD,wBAAwB,IAAI,EAAE;AAC9B,qBAAqB;AACrB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,iBAAiB;AACxC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,kBAAkB;AACzC,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,wBAAwB;AAC/C,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,iBAAiB;AACxC,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;AAC5C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACroCZ,MAAM,gBAAgB,CAAC;AAC9B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC;AACzP,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC9L;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;AAC7E,oBAAoB,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB;AAC5E,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACfb;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-date-picker.mjs","sources":["../tmp-esm2022/date-picker/tokens.js","../tmp-esm2022/date-picker/date-picker-mobile/date-picker-mobile.component.js","../tmp-esm2022/date-picker/errors.js","../tmp-esm2022/date-picker/date-picker.component.js","../tmp-esm2022/date-picker/date-picker.module.js","../tmp-esm2022/date-picker/fundamental-ngx-core-date-picker.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const FD_DATE_PICKER_COMPONENT = new InjectionToken('FdDatePickerComponent');\nexport const FD_DATE_PICKER_MOBILE_CONFIG = new InjectionToken('FdDatePickerMobileConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFrQix1QkFBdUIsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFtQiwwQkFBMEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPERhdGVQaWNrZXI8YW55Pj4oJ0ZkRGF0ZVBpY2tlckNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TW9iaWxlTW9kZUNvbmZpZz4oJ0ZkRGF0ZVBpY2tlck1vYmlsZUNvbmZpZycpO1xuIl19","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from '../tokens';\nimport * as i0 from \"@angular/core\";\nexport class DatePickerMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(datePickerConfig, datePickerComponent) {\n super(datePickerComponent, MobileModeControl.DATE_PICKER);\n this.datePickerConfig = datePickerConfig;\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n /** @hidden */\n _getShowCalendarLegend() {\n const show = this._component.showCalendarLegend;\n if (typeof show === 'boolean') {\n return show;\n }\n return show?.() || false;\n }\n /** @hidden */\n _getLegendCol() {\n const col = this._component.legendCol;\n if (typeof col === 'boolean') {\n return col;\n }\n return col?.() || false;\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getSelectedDate();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n this._selectedBackup = this._component.getSelectedDate();\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, deps: [{ token: FD_DATE_PICKER_MOBILE_CONFIG }, { token: FD_DATE_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerMobileComponent, isStandalone: true, selector: \"fd-date-picker-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker-mobile', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogFooterComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogHeaderComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_MOBILE_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUNILG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFtQm5GLE1BQU0sT0FBTyx5QkFBNkIsU0FBUSxjQUE2QjtJQU8zRSxjQUFjO0lBQ2QsWUFFVyxnQkFBMkYsRUFDaEUsbUJBQWtDO1FBRXBFLEtB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QUNkLGdCQUFnQixvSkFDaEIscUJBQXFCLDZEQUNyQixlQUFlLHNHQUNmLG1CQUFtQix3RkFDbkIsMEJBQTBCLCtHQUMxQixxQkFBcUIsNkRBQ3JCLGtCQUFrQiw0SEFDbEIscUJBQXFCOzsyRkFHaEIseUJBQXlCO2tCQWpCckMsU0FBUzsrQkFDSSx1QkFBdUIsaUJBRWxCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ0wsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLDBCQUEwQjt3QkFDMUIscUJBQXFCO3dCQUNyQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjtxQkFDeEI7OzBCQVdJLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQyx3QkFBd0I7eUNBVFAsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEluaXRpYWxGb2N1c0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkJhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9iYXInO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aXRsZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1kYXRlLXBpY2tlci1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgSW5pdGlhbEZvY3VzRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyTW9iaWxlQ29tcG9uZW50PEQ+IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8RGF0ZVBpY2tlcjxEPj4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IEQgfCBBcnJheTxEPiB8IERhdGVSYW5nZTxEPiB8IEFycmF5PERhdGVSYW5nZTxEPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcpXG4gICAgICAgIHB1YmxpYyBkYXRlUGlja2VyQ29uZmlnOiB7IGNhbGVuZGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB9LFxuICAgICAgICBASW5qZWN0KEZEX0RBVEVfUElDS0VSX0NPTVBPTkVOVCkgZGF0ZVBpY2tlckNvbXBvbmVudDogRGF0ZVBpY2tlcjxEPlxuICAgICkge1xuICAgICAgICBzdXBlcihkYXRlUGlja2VyQ29tcG9uZW50LCBNb2JpbGVNb2RlQ29udHJvbC5EQVRFX1BJQ0tFUik7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmlzT3BlbkNoYW5nZS5zdWJzY3JpYmUoKGlzT3BlbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlhbG9nKGlzT3Blbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldFNob3dDYWxlbmRhckxlZ2VuZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2hvdyA9IHRoaXMuX2NvbXBvbmVudC5zaG93Q2FsZW5kYXJMZWdlbmQ7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvdyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc2hvdyBhcyBhbnkpPy4oKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRMZWdlbmRDb2woKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbXBvbmVudC5sZWdlbmRDb2w7XG4gICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGNvbCBhcyBhbnkpPy4oKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUFwcHJvdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dBcHByb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kaXNtaXNzKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRTZWxlY3RlZERhdGUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuZ2V0U2VsZWN0ZWREYXRlKCk7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgICAgICAgICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlUGlja2VyQ29uZmlnLmNhbGVuZGFyVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyPlxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBmZFR5cGU9XCJlbXBoYXNpemVkXCIgW2xhYmVsXT1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlQXBwcm92ZSgpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZka0luaXRpYWxGb2N1cyBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPlxuICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`FdDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQWdCO0lBQ2pFLE9BQU8sS0FBSyxDQUNSLHVDQUF1QyxRQUFRLHlDQUF5QztRQUNwRixtRUFBbUU7UUFDbkUsd0JBQXdCLENBQy9CLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENyZWF0ZXMgYW4gZXJyb3IgdG8gYmUgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byB1c2UgYW4gaW52YWxpZCBkYXRlIGltcGxlbWVudGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcihwcm92aWRlcjogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBFcnJvcihcbiAgICAgICAgYEZkRGF0ZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yICR7cHJvdmlkZXJ9LiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICBgbW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IEZkRGF0ZXRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBgICtcbiAgICAgICAgICAgIGBjdXN0b20gaW1wbGVtZW50YXRpb24uYFxuICAgICk7XG59XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, forwardRef, Inject, inject, Injector, input, Input, Optional, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DynamicComponentService, FocusTrapService } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CalendarComponent, CalendarLegendFocusingService, CalendarTypeEnum, DateRange, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FormMessageComponent, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverModule, PopoverService } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"@fundamental-ngx/core/form\";\nimport * as i3 from \"@fundamental-ngx/core/popover\";\nimport * as i4 from \"@angular/forms\";\nlet datePickerCounter = 0;\n/**\n * The datetime picker component is an opinionated composition of the fd-popover and\n * fd-calendar components to accomplish the UI pattern for picking a date.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-date-picker [(ngModel)]=\"date\"></fd-date-picker>\n * ```\n *\n */\nexport class DatePickerComponent {\n /** Text displayed in message */\n set message(message) {\n this._message = message;\n }\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n set messageTriggers(triggers) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n /**\n * The state of the form control - applies css classes.\n * Also, this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n set state(state) {\n this._state = state || 'default';\n }\n /** @hidden */\n get state() {\n if (this._state == null && this.useValidation && this._isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n /** Whether the date picker is open. Can be used through two-way binding. */\n set isOpen(value) {\n if (value === this._isOpen) {\n return;\n }\n this._isOpen = value;\n this._showPopoverContents = value;\n this._changeDetectionRef.detectChanges();\n }\n get isOpen() {\n return this._isOpen;\n }\n /** @hidden */\n get _rangeDelimiter() {\n return this._dateTimeFormats.rangeDelimiter;\n }\n /**\n * Date input aria label key based on type\n * @hidden\n */\n get _dateInputArialLabelKey() {\n // return either input value or a key for \"fdTranslate\" pipe\n return this.type === CalendarTypeEnum.Range\n ? 'coreDatePicker.dateRangeInputLabel'\n : 'coreDatePicker.dateInputLabel';\n }\n /** @hidden */\n constructor(_changeDetectionRef, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats, _popoverFormMessage) {\n this._changeDetectionRef = _changeDetectionRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n this._popoverFormMessage = _popoverFormMessage;\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n this.type = CalendarTypeEnum.Single;\n /** Date picker input placeholder string */\n this.placeholder = '';\n /** If it is mandatory field */\n this.required = false;\n /** The currently selected date model in multiple mode. */\n this.selectedMultipleDates = [];\n /** The currently selected date model with start and end in range mode. */\n this.selectedRangeDate = { start: null, end: null };\n /** The currently selected date model with multiple ranges. */\n this.selectedMultipleDateRanges = [];\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n this.rangeHoverEffect = false;\n /** Whether to validate the date picker input. */\n this.useValidation = true;\n /** Whether a null input is considered valid. */\n this.allowNull = true;\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n this.activeView = FdCalendarViewEnum.Day;\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n this.placement = 'bottom-start';\n /** Defines if date picker should be closed after date choose */\n this.closeOnDateChoose = true;\n /** Enables Today-Selection-Button if true */\n this.showTodayButton = false;\n /** Label for Today-Selection-Button */\n this.todayButtonLabel = 'Today';\n /**\n * @deprecated Popover is toggled with f4 key\n */\n this.buttonFocusable = false;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = true;\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = false;\n /** Should date picker be inlined. */\n this.inline = true;\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n this.processInputOnBlur = false;\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n this.preventScrollOnFocus = false;\n /** Whether date picker should rendered in mobile mode. */\n this.mobile = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** Whether to select and display the date range in MM/YYYY or YYYY format\n * For month and year format value is 'month'\n * For year format value is 'year'\n */\n this.dateRangeFormat = '';\n /** Event emitted when the state of the isOpen property changes. */\n this.isOpenChange = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /** Event thrown every time calendar active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Whether to display the calendar legend below the calendar. Default is false. */\n this.showCalendarLegend = input(false, ...(ngDevMode ? [{ debugName: \"showCalendarLegend\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** Whether the legend should display in column layout instead of row layout. Default is false. */\n this.legendCol = input(false, ...(ngDevMode ? [{ debugName: \"legendCol\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** @hidden */\n this._message = null;\n /** @hidden */\n this._messageTriggers = ['focusin', 'focusout'];\n /** @hidden The value of the input */\n this._inputFieldDate = null;\n /** @hidden Whether the date input is invalid */\n this._isInvalidDateInput = false;\n /** @hidden */\n this._showPopoverContents = false;\n /** @hidden */\n this._formValueStateMessageId = `fd-date-picker-form-message-${datePickerCounter++}`;\n /** @hidden */\n this._isOpen = false;\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this._state = 'default';\n /** @hidden */\n this._injector = inject(Injector);\n /** @hidden */\n this._dynamicComponentService = inject(DynamicComponentService);\n /** @hidden */\n this._focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n /**\n * Function used to disable certain dates in the calendar.\n */\n this.disableFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n this.disableRangeStartFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n this.disableRangeEndFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n /** @hidden */\n dialogApprove() { }\n /** @hidden */\n dialogDismiss(prevValue) {\n if (this.allowMultipleSelection) {\n if (this._isMultipleDateRanges(prevValue)) {\n this.handleMultipleDateRangesChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleMultipleDatesChange(value);\n }\n }\n else {\n if (this._isDateRange(prevValue)) {\n this.handleRangeDateChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleSingleDateChange(value);\n }\n }\n }\n /** @hidden */\n ngOnInit() {\n // initial view should be month or year if dateRangeFormat is provided\n if (this.dateRangeFormat === 'month') {\n this.activeView = FdCalendarViewEnum.Month;\n }\n else if (this.dateRangeFormat === 'year') {\n this.activeView = FdCalendarViewEnum.Year;\n }\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.formatInputDate(this.selectedDate);\n this._changeDetectionRef.detectChanges();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetectionRef.detectChanges();\n }\n }\n /** @hidden */\n ngAfterViewInit() {\n this._InitialiseVariablesInMessageService();\n this._calendars.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const calendar = this._calendars.first;\n this._calendarComponent = calendar;\n setTimeout(() => {\n if (this._calendarComponent) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService?.unpauseCurrentFocusTrap();\n }\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n });\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView) {\n this.activeViewChange.emit(activeView);\n }\n /** @hidden */\n closeFromCalendar() {\n if (this.type === CalendarTypeEnum.Single && this.closeOnDateChoose && !this.allowMultipleSelection) {\n this.onTouched();\n this.closeCalendar();\n }\n }\n /** Opens the calendar */\n openCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(true);\n this._changeMessageVisibility();\n }\n /** Toggles the calendar open or closed */\n toggleCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(!this.isOpen);\n if (!this.isOpen) {\n this.onTouched();\n }\n this._changeMessageVisibility();\n }\n /** Closes the calendar if it is open */\n closeCalendar() {\n if (!this.isOpen) {\n return;\n }\n this._setOpenState(false);\n this._changeMessageVisibility();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected single date changed\n */\n handleSingleDateChange(date) {\n if (!date) {\n return;\n }\n this.selectedDate = date;\n this.selectedDateChange.emit(date);\n this.onChange(date);\n this._refreshCurrentlyDisplayedCalendarDate(date);\n this.formatInputDate(date);\n this._isInvalidDateInput = !this.isModelValid();\n if (this.closeOnDateChoose && this.type === CalendarTypeEnum.Single) {\n this.closeCalendar();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple dates change.\n */\n handleMultipleDatesChange(dates) {\n if (!dates || dates.length === 0) {\n this.selectedMultipleDates = [];\n this.selectedMultipleDatesChange.emit([]);\n this.onChange([]);\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this._inputFieldDate = null;\n return;\n }\n this.selectedMultipleDates = dates;\n this.selectedMultipleDatesChange.emit(dates);\n this.onChange(dates);\n /** Assuming the first date in the array is used for refresh */\n if (this.showTodayButton) {\n this._refreshCurrentlyDisplayedCalendarDate(dates[0]);\n }\n this._inputFieldDate = this.formatDateArray(dates);\n this._isInvalidDateInput = !this.isModelValid();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected range date changed\n */\n handleRangeDateChange(dates) {\n const startChanged = !this._dateTimeAdapter.datesEqual(dates.start, this.selectedRangeDate.start);\n const endChanged = !this._dateTimeAdapter.datesEqual(dates.end, this.selectedRangeDate.end);\n if (dates && (startChanged || endChanged)) {\n const shouldClose = this.closeOnDateChoose && dates.end !== null;\n if (dates.end !== null) {\n this._inputFieldDate = this._formatDateRange(dates);\n this.selectedRangeDate = {\n start: dates.start,\n end: dates.end\n };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this._refreshCurrentlyDisplayedCalendarDate(dates.start);\n this._isInvalidDateInput = !this.isModelValid();\n }\n if (shouldClose) {\n this.closeCalendar();\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple range dates change.\n */\n handleMultipleDateRangesChange(dates) {\n let hasChanged = false;\n // Check for changes in the date ranges\n if (dates.length !== this.selectedMultipleDateRanges.length) {\n hasChanged = true;\n }\n else {\n for (let i = 0; i < dates.length; i++) {\n if (!this._dateTimeAdapter.datesEqual(dates[i].start, this.selectedMultipleDateRanges[i].start) ||\n !this._dateTimeAdapter.datesEqual(dates[i].end, this.selectedMultipleDateRanges[i].end)) {\n hasChanged = true;\n break;\n }\n }\n }\n // If any date range has changed, update the internal state and emit changes\n if (hasChanged) {\n this.selectedMultipleDateRanges = dates;\n // Update the formatted input field\n this._inputFieldDate = this._formatMultipleDateRanges(dates);\n // Emit the change event\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n // Perform any additional actions such as updating the model or refreshing the calendar\n this.onChange(this.selectedMultipleDateRanges);\n // if you want to refresh the calendar view, you can use the following line\n // this._refreshCurrentlyDisplayedCalendarDate(dates[0].start);\n this._calendarPendingDate = dates[0].start;\n this._isInvalidDateInput = !this.isModelValid();\n }\n }\n /**\n * @hidden\n * Method that is triggered date formatting in the date control\n */\n formatInputDate(date) {\n if (!date) {\n return;\n }\n this._inputFieldDate = this._formatDate(date);\n }\n /**\n * @hidden\n * Method that is triggered when Today-Selection-Button clicked, it changes selected date or date range to today's date\n */\n onTodayButtonClick() {\n const todayDate = this._dateTimeAdapter.today();\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleMultipleDatesChange([todayDate]);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleMultipleDateRangesChange([\n {\n start: todayDate,\n end: todayDate\n }\n ]);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleSingleDateChange(todayDate);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleRangeDateChange({\n start: todayDate,\n end: todayDate\n });\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered when the text input is confirmed to ba changed, by clicking enter, or blur\n */\n handleInputChange(strDate, isTypeEvent) {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this.dateStringUpdate(strDate);\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected) {\n /** If written value is not defined, null, empty string */\n if (!selected) {\n this._inputFieldDate = '';\n this._refreshCurrentlyDisplayedCalendarDate(this._dateTimeAdapter.today());\n this.selectedRangeDate = {\n start: null,\n end: null\n };\n this.selectedDate = null;\n this.selectedMultipleDates = [];\n this.selectedMultipleDateRanges = [];\n this._changeDetectionRef.detectChanges();\n return;\n }\n if (this.allowMultipleSelection && Array.isArray(selected)) {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n // selected = this._parseDate(selected)\n selected = selected;\n this.selectedMultipleDates = selected;\n this._inputFieldDate = this.formatDateArray(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected[0]);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected && selected.length > 0) {\n const filteredRanges = selected.filter((range) => range.start !== null && range.end !== null);\n if (filteredRanges.length > 0) {\n this.selectedMultipleDateRanges = filteredRanges.map((range) => ({\n start: this._parseDate(range.start),\n end: this._parseDate(range.end)\n }));\n this._refreshCurrentlyDisplayedCalendarDate(filteredRanges[0].start);\n this._inputFieldDate = this._formatMultipleDateRanges(filteredRanges);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n selected = this._parseDate(selected);\n this.selectedDate = selected;\n this._inputFieldDate = this._formatDate(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected?.start) {\n this.selectedRangeDate = {\n start: this._parseDate(selected.start),\n end: this._parseDate(selected.end)\n };\n this._refreshCurrentlyDisplayedCalendarDate(selected.start);\n this._inputFieldDate = this._formatDateRange(selected);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n this._isInvalidDateInput = !this.isModelValid();\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Method, which is responsible for transforming string to date, depending on type or\n * validation the results are different. It also changes the state of _isInvalidDateInput\n */\n dateStringUpdate(dateStr) {\n this._inputFieldDate = dateStr;\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.updateMultipleDates(dateStr);\n }\n else {\n this._updateMultipleDateRanges(dateStr);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this._updateSingleDate(dateStr);\n }\n else {\n this._updateRangeDate(dateStr);\n }\n }\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid() {\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isMultipleModelValid(this.selectedMultipleDates);\n }\n else {\n return this._isMultipleRangesModelValid(this.selectedMultipleDateRanges);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isSingleModelValid(this.selectedDate);\n }\n else {\n return this._isRangeModelValid(this.selectedRangeDate);\n }\n }\n }\n /** Returns current selected date. */\n getSelectedDate() {\n return (this.selectedDate || this.selectedMultipleDates || this.selectedRangeDate || this.selectedMultipleDateRanges);\n }\n /** @hidden */\n _changeMessageVisibility() {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n }\n else {\n this._popoverFormMessage.show();\n }\n }\n /** @hidden */\n _onOpenStateChanged(isOpen) {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n }\n /**\n * Renders the calendar right before the popover is opened.\n * Used for correct calculations of overlay position and size.\n */\n _beforePopoverOpen() {\n this._showPopoverContents = true;\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _onBlur(event) {\n this.onTouched();\n this.handleInputChange(event.target.value, false);\n }\n /** Method that returns info if single model given is valid */\n _isSingleModelValid(date) {\n return (this._isDateValid(date) && !this.disableFunction(date)) || (!date && this.allowNull);\n }\n /** Method that returns info if multiple date model given is valid */\n _isMultipleModelValid(dates) {\n return dates?.every((date) => this._isSingleModelValid(date));\n }\n /** Method that returns info if range date model given is valid */\n _isRangeModelValid(fdRangeDate) {\n return ((fdRangeDate && this._isStartDateValid(fdRangeDate.start) && this._isEndDateValid(fdRangeDate.end)) ||\n (!fdRangeDate.start && !fdRangeDate.end && this.allowNull));\n }\n /** Method that returns info if multiple range date model given is valid */\n _isMultipleRangesModelValid(ranges) {\n if (!ranges || ranges.length === 0) {\n return this.allowNull;\n }\n return ranges.every((range) => range.start && range.end && this._isRangeModelValid(range));\n }\n /** Method that returns info if end date model given is valid */\n _isEndDateValid(endDate) {\n return this._isDateValid(endDate) && !this.disableRangeEndFunction(endDate);\n }\n /** Method that returns info if start date model given is valid */\n _isStartDateValid(startDate) {\n return this._isDateValid(startDate) && !this.disableRangeStartFunction(startDate);\n }\n /** Method that returns info if given date model is valid */\n _isDateValid(date) {\n return this._dateTimeAdapter.isValid(date);\n }\n /** @hidden */\n _refreshCurrentlyDisplayedCalendarDate(date) {\n this._calendarPendingDate = date;\n this._calendarComponent?.setCurrentlyDisplayed(date);\n }\n /** @hidden */\n _formatDate(date) {\n if (this.customDateTimeFormat) {\n return this._dateTimeAdapter.format(date, this.customDateTimeFormat);\n }\n return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateInput);\n }\n /** @hidden */\n formatDateArray(dates) {\n return dates.map((date) => this._formatDate(date)).join(', ');\n }\n /** @hidden */\n _parseDate(date) {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n /**\n * Helper method to parse a date string into an array of dates.\n * @param dateStr The date string to parse.\n * @returns An array of dates.\n */\n parseDateString(dateStr) {\n return dateStr\n .split(',')\n .map((date) => this._parseDate(date.trim()))\n .filter((date) => date !== null);\n }\n /** @hidden */\n _formatDateRange(dateRange) {\n const startDate = this._formatDate(dateRange.start);\n const endDate = this._formatDate(dateRange.end);\n return startDate + this._rangeDelimiter + endDate;\n }\n /** @hidden */\n _formatMultipleDateRanges(dateRanges) {\n return dateRanges.map((dateRange) => this._formatDateRange(dateRange)).join(', ');\n }\n /** @hidden */\n _InitialiseVariablesInMessageService() {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.message = this._messagePopoverTemplate;\n }\n /** @hidden */\n _setOpenState(isOpen) {\n this._showPopoverContents = isOpen;\n this._changeDetectionRef.detectChanges();\n this.isOpen = isOpen;\n this.isOpenChange.emit(this.isOpen);\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATE_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATE_PICKER_MOBILE_CONFIG,\n useValue: { calendarTemplate: this._calendarTemplate, controlTemplate: this._controlTemplate }\n }\n ],\n parent: this._injector\n });\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent({}, (DatePickerMobileComponent), {\n container: 'body'\n }, {\n injector\n });\n }\n /** @hidden */\n _isDateRange(value) {\n return !!value && value.start && value.end;\n }\n /** @hidden */\n _isMultipleDateRanges(value) {\n return Array.isArray(value) && value.every((item) => this._isDateRange(item));\n }\n /**\n * @hidden\n * Updates the selected single date from a date string.\n * @param dateStr The date string to parse and update the selected date.\n */\n _updateSingleDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedDate = null;\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedDate);\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n return;\n }\n const date = this._parseDate(dateStr);\n if (!this._dateTimeAdapter.datesEqual(date, this.selectedDate)) {\n this._isInvalidDateInput = !this._isSingleModelValid(date);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(date);\n }\n this.selectedDate = date;\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n }\n }\n /**\n * @hidden\n * Updates the selected range date from a date string.\n * @param dateStr The date string to parse and update the selected range date.\n */\n _updateRangeDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedRangeDate = { start: null, end: null };\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n this.onChange(this.selectedRangeDate);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n return;\n }\n const [startDateStr, endDateStr] = dateStr.split(this._rangeDelimiter);\n const startDate = this._parseDate(startDateStr);\n const endDate = this._parseDate(endDateStr);\n if (!this._dateTimeAdapter.datesEqual(startDate, this.selectedRangeDate.start) ||\n !this._dateTimeAdapter.datesEqual(endDate, this.selectedRangeDate.end)) {\n let selectedRangeDate = null;\n if (this._dateTimeAdapter.isValid(startDate) &&\n this._dateTimeAdapter.isValid(endDate) &&\n this._dateTimeAdapter.compareDate(startDate, endDate) > 0) {\n selectedRangeDate = { start: endDate, end: startDate };\n }\n else {\n selectedRangeDate = { start: startDate, end: endDate };\n }\n this._isInvalidDateInput = !this._isRangeModelValid(selectedRangeDate);\n this.selectedRangeDate = selectedRangeDate;\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n if (this._isStartDateValid(this.selectedRangeDate.start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n }\n }\n }\n /**\n * @hidden\n * Updates the selected multiple dates from a date string.\n * @param dateStr The date string to parse and update the selected multiple dates.\n */\n updateMultipleDates(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDates = [];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n return;\n }\n const parsedDates = this.parseDateString(dateStr);\n // Check if the new parsed dates are different from the previously selected dates\n const datesChanged = !this._areDatesEqual(parsedDates, this.selectedMultipleDates);\n if (datesChanged) {\n this._isInvalidDateInput = !this._isMultipleModelValid(parsedDates);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(parsedDates[0]);\n }\n this.selectedMultipleDates = parsedDates;\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n }\n }\n /** Helper method to compare two arrays of dates */\n _areDatesEqual(dates1, dates2) {\n if (dates1.length !== dates2.length) {\n return false;\n }\n return dates1.every((date, index) => this._dateTimeAdapter.datesEqual(date, dates2[index]));\n }\n /**\n * @hidden\n * Updates the selected multiple date ranges from a date string.\n * @param dateStr The date string to parse and update the selected multiple date ranges.\n */\n _updateMultipleDateRanges(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDateRanges = [{ start: null, end: null }];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n return;\n }\n const rangeStrings = dateStr.split(',').map((range) => range.trim());\n const parsedRanges = rangeStrings.map((rangeStr) => {\n const [startStr, endStr] = rangeStr.split(this._rangeDelimiter).map((date) => date.trim());\n return {\n start: this._parseDate(startStr),\n end: this._parseDate(endStr)\n };\n });\n // Check if the new parsed ranges are different from the previously selected ranges\n const rangesChanged = !this._areDateRangesEqual(parsedRanges, this.selectedMultipleDateRanges);\n this._isInvalidDateInput = !this._isMultipleRangesModelValid(parsedRanges);\n if (!this._isInvalidDateInput && rangesChanged) {\n if (this._isStartDateValid(this.selectedMultipleDateRanges[0].start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedMultipleDateRanges[0].start);\n }\n this.selectedMultipleDateRanges = parsedRanges;\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n }\n }\n /** Helper method to compare two arrays of date ranges */\n _areDateRangesEqual(ranges1, ranges2) {\n if (ranges1.length !== ranges2.length) {\n return false;\n }\n return ranges1.every((range, index) => this._dateTimeAdapter.datesEqual(range.start, ranges2[index].start) &&\n this._dateTimeAdapter.datesEqual(range.end, ranges2[index].end));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerComponent, isStandalone: true, selector: \"fd-date-picker\", inputs: { type: { classPropertyName: \"type\", publicName: \"type\", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: \"placeholder\", publicName: \"placeholder\", isSignal: false, isRequired: false, transformFunction: null }, inputId: { classPropertyName: \"inputId\", publicName: \"inputId\", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: \"required\", publicName: \"required\", isSignal: false, isRequired: false, transformFunction: null }, customDateTimeFormat: { classPropertyName: \"customDateTimeFormat\", publicName: \"customDateTimeFormat\", isSignal: false, isRequired: false, transformFunction: null }, message: { classPropertyName: \"message\", publicName: \"message\", isSignal: false, isRequired: false, transformFunction: null }, messageTriggers: { classPropertyName: \"messageTriggers\", publicName: \"messageTriggers\", isSignal: false, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: \"selectedDate\", publicName: \"selectedDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDates: { classPropertyName: \"selectedMultipleDates\", publicName: \"selectedMultipleDates\", isSignal: false, isRequired: false, transformFunction: null }, selectedRangeDate: { classPropertyName: \"selectedRangeDate\", publicName: \"selectedRangeDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDateRanges: { classPropertyName: \"selectedMultipleDateRanges\", publicName: \"selectedMultipleDateRanges\", isSignal: false, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: \"startingDayOfWeek\", publicName: \"startingDayOfWeek\", isSignal: false, isRequired: false, transformFunction: null }, rangeHoverEffect: { classPropertyName: \"rangeHoverEffect\", publicName: \"rangeHoverEffect\", isSignal: false, isRequired: false, transformFunction: null }, useValidation: { classPropertyName: \"useValidation\", publicName: \"useValidation\", isSignal: false, isRequired: false, transformFunction: null }, allowNull: { classPropertyName: \"allowNull\", publicName: \"allowNull\", isSignal: false, isRequired: false, transformFunction: null }, activeView: { classPropertyName: \"activeView\", publicName: \"activeView\", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: \"placement\", publicName: \"placement\", isSignal: false, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: \"appendTo\", publicName: \"appendTo\", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: false, isRequired: false, transformFunction: null }, closeOnDateChoose: { classPropertyName: \"closeOnDateChoose\", publicName: \"closeOnDateChoose\", isSignal: false, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: \"showTodayButton\", publicName: \"showTodayButton\", isSignal: false, isRequired: false, transformFunction: null }, todayButtonLabel: { classPropertyName: \"todayButtonLabel\", publicName: \"todayButtonLabel\", isSignal: false, isRequired: false, transformFunction: null }, previousButtonDisableFunction: { classPropertyName: \"previousButtonDisableFunction\", publicName: \"previousButtonDisableFunction\", isSignal: false, isRequired: false, transformFunction: null }, nextButtonDisableFunction: { classPropertyName: \"nextButtonDisableFunction\", publicName: \"nextButtonDisableFunction\", isSignal: false, isRequired: false, transformFunction: null }, buttonFocusable: { classPropertyName: \"buttonFocusable\", publicName: \"buttonFocusable\", isSignal: false, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: false, isRequired: false, transformFunction: null }, yearGrid: { classPropertyName: \"yearGrid\", publicName: \"yearGrid\", isSignal: false, isRequired: false, transformFunction: null }, aggregatedYearGrid: { classPropertyName: \"aggregatedYearGrid\", publicName: \"aggregatedYearGrid\", isSignal: false, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: \"markWeekends\", publicName: \"markWeekends\", isSignal: false, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: \"showWeekNumbers\", publicName: \"showWeekNumbers\", isSignal: false, isRequired: false, transformFunction: null }, allowMultipleSelection: { classPropertyName: \"allowMultipleSelection\", publicName: \"allowMultipleSelection\", isSignal: false, isRequired: false, transformFunction: null }, inline: { classPropertyName: \"inline\", publicName: \"inline\", isSignal: false, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: \"ariaLabelledBy\", publicName: \"ariaLabelledBy\", isSignal: false, isRequired: false, transformFunction: null }, processInputOnBlur: { classPropertyName: \"processInputOnBlur\", publicName: \"processInputOnBlur\", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, preventScrollOnFocus: { classPropertyName: \"preventScrollOnFocus\", publicName: \"preventScrollOnFocus\", isSignal: false, isRequired: false, transformFunction: null }, mobile: { classPropertyName: \"mobile\", publicName: \"mobile\", isSignal: false, isRequired: false, transformFunction: null }, mobileConfig: { classPropertyName: \"mobileConfig\", publicName: \"mobileConfig\", isSignal: false, isRequired: false, transformFunction: null }, mobileLandscape: { classPropertyName: \"mobileLandscape\", publicName: \"mobileLandscape\", isSignal: false, isRequired: false, transformFunction: null }, mobilePortrait: { classPropertyName: \"mobilePortrait\", publicName: \"mobilePortrait\", isSignal: false, isRequired: false, transformFunction: null }, dateRangeFormat: { classPropertyName: \"dateRangeFormat\", publicName: \"dateRangeFormat\", isSignal: false, isRequired: false, transformFunction: null }, showCalendarLegend: { classPropertyName: \"showCalendarLegend\", publicName: \"showCalendarLegend\", isSignal: true, isRequired: false, transformFunction: null }, legendCol: { classPropertyName: \"legendCol\", publicName: \"legendCol\", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: \"state\", publicName: \"state\", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: \"isOpen\", publicName: \"isOpen\", isSignal: false, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: \"disableFunction\", publicName: \"disableFunction\", isSignal: false, isRequired: false, transformFunction: null }, disableRangeStartFunction: { classPropertyName: \"disableRangeStartFunction\", publicName: \"disableRangeStartFunction\", isSignal: false, isRequired: false, transformFunction: null }, disableRangeEndFunction: { classPropertyName: \"disableRangeEndFunction\", publicName: \"disableRangeEndFunction\", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: \"isOpenChange\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", activeViewChange: \"activeViewChange\" }, host: { listeners: { \"blur\": \"onTouched()\" }, properties: { \"class.fd-date-picker\": \"true\", \"class.fd-date-picker-custom\": \"inline\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService,\n CalendarLegendFocusingService\n ], viewQueries: [{ propertyName: \"_inputGroupElement\", first: true, predicate: [\"inputGroupComponent\"], descendants: true, read: ElementRef }, { propertyName: \"_inputElement\", first: true, predicate: InputGroupInputDirective, descendants: true, read: ElementRef }, { propertyName: \"_controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"_calendarTemplate\", first: true, predicate: [\"calendarTemplate\"], descendants: true }, { propertyName: \"_messagePopoverTemplate\", first: true, predicate: [\"popoverMessageTemplate\"], descendants: true }, { propertyName: \"_calendars\", predicate: CalendarComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [showCalendarLegend]=\\\"showCalendarLegend()\\\"\\n [legendCol]=\\\"legendCol()\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i3.PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: i3.PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: i3.PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: CalendarComponent, selector: \"fd-calendar\", inputs: [\"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"mobileLandscape\", \"mobilePortrait\", \"activeView\", \"startingDayOfWeek\", \"calType\", \"id\", \"specialDaysRules\", \"yearGrid\", \"aggregatedYearGrid\", \"rangeHoverEffect\", \"dateRangeFormat\", \"previousButtonDisableFunction\", \"nextButtonDisableFunction\", \"showCalendarLegend\", \"legendCol\", \"escapeFocusFunction\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\"], outputs: [\"activeViewChange\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"isValidDateChange\", \"closeCalendar\", \"closeClicked\"] }, { kind: \"component\", type: BarComponent, selector: \"[fd-bar]\", inputs: [\"class\", \"barDesign\", \"inPage\", \"inHomePage\", \"clear\", \"size\", \"role\"] }, { kind: \"directive\", type: BarRightDirective, selector: \"[fd-bar-right]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker', host: {\n '(blur)': 'onTouched()',\n '[class.fd-date-picker]': 'true',\n '[class.fd-date-picker-custom]': 'inline'\n }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService,\n CalendarLegendFocusingService\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverModule,\n FormMessageComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n CalendarComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n FdTranslatePipe\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [showCalendarLegend]=\\\"showCalendarLegend()\\\"\\n [legendCol]=\\\"legendCol()\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.PopoverFormMessageService }], propDecorators: { type: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], inputId: [{\n type: Input\n }], required: [{\n type: Input\n }], customDateTimeFormat: [{\n type: Input\n }], message: [{\n type: Input\n }], messageTriggers: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], useValidation: [{\n type: Input\n }], allowNull: [{\n type: Input\n }], activeView: [{\n type: Input\n }], placement: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], disabled: [{\n type: Input\n }], closeOnDateChoose: [{\n type: Input\n }], showTodayButton: [{\n type: Input\n }], todayButtonLabel: [{\n type: Input\n }], previousButtonDisableFunction: [{\n type: Input\n }], nextButtonDisableFunction: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], allowMultipleSelection: [{\n type: Input\n }], inline: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], processInputOnBlur: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], preventScrollOnFocus: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], mobilePortrait: [{\n type: Input\n }], dateRangeFormat: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], _inputGroupElement: [{\n type: ViewChild,\n args: ['inputGroupComponent', {\n read: ElementRef\n }]\n }], _inputElement: [{\n type: ViewChild,\n args: [InputGroupInputDirective, {\n read: ElementRef\n }]\n }], _controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], _calendarTemplate: [{\n type: ViewChild,\n args: ['calendarTemplate']\n }], _messagePopoverTemplate: [{\n type: ViewChild,\n args: ['popoverMessageTemplate']\n }], _calendars: [{\n type: ViewChildren,\n args: [CalendarComponent]\n }], state: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], disableFunction: [{\n type: Input\n }], disableRangeStartFunction: [{\n type: Input\n }], disableRangeEndFunction: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQVksTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBRTdCLGdCQUFnQixFQUVoQixTQUFTLEVBR1Qsa0JBQWtCLEVBRXJCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxF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QUMsa0JBQWtCO2dCQUtaLHVCQUF1QjtzQkFEdkMsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBS2xCLFVBQVU7c0JBRDFCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQWUzQixLQUFLO3NCQURSLEtBQUs7Z0JBZUYsTUFBTTtzQkFEVCxLQUFLO2dCQXVHTixlQUFlO3NCQURkLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQU9OLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBpbnB1dCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7XG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2UsXG4gICAgQ2FsZW5kYXJUeXBlLFxuICAgIENhbGVuZGFyVHlwZUVudW0sXG4gICAgQ2FsZW5kYXJZZWFyR3JpZCxcbiAgICBEYXRlUmFuZ2UsXG4gICAgRGF5c09mV2VlayxcbiAgICBGZENhbGVuZGFyVmlldyxcbiAgICBGZENhbGVuZGFyVmlld0VudW0sXG4gICAgTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvblxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7XG4gICAgRm9ybUl0ZW1Db250cm9sLFxuICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSwgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBGZExhbmd1YWdlS2V5SWRlbnRpZmllciwgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbW9iaWxlL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMnO1xuXG5sZXQgZGF0ZVBpY2tlckNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyIGFuZFxuICogZmQtY2FsZW5kYXIgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtcGlja2VyIFsobmdNb2RlbCldPVwiZGF0ZVwiPjwvZmQtZGF0ZS1waWNrZXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlci1jdXN0b21dJzogJ2lubGluZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IERhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb3BvdmVyTW9kdWxlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50PEQ+XG4gICAgaW1wbGVtZW50c1xuICAgICAgICBEYXRlUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IENhbGVuZGFyVHlwZSA9IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlO1xuXG4gICAgLyoqIERhdGUgcGlja2VyIGlucHV0IHBsYWNlaG9sZGVyIHN0cmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBJRCBhdHRyaWJ1dGUgZm9yIGlucHV0IGVsZW1lbnQgaW5zaWRlIERhdGVQaWNrZXIgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkOiBzdHJpbmc7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERlZmluZSBhIGN1c3RvbSBkYXRldGltZSBmb3JtYXQuIENhbiBiZSBhIHN0cmluZyBmb3IgRGF5anNEYXRldGltZUFkYXB0ZXIgb3Igb2JqZWN0IGZvciBGZERhdGV0aW1lQWRhcHRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIHNpbmdsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gbXVsdGlwbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlczogQXJyYXk8RD4gPSBbXTtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgd2l0aCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+ID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIHdpdGggbXVsdGlwbGUgcmFuZ2VzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcblxuICAgIC8qKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgb24uIDEgcmVwcmVzZW50cyBTdW5kYXksIDIgaXMgTW9uZGF5LCAzIGlzIFR1ZXNkYXksIGFuZCBzbyBvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgZGF5IGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIG9uIERheSBWaWV3LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIGRhdGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uRGF5O1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcG92ZXIuIEl0IGNhbiBiZSBvbmUgb2Y6IHRvcCwgdG9wLXN0YXJ0LCB0b3AtZW5kLCBib3R0b20sXG4gICAgICogIGJvdHRvbS1zdGFydCwgYm90dG9tLWVuZCwgcmlnaHQsIHJpZ2h0LXN0YXJ0LCByaWdodC1lbmQsIGxlZnQsIGxlZnQtc3RhcnQsIGxlZnQtZW5kLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcblxuICAgIC8qKiBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgcG9wb3ZlciBzaG91bGQgYmUgYXBwZW5kZWQuICovXG4gICAgQElucHV0KClcbiAgICBhcHBlbmRUbzogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHBpY2tlciBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZGF0ZSBwaWNrZXIgc2hvdWxkIGJlIGNsb3NlZCBhZnRlciBkYXRlIGNob29zZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbkRhdGVDaG9vc2UgPSB0cnVlO1xuXG4gICAgLyoqIEVuYWJsZXMgVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiBpZiB0cnVlICovXG4gICAgQElucHV0KClcbiAgICBzaG93VG9kYXlCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBMYWJlbCBmb3IgVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9kYXlCdXR0b25MYWJlbCA9ICdUb2RheSc7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgcHJldmlvdXMgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBuZXh0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFBvcG92ZXIgaXMgdG9nZ2xlZCB3aXRoIGY0IGtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgbXVsdGlwbGUgZGF5cyBvciBtdWx0aXBsZSByYW5nZSBkYXRlcy5cbiAgICAgKiBJZiBgZGlzcGxheVdlZWtOdW1iZXJzYCBpcyB0cnVlLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIHdlZWsgbnVtYmVyIHRvIG1hcmsgdGhlIHJlbGF0ZWQgcm93LlxuICAgICAqIFRoZSB1c2VyIGNhbiBjbGljayBvbiB3ZWVrIGRheXMgdG8gbWFyayB0aGUgcmVsYXRlZCBjb2x1bW4uXG4gICAgICogTm90ZTogQ2xpY2thYmxlIHNlbGVjdGlvbiBmb3Igd2VlayByb3cgb3IgY29sdW1uIGRvZXMgbm90IHdvcmsgZm9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogU2hvdWxkIGRhdGUgcGlja2VyIGJlIGlubGluZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHJvY2Vzc0lucHV0T25CbHVyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgcGFnZSBzY3JvbGxpbmcgd2hlbiBmb2N1c2luZyBkYXRlIHBpY2tlciBpbnB1dCBmaWVsZCBhZnRlciBjYWxlbmRhciBoYXMgYmVlbiBjbG9zZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgZGF0ZSBwaWNrZXIgc2hvdWxkIHJlbmRlcmVkIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTW9iaWxlIG1vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBsYW5kc2NhcGUgbW9kZSwgaXQgYWxzbyBhZGRzIGNsb3NlIGJ1dHRvbiBvbiByaWdodCBzaWRlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBwb3J0cmFpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gc2VsZWN0IGFuZCBkaXNwbGF5IHRoZSBkYXRlIHJhbmdlIGluIE1NL1lZWVkgb3IgWVlZWSBmb3JtYXRcbiAgICAgKiBGb3IgbW9udGggYW5kIHllYXIgZm9ybWF0IHZhbHVlIGlzICdtb250aCdcbiAgICAgKiBGb3IgeWVhciBmb3JtYXQgdmFsdWUgaXMgJ3llYXInXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkYXRlUmFuZ2VGb3JtYXQgPSAnJztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBpc09wZW4gcHJvcGVydHkgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TnVsbGFibGU8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgaW4gbXVsdGlwbGUgbW9kZSBhcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIG11bHRpcGxlIHJhbmdlIG1vZGUgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PERhdGVSYW5nZTxEPj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgQXJyYXk8RGF0ZVJhbmdlPEQ+PlxuICAgID4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBDb21wb25lbnQnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIF9pbnB1dEdyb3VwRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY29udHJvbFRlbXBsYXRlJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NhbGVuZGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BvcG92ZXJNZXNzYWdlVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VQb3BvdmVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGVlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2FsZW5kYXJzOiBRdWVyeUxpc3Q8Q2FsZW5kYXJDb21wb25lbnQ8RD4+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgY2FsZW5kYXIgbGVnZW5kIGJlbG93IHRoZSBjYWxlbmRhci4gRGVmYXVsdCBpcyBmYWxzZS4gKi9cbiAgICBzaG93Q2FsZW5kYXJMZWdlbmQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbGVnZW5kIHNob3VsZCBkaXNwbGF5IGluIGNvbHVtbiBsYXlvdXQgaW5zdGVhZCBvZiByb3cgbGF5b3V0LiBEZWZhdWx0IGlzIGZhbHNlLiAqL1xuICAgIGxlZ2VuZENvbCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIEFsc28sIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IE51bGxhYmxlPEZvcm1TdGF0ZXM+KSB7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gc3RhdGUgfHwgJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHN0YXRlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT0gbnVsbCAmJiB0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcGlja2VyIGlzIG9wZW4uIENhbiBiZSB1c2VkIHRocm91Z2ggdHdvLXdheSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgKi9cbiAgICBfaW5wdXRGaWVsZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gV2hldGhlciB0aGUgZGF0ZSBpbnB1dCBpcyBpbnZhbGlkICovXG4gICAgX2lzSW52YWxpZERhdGVJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZm9ybVZhbHVlU3RhdGVNZXNzYWdlSWQgPSBgZmQtZGF0ZS1waWNrZXItZm9ybS1tZXNzYWdlLSR7ZGF0ZVBpY2tlckNvdW50ZXIrK31gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJQZW5kaW5nRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNUcmFwU2VydmljZSA9IGluamVjdChGb2N1c1RyYXBTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vYmlsZUNvbXBvbmVudFJlZjogTnVsbGFibGU8Q29tcG9uZW50UmVmPERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9yYW5nZURlbGltaXRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLnJhbmdlRGVsaW1pdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERhdGUgaW5wdXQgYXJpYSBsYWJlbCBrZXkgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWxLZXkoKTogRmRMYW5ndWFnZUtleUlkZW50aWZpZXIge1xuICAgICAgICAvLyByZXR1cm4gZWl0aGVyIGlucHV0IHZhbHVlIG9yIGEga2V5IGZvciBcImZkVHJhbnNsYXRlXCIgcGlwZVxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlXG4gICAgICAgICAgICA/ICdjb3JlRGF0ZVBpY2tlci5kYXRlUmFuZ2VJbnB1dExhYmVsJ1xuICAgICAgICAgICAgOiAnY29yZURhdGVQaWNrZXIuZGF0ZUlucHV0TGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKVxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfcG9wb3ZlckZvcm1NZXNzYWdlOiBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGZvciB0aGUgcmFuZ2Ugc3RhcnQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpYWxvZ0Rpc21pc3MocHJldlZhbHVlOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc011bHRpcGxlRGF0ZVJhbmdlcyhwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgQXJyYXk8RD47XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVzQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RhdGVSYW5nZShwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgRDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZURhdGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaW5pdGlhbCB2aWV3IHNob3VsZCBiZSBtb250aCBvciB5ZWFyIGlmIGRhdGVSYW5nZUZvcm1hdCBpcyBwcm92aWRlZFxuICAgICAgICBpZiAodGhpcy5kYXRlUmFuZ2VGb3JtYXQgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IEZkQ2FsZW5kYXJWaWV3RW51bS5Nb250aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVSYW5nZUZvcm1hdCA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnaXNPcGVuJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5fY2FsZW5kYXJzLmZpcnN0O1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQgPSBjYWxlbmRhcjtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy51bnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXI/LmluaXRpYWxGb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZSBjYWxlbmRhciBhY3RpdmUgdmlldyBjaGFuZ2UgYW5kIHRocm93cyBldmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbG9zZUZyb21DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUgJiYgdGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiAhdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIGNhbGVuZGFyICovXG4gICAgb3BlbkNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE9wZW5TdGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgY2FsZW5kYXIgb3BlbiBvciBjbG9zZWQgKi9cbiAgICB0b2dnbGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRPcGVuU3RhdGUoIXRoaXMuaXNPcGVuKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBDbG9zZXMgdGhlIGNhbGVuZGFyIGlmIGl0IGlzIG9wZW4gKi9cbiAgICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0T3BlblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBzaW5nbGUgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlKTtcbiAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUoZGF0ZSk7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiB0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShkYXRlczogQXJyYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlcyB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoW10pO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KGRhdGVzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlcyk7XG4gICAgICAgIC8qKiBBc3N1bWluZyB0aGUgZmlyc3QgZGF0ZSBpbiB0aGUgYXJyYXkgaXMgdXNlZCBmb3IgcmVmcmVzaCAqL1xuICAgICAgICBpZiAodGhpcy5zaG93VG9kYXlCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5mb3JtYXREYXRlQXJyYXkoZGF0ZXMpO1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBoYW5kbGVSYW5nZURhdGVDaGFuZ2UoZGF0ZXM6IERhdGVSYW5nZTxEPik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENoYW5nZWQgPSAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZXMuc3RhcnQsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRDaGFuZ2VkID0gIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzLmVuZCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpO1xuICAgICAgICBpZiAoZGF0ZXMgJiYgKHN0YXJ0Q2hhbmdlZCB8fCBlbmRDaGFuZ2VkKSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xvc2UgPSB0aGlzLmNsb3NlT25EYXRlQ2hvb3NlICYmIGRhdGVzLmVuZCAhPT0gbnVsbDtcbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGVzLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IGRhdGVzLmVuZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlcy5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSByYW5nZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKGRhdGVzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGRhdGUgcmFuZ2VzXG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggIT09IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlc1tpXS5zdGFydCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5zdGFydCkgfHxcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzW2ldLmVuZCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5lbmQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgZGF0ZSByYW5nZSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZSBhbmQgZW1pdCBjaGFuZ2VzXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZXM7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZm9ybWF0dGVkIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlcyk7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuXG4gICAgICAgICAgICAvLyBQZXJmb3JtIGFueSBhZGRpdGlvbmFsIGFjdGlvbnMgc3VjaCBhcyB1cGRhdGluZyB0aGUgbW9kZWwgb3IgcmVmcmVzaGluZyB0aGUgY2FsZW5kYXJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICAvLyBpZiB5b3Ugd2FudCB0byByZWZyZXNoIHRoZSBjYWxlbmRhciB2aWV3LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGVzWzBdLnN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgZm9ybWF0SW5wdXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiBjbGlja2VkLCBpdCBjaGFuZ2VzIHNlbGVjdGVkIGRhdGUgb3IgZGF0ZSByYW5nZSB0byB0b2RheSdzIGRhdGVcbiAgICAgKi9cbiAgICBvblRvZGF5QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5RGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShbdG9kYXlEYXRlXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUZyb21DYWxlbmRhcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZShbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0b2RheURhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZSh0b2RheURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VGcm9tQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdG9kYXlEYXRlLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0IGlucHV0IGlzIGNvbmZpcm1lZCB0byBiYSBjaGFuZ2VkLCBieSBjbGlja2luZyBlbnRlciwgb3IgYmx1clxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0Q2hhbmdlKHN0ckRhdGU6IHN0cmluZywgaXNUeXBlRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKChpc1R5cGVFdmVudCAmJiB0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikgfHwgKCFpc1R5cGVFdmVudCAmJiAhdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpKSB7XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IHRydWUsIGlnbm9yZSB0eXBlIGV2ZW50XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IGZhbHNlLCBpZ25vcmUgYmx1ci9lbnRlciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVN0cmluZ1VwZGF0ZShzdHJEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhbGlkKClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShcbiAgICAgICAgZm46IChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgICAgICB2b2lkO1xuICAgICAgICB9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciB0aGF0IGFsbG93cyB0byB1c2UgWyhuZ01vZGVsKV0gb3IgZm9ybXNcbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHNlbGVjdGVkOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvKiogSWYgd3JpdHRlbiB2YWx1ZSBpcyBub3QgZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nICovXG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZW5kOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gPEFycmF5PEQ+PnNlbGVjdGVkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZUFycmF5KHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBBcnJheTxEYXRlUmFuZ2U8RD4+O1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmFuZ2VzID0gc2VsZWN0ZWQuZmlsdGVyKChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgIT09IG51bGwgJiYgcmFuZ2UuZW5kICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBmaWx0ZXJlZFJhbmdlcy5tYXAoKHJhbmdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUocmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKHJhbmdlLmVuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZmlsdGVyZWRSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXRNdWx0aXBsZURhdGVSYW5nZXMoZmlsdGVyZWRSYW5nZXMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKSBhcyBEO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkPy5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5zdGFydCksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5lbmQpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoc2VsZWN0ZWQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmb3JtaW5nIHN0cmluZyB0byBkYXRlLCBkZXBlbmRpbmcgb24gdHlwZSBvclxuICAgICAqIHZhbGlkYXRpb24gdGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiBfaXNJbnZhbGlkRGF0ZUlucHV0XG4gICAgICovXG4gICAgZGF0ZVN0cmluZ1VwZGF0ZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBkYXRlU3RyO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTXVsdGlwbGVEYXRlUmFuZ2VzKGRhdGVTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVSYW5nZURhdGUoZGF0ZVN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgbW9kZWwgc2VsZWN0ZWQgZGF0ZS9kYXRlcyBoYXZlIHByb3Blcmx5IHR5cGVzIGFuZCBhcmUgdmFsaWQgKi9cbiAgICBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIGdldFNlbGVjdGVkRGF0ZSgpOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlIHx8IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzIHx8IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2Uuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuU3RhdGVDaGFuZ2VkKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIC8vIGZvY3VzIGlucHV0IGNvbnRyb2wgZXZlcnkgdGltZSBwb3B1cCBpcyBjbG9zZWRcbiAgICAgICAgaWYgKCFpc09wZW4gJiYgdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdGhpcy5wcmV2ZW50U2Nyb2xsT25Gb2N1c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXJzIHRoZSBjYWxlbmRhciByaWdodCBiZWZvcmUgdGhlIHBvcG92ZXIgaXMgb3BlbmVkLlxuICAgICAqIFVzZWQgZm9yIGNvcnJlY3QgY2FsY3VsYXRpb25zIG9mIG92ZXJsYXkgcG9zaXRpb24gYW5kIHNpemUuXG4gICAgICovXG4gICAgX2JlZm9yZVBvcG92ZXJPcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIGFueSkudmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIG11bHRpcGxlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc011bHRpcGxlTW9kZWxWYWxpZChkYXRlczogQXJyYXk8TnVsbGFibGU8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkYXRlcz8uZXZlcnkoKGRhdGUpID0+IHRoaXMuX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNSYW5nZU1vZGVsVmFsaWQoZmRSYW5nZURhdGU6IERhdGVSYW5nZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZkUmFuZ2VEYXRlICYmIHRoaXMuX2lzU3RhcnREYXRlVmFsaWQoZmRSYW5nZURhdGUuc3RhcnQpICYmIHRoaXMuX2lzRW5kRGF0ZVZhbGlkKGZkUmFuZ2VEYXRlLmVuZCkpIHx8XG4gICAgICAgICAgICAoIWZkUmFuZ2VEYXRlLnN0YXJ0ICYmICFmZFJhbmdlRGF0ZS5lbmQgJiYgdGhpcy5hbGxvd051bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBtdWx0aXBsZSByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNNdWx0aXBsZVJhbmdlc01vZGVsVmFsaWQocmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmFuZ2VzIHx8IHJhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzLmV2ZXJ5KChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kICYmIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHJhbmdlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBlbmQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRW5kRGF0ZVZhbGlkKGVuZERhdGU6IE51bGxhYmxlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RhdGVWYWxpZChlbmREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbihlbmREYXRlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHN0YXJ0IGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1N0YXJ0RGF0ZVZhbGlkKHN0YXJ0RGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKHN0YXJ0RGF0ZSkgJiYgIXRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbihzdGFydERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgZ2l2ZW4gZGF0ZSBtb2RlbCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRGF0ZVZhbGlkKGRhdGU6IE51bGxhYmxlPEQ+KTogZGF0ZSBpcyBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclBlbmRpbmdEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQ/LnNldEN1cnJlbnRseURpc3BsYXllZChkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUFycmF5KGRhdGVzOiBBcnJheTxEPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkYXRlcy5tYXAoKGRhdGUpID0+IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZSkpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZURhdGUoZGF0ZTogdW5rbm93bik6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHBhcnNlIGEgZGF0ZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBkYXRlcy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cjogc3RyaW5nKTogRFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGVTdHJcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChkYXRlKSA9PiB0aGlzLl9wYXJzZURhdGUoZGF0ZS50cmltKCkpKVxuICAgICAgICAgICAgLmZpbHRlcigoZGF0ZSkgPT4gZGF0ZSAhPT0gbnVsbCkgYXMgRFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RGF0ZVJhbmdlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZSArIHRoaXMuX3JhbmdlRGVsaW1pdGVyICsgZW5kRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlUmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGRhdGVSYW5nZXMubWFwKChkYXRlUmFuZ2UpID0+IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlUmFuZ2UpKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5pbml0KHRoaXMuX2lucHV0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VQb3BvdmVyVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRPcGVuU3RhdGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSBpc09wZW47XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogeyBjYWxlbmRhclRlbXBsYXRlOiB0aGlzLl9jYWxlbmRhclRlbXBsYXRlLCBjb250cm9sVGVtcGxhdGU6IHRoaXMuX2NvbnRyb2xUZW1wbGF0ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlQ29tcG9uZW50UmVmID0gdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY0NvbXBvbmVudChcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlUmFuZ2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLnN0YXJ0ICYmIHZhbHVlLmVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzTXVsdGlwbGVEYXRlUmFuZ2VzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0aGlzLl9pc0RhdGVSYW5nZShpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGZyb20gYSBkYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fcGFyc2VEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKGRhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIHJhbmdlIGRhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlUmFuZ2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3N0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0cl0gPSBkYXRlU3RyLnNwbGl0KHRoaXMuX3JhbmdlRGVsaW1pdGVyKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fcGFyc2VEYXRlKHN0YXJ0RGF0ZVN0cik7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLl9wYXJzZURhdGUoZW5kRGF0ZVN0cik7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHN0YXJ0RGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgfHxcbiAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChlbmREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGVuZERhdGUpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGVuZERhdGUsIGVuZDogc3RhcnREYXRlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogc3RhcnREYXRlLCBlbmQ6IGVuZERhdGUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0YXJ0RGF0ZVZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWREYXRlcyA9IHRoaXMucGFyc2VEYXRlU3RyaW5nKGRhdGVTdHIpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIGRhdGVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBkYXRlc1xuICAgICAgICBjb25zdCBkYXRlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZXNFcXVhbChwYXJzZWREYXRlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuXG4gICAgICAgIGlmIChkYXRlc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc011bHRpcGxlTW9kZWxWYWxpZChwYXJzZWREYXRlcyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShwYXJzZWREYXRlc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gcGFyc2VkRGF0ZXM7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gY29tcGFyZSB0d28gYXJyYXlzIG9mIGRhdGVzICovXG4gICAgcHJpdmF0ZSBfYXJlRGF0ZXNFcXVhbChkYXRlczE6IERbXSwgZGF0ZXMyOiBEW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRhdGVzMS5sZW5ndGggIT09IGRhdGVzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZXMxLmV2ZXJ5KChkYXRlLCBpbmRleCkgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgZGF0ZXMyW2luZGV4XSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlIHJhbmdlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGUgcmFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZU11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gW3sgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9XTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFuZ2VTdHJpbmdzID0gZGF0ZVN0ci5zcGxpdCgnLCcpLm1hcCgocmFuZ2UpID0+IHJhbmdlLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJhbmdlcyA9IHJhbmdlU3RyaW5ncy5tYXAoKHJhbmdlU3RyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnRTdHIsIGVuZFN0cl0gPSByYW5nZVN0ci5zcGxpdCh0aGlzLl9yYW5nZURlbGltaXRlcikubWFwKChkYXRlKSA9PiBkYXRlLnRyaW0oKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUoc3RhcnRTdHIpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKGVuZFN0cilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIHJhbmdlcyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcmFuZ2VzXG4gICAgICAgIGNvbnN0IHJhbmdlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZVJhbmdlc0VxdWFsKHBhcnNlZFJhbmdlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG5cbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHBhcnNlZFJhbmdlcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgJiYgcmFuZ2VzQ2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzU3RhcnREYXRlVmFsaWQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1swXS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyA9IHBhcnNlZFJhbmdlcztcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGVscGVyIG1ldGhvZCB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZGF0ZSByYW5nZXMgKi9cbiAgICBwcml2YXRlIF9hcmVEYXRlUmFuZ2VzRXF1YWwocmFuZ2VzMTogRGF0ZVJhbmdlPEQ+W10sIHJhbmdlczI6IERhdGVSYW5nZTxEPltdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyYW5nZXMxLmxlbmd0aCAhPT0gcmFuZ2VzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzMS5ldmVyeShcbiAgICAgICAgICAgIChyYW5nZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwocmFuZ2Uuc3RhcnQsIHJhbmdlczJbaW5kZXhdLnN0YXJ0KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHJhbmdlLmVuZCwgcmFuZ2VzMltpbmRleF0uZW5kKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBjb250cm9sVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwb3BvdmVyTWVzc2FnZVRlbXBsYXRlPlxuICAgIEBpZiAoX21lc3NhZ2UpIHtcbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbZW1iZWRkZWRdPVwidHJ1ZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChiZWZvcmVPcGVuKT1cIl9iZWZvcmVQb3BvdmVyT3BlbigpXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJfb25PcGVuU3RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCI+XG4gICAgICAgICAgICBAaWYgKF9zaG93UG9wb3ZlckNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBvcG92ZXJNZXNzYWdlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsZW5kYXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBnbHlwaD1cImFwcG9pbnRtZW50LTJcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ2NvcmVEYXRlUGlja2VyLmRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCInY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0XCJcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImdyaWRcIlxuICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9kYXRlSW5wdXRBcmlhbExhYmVsS2V5IHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJfaW5wdXRGaWVsZERhdGVcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5mNCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfb25CbHVyKCRldmVudClcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhclRlbXBsYXRlPlxuICAgIDxmZC1jYWxlbmRhclxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICBbYWxsb3dNdWx0aXBsZVNlbGVjdGlvbl09XCJhbGxvd011bHRpcGxlU2VsZWN0aW9uXCJcbiAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICBbY2FsVHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvblwiXG4gICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgW3NlbGVjdGVkTXVsdGlwbGVEYXRlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZXNcIlxuICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICBbc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNdPVwic2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNcIlxuICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwic3RhcnRpbmdEYXlPZldlZWtcIlxuICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwicHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW3Nob3dDYWxlbmRhckxlZ2VuZF09XCJzaG93Q2FsZW5kYXJMZWdlbmQoKVwiXG4gICAgICAgIFtsZWdlbmRDb2xdPVwibGVnZW5kQ29sKClcIlxuICAgICAgICBbbW9iaWxlTGFuZHNjYXBlXT1cIm1vYmlsZSAmJiBtb2JpbGVMYW5kc2NhcGVcIlxuICAgICAgICBbbW9iaWxlUG9ydHJhaXRdPVwibW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0XCJcbiAgICAgICAgW2RhdGVSYW5nZUZvcm1hdF09XCJkYXRlUmFuZ2VGb3JtYXRcIlxuICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cImhhbmRsZVNpbmdsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UpPVwiaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlKT1cImhhbmRsZVJhbmdlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKT1cImhhbmRsZU11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGFjdGl2ZVZpZXdDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2xvc2VDYWxlbmRhcik9XCJjbG9zZUZyb21DYWxlbmRhcigpXCJcbiAgICA+PC9mZC1jYWxlbmRhcj5cbiAgICBAaWYgKHNob3dUb2RheUJ1dHRvbikge1xuICAgICAgICA8ZGl2IGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIiBjbGFzcz1cImZkLWRhdGUtcGlja2VyX19iYXJcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRvZGF5QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48ZGl2IFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX2Zvcm1WYWx1ZVN0YXRlTWVzc2FnZUlkXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICAgIEBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAge3sgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdpbmZvcm1hdGlvbicpIHtcbiAgICAgICAgICAgICAgICB7eyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCd3YXJuaW5nJykge1xuICAgICAgICAgICAgICAgIHt7ICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAge3sgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { DatePickerComponent } from './date-picker.component';\nimport * as i0 from \"@angular/core\";\nexport class DatePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent], exports: [DatePickerComponent, DatePickerMobileComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [DatePickerComponent, DatePickerMobileComponent],\n exports: [DatePickerComponent, DatePickerMobileComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU05RCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5QixhQUM5QyxtQkFBbUIsRUFBRSx5QkFBeUI7K0dBRS9DLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5Qjs7MkZBRy9DLGdCQUFnQjtrQkFKNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDekQsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLENBQUM7aUJBQzVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbW9iaWxlL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudCwgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0RhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZS1waWNrZXIvZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|