@fundamental-ngx/core 0.36.1-rc.17 → 0.36.1-rc.18
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/calendar.component.d.ts +6 -3
- package/date-picker/date-picker.component.d.ts +2 -0
- package/esm2020/calendar/calendar.component.mjs +14 -11
- package/esm2020/combobox/combobox.component.mjs +4 -6
- package/esm2020/date-picker/date-picker.component.mjs +12 -5
- package/esm2020/datetime-picker/datetime-picker.component.mjs +4 -7
- package/esm2020/input-group/input-group.component.mjs +11 -4
- package/esm2020/multi-input/multi-input.component.mjs +9 -4
- package/esm2020/segmented-button/segmented-button.component.mjs +15 -8
- package/esm2020/slider/slider.component.mjs +5 -4
- package/esm2020/step-input/step-input.component.mjs +14 -10
- package/esm2020/switch/switch.component.mjs +4 -4
- package/esm2020/time/time.component.mjs +14 -6
- package/esm2020/time-picker/time-picker.component.mjs +13 -5
- package/fesm2015/fundamental-ngx-core-calendar.mjs +12 -9
- package/fesm2015/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-combobox.mjs +3 -5
- package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-date-picker.mjs +11 -4
- package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +3 -6
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-input-group.mjs +10 -3
- package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-multi-input.mjs +8 -3
- package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-segmented-button.mjs +13 -6
- package/fesm2015/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-slider.mjs +4 -3
- package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-step-input.mjs +13 -9
- package/fesm2015/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-switch.mjs +3 -3
- package/fesm2015/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-time-picker.mjs +12 -4
- package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-time.mjs +12 -4
- package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-calendar.mjs +12 -9
- package/fesm2020/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-combobox.mjs +3 -5
- package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-date-picker.mjs +11 -4
- package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +3 -6
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-input-group.mjs +10 -3
- package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-multi-input.mjs +8 -3
- package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-segmented-button.mjs +13 -6
- package/fesm2020/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-slider.mjs +4 -3
- package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-step-input.mjs +13 -9
- package/fesm2020/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-switch.mjs +3 -3
- package/fesm2020/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-time-picker.mjs +12 -4
- package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-time.mjs +12 -4
- package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/fundamental-ngx-core-v0.36.1-rc.18.tgz +0 -0
- package/input-group/input-group.component.d.ts +2 -0
- package/multi-input/multi-input.component.d.ts +2 -0
- package/package.json +2 -2
- package/segmented-button/segmented-button.component.d.ts +5 -2
- package/step-input/step-input.component.d.ts +3 -2
- package/time/time.component.d.ts +6 -3
- package/time-picker/time-picker.component.d.ts +5 -2
- package/fundamental-ngx-core-v0.36.1-rc.17.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor, Validator } from '@angular/forms';
|
|
3
3
|
import { DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';
|
|
4
4
|
import { Nullable, SpecialDayRule } from '@fundamental-ngx/core/shared';
|
|
@@ -27,6 +27,7 @@ import * as i0 from "@angular/core";
|
|
|
27
27
|
*
|
|
28
28
|
*/
|
|
29
29
|
export declare class CalendarComponent<D> implements OnInit, OnChanges, ControlValueAccessor, Validator, OnDestroy {
|
|
30
|
+
private _elementRef;
|
|
30
31
|
private _changeDetectorRef;
|
|
31
32
|
private _contentDensityObserver;
|
|
32
33
|
private _dateTimeAdapter;
|
|
@@ -149,7 +150,7 @@ export declare class CalendarComponent<D> implements OnInit, OnChanges, ControlV
|
|
|
149
150
|
/** @hidden */
|
|
150
151
|
onTouched: () => void;
|
|
151
152
|
/** @hidden */
|
|
152
|
-
constructor(_changeDetectorRef: ChangeDetectorRef, _contentDensityObserver: ContentDensityObserver, _dateTimeAdapter: DatetimeAdapter<D>, _dateTimeFormats: DateTimeFormats);
|
|
153
|
+
constructor(_elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _contentDensityObserver: ContentDensityObserver, _dateTimeAdapter: DatetimeAdapter<D>, _dateTimeFormats: DateTimeFormats);
|
|
153
154
|
/** @hidden */
|
|
154
155
|
ngOnInit(): void;
|
|
155
156
|
/** @hidden */
|
|
@@ -247,6 +248,8 @@ export declare class CalendarComponent<D> implements OnInit, OnChanges, ControlV
|
|
|
247
248
|
private _getActiveFocusableView;
|
|
248
249
|
/** @hidden */
|
|
249
250
|
private _setNavigationButtonsStates;
|
|
250
|
-
|
|
251
|
+
/** @hidden */
|
|
252
|
+
private _focusOut;
|
|
253
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarComponent<any>, [null, null, null, { optional: true; }, { optional: true; }]>;
|
|
251
254
|
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarComponent<any>, "fd-calendar", never, { "selectedDate": "selectedDate"; "markWeekends": "markWeekends"; "showWeekNumbers": "showWeekNumbers"; "mobileLandscape": "mobileLandscape"; "mobilePortrait": "mobilePortrait"; "selectedRangeDate": "selectedRangeDate"; "activeView": "activeView"; "startingDayOfWeek": "startingDayOfWeek"; "calType": "calType"; "id": "id"; "specialDaysRules": "specialDaysRules"; "yearGrid": "yearGrid"; "aggregatedYearGrid": "aggregatedYearGrid"; "rangeHoverEffect": "rangeHoverEffect"; "previousButtonDisableFunction": "previousButtonDisableFunction"; "nextButtonDisableFunction": "nextButtonDisableFunction"; "escapeFocusFunction": "escapeFocusFunction"; "disableFunction": "disableFunction"; "disableRangeStartFunction": "disableRangeStartFunction"; "disableRangeEndFunction": "disableRangeEndFunction"; }, { "activeViewChange": "activeViewChange"; "selectedDateChange": "selectedDateChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "isValidDateChange": "isValidDateChange"; "closeCalendar": "closeCalendar"; "closeClicked": "closeClicked"; }, never, never, false>;
|
|
252
255
|
}
|
|
@@ -304,6 +304,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
304
304
|
_changeMessageVisibility(): void;
|
|
305
305
|
/** @hidden */
|
|
306
306
|
_onOpenStateChanged(isOpen: boolean): void;
|
|
307
|
+
/** @hidden */
|
|
308
|
+
_onBlur(event: FocusEvent): void;
|
|
307
309
|
/** Method that returns info if single model given is valid */
|
|
308
310
|
private _isSingleModelValid;
|
|
309
311
|
/** Method that returns info if range date model given is valid */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostBinding, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
3
|
import { Subscription } from 'rxjs';
|
|
4
4
|
import { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
|
|
@@ -34,9 +34,10 @@ let calendarUniqueId = 0;
|
|
|
34
34
|
*/
|
|
35
35
|
export class CalendarComponent {
|
|
36
36
|
/** @hidden */
|
|
37
|
-
constructor(_changeDetectorRef, _contentDensityObserver,
|
|
37
|
+
constructor(_elementRef, _changeDetectorRef, _contentDensityObserver,
|
|
38
38
|
// Use @Optional to avoid angular injection error message and throw our own which is more precise one
|
|
39
39
|
_dateTimeAdapter, _dateTimeFormats) {
|
|
40
|
+
this._elementRef = _elementRef;
|
|
40
41
|
this._changeDetectorRef = _changeDetectorRef;
|
|
41
42
|
this._contentDensityObserver = _contentDensityObserver;
|
|
42
43
|
this._dateTimeAdapter = _dateTimeAdapter;
|
|
@@ -236,7 +237,6 @@ export class CalendarComponent {
|
|
|
236
237
|
this.selectedDate = date;
|
|
237
238
|
this._setNavigationButtonsStates();
|
|
238
239
|
this.onChange(date);
|
|
239
|
-
this.onTouched();
|
|
240
240
|
this.selectedDateChange.emit(date);
|
|
241
241
|
this.closeCalendar.emit();
|
|
242
242
|
}
|
|
@@ -249,7 +249,6 @@ export class CalendarComponent {
|
|
|
249
249
|
this.selectedRangeDate = { start: dates.start, end: dates.end ? dates.end : dates.start };
|
|
250
250
|
this.selectedRangeDateChange.emit(this.selectedRangeDate);
|
|
251
251
|
this.onChange(this.selectedRangeDate);
|
|
252
|
-
this.onTouched();
|
|
253
252
|
this.closeCalendar.emit();
|
|
254
253
|
}
|
|
255
254
|
}
|
|
@@ -269,7 +268,6 @@ export class CalendarComponent {
|
|
|
269
268
|
this.displayNextYearsList();
|
|
270
269
|
break;
|
|
271
270
|
}
|
|
272
|
-
this.onTouched();
|
|
273
271
|
this._setNavigationButtonsStates();
|
|
274
272
|
}
|
|
275
273
|
/** Function that handles previous arrow icon click, depending on current view it changes month, year or list of years */
|
|
@@ -288,7 +286,6 @@ export class CalendarComponent {
|
|
|
288
286
|
this.displayPreviousYearsList();
|
|
289
287
|
break;
|
|
290
288
|
}
|
|
291
|
-
this.onTouched();
|
|
292
289
|
this._setNavigationButtonsStates();
|
|
293
290
|
}
|
|
294
291
|
/** Function that allows to switch actual view to next month */
|
|
@@ -476,9 +473,15 @@ export class CalendarComponent {
|
|
|
476
473
|
this.nextButtonDisableFunction(this.selectedDate, this._currentlyDisplayed, this.activeView);
|
|
477
474
|
this._changeDetectorRef.markForCheck();
|
|
478
475
|
}
|
|
476
|
+
/** @hidden */
|
|
477
|
+
_focusOut(event) {
|
|
478
|
+
if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {
|
|
479
|
+
this.onTouched();
|
|
480
|
+
}
|
|
481
|
+
}
|
|
479
482
|
}
|
|
480
|
-
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CalendarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
481
|
-
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: CalendarComponent, selector: "fd-calendar", inputs: { selectedDate: "selectedDate", markWeekends: "markWeekends", showWeekNumbers: "showWeekNumbers", mobileLandscape: "mobileLandscape", mobilePortrait: "mobilePortrait", selectedRangeDate: "selectedRangeDate", activeView: "activeView", startingDayOfWeek: "startingDayOfWeek", calType: "calType", id: "id", specialDaysRules: "specialDaysRules", yearGrid: "yearGrid", aggregatedYearGrid: "aggregatedYearGrid", rangeHoverEffect: "rangeHoverEffect", previousButtonDisableFunction: "previousButtonDisableFunction", nextButtonDisableFunction: "nextButtonDisableFunction", escapeFocusFunction: "escapeFocusFunction", disableFunction: "disableFunction", disableRangeStartFunction: "disableRangeStartFunction", disableRangeEndFunction: "disableRangeEndFunction" }, outputs: { activeViewChange: "activeViewChange", selectedDateChange: "selectedDateChange", selectedRangeDateChange: "selectedRangeDateChange", isValidDateChange: "isValidDateChange", closeCalendar: "closeCalendar", closeClicked: "closeClicked" }, host: { listeners: { "
|
|
483
|
+
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CalendarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
484
|
+
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: CalendarComponent, selector: "fd-calendar", inputs: { selectedDate: "selectedDate", markWeekends: "markWeekends", showWeekNumbers: "showWeekNumbers", mobileLandscape: "mobileLandscape", mobilePortrait: "mobilePortrait", selectedRangeDate: "selectedRangeDate", activeView: "activeView", startingDayOfWeek: "startingDayOfWeek", calType: "calType", id: "id", specialDaysRules: "specialDaysRules", yearGrid: "yearGrid", aggregatedYearGrid: "aggregatedYearGrid", rangeHoverEffect: "rangeHoverEffect", previousButtonDisableFunction: "previousButtonDisableFunction", nextButtonDisableFunction: "nextButtonDisableFunction", escapeFocusFunction: "escapeFocusFunction", disableFunction: "disableFunction", disableRangeStartFunction: "disableRangeStartFunction", disableRangeEndFunction: "disableRangeEndFunction" }, outputs: { activeViewChange: "activeViewChange", selectedDateChange: "selectedDateChange", selectedRangeDateChange: "selectedRangeDateChange", isValidDateChange: "isValidDateChange", closeCalendar: "closeCalendar", closeClicked: "closeClicked" }, host: { listeners: { "focusout": "_focusOut($event)" }, properties: { "attr.id": "id", "class.fd-calendar--mobile-landscape": "this.mobileLandscape", "class.fd-calendar--mobile-portrait": "this.mobilePortrait" }, classAttribute: "fd-calendar fd-has-display-block" }, providers: [
|
|
482
485
|
{
|
|
483
486
|
provide: NG_VALUE_ACCESSOR,
|
|
484
487
|
useExisting: forwardRef(() => CalendarComponent),
|
|
@@ -516,11 +519,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
516
519
|
}
|
|
517
520
|
})
|
|
518
521
|
], host: {
|
|
519
|
-
'(
|
|
522
|
+
'(focusout)': '_focusOut($event)',
|
|
520
523
|
'[attr.id]': 'id',
|
|
521
524
|
class: 'fd-calendar fd-has-display-block'
|
|
522
525
|
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-calendar-header\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [activeView]=\"activeView\"\n [id]=\"id\"\n [calendarYearGrid]=\"yearGrid\"\n [mobileLandscape]=\"mobileLandscape\"\n (closeClicked)=\"closeClicked.emit()\"\n (nextClicked)=\"handleNextArrowClick()\"\n (previousClicked)=\"handlePreviousArrowClick()\"\n [previousButtonDisabled]=\"previousButtonDisabled\"\n [nextButtonDisabled]=\"nextButtonDisabled\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n></fd-calendar-header>\n<ng-container [ngSwitch]=\"activeView\" *ngIf=\"_currentlyDisplayed\">\n <div\n class=\"fd-calendar__content\"\n [class.fd-calendar__content--dates]=\"activeView === 'day'\"\n [class.fd-calendar__content--months]=\"activeView === 'month'\"\n [class.fd-calendar__content--years]=\"activeView === 'year' || activeView === 'aggregatedYear'\"\n >\n <fd-calendar-day-view\n *ngSwitchCase=\"'day'\"\n [selectedDate]=\"selectedDate\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [markWeekends]=\"markWeekends\"\n (selectedDateChange)=\"selectedDateChanged($event)\"\n [selectedRangeDate]=\"selectedRangeDate\"\n (selectedRangeDateChange)=\"selectedRangeDateChanged($event)\"\n [currentlyDisplayed]=\"_currentlyDisplayed\"\n [startingDayOfWeek]=\"getWeekStartDay()\"\n [disableFunction]=\"disableFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [calType]=\"calType\"\n [id]=\"id\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [specialDaysRules]=\"specialDaysRules\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n (nextMonthSelect)=\"displayNextMonth()\"\n (previousMonthSelect)=\"displayPreviousMonth()\"\n ></fd-calendar-day-view>\n <fd-calendar-month-view\n *ngSwitchCase=\"'month'\"\n [monthSelected]=\"_currentlyDisplayed.month\"\n [year]=\"_currentlyDisplayed.year\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n (monthClicked)=\"handleMonthViewChange($event)\"\n ></fd-calendar-month-view>\n <fd-calendar-year-view\n *ngSwitchCase=\"'year'\"\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n (yearClicked)=\"selectedYear($event)\"\n >\n </fd-calendar-year-view>\n <fd-calendar-aggregated-year-view\n *ngSwitchCase=\"'aggregatedYear'\"\n (yearsClicked)=\"selectedYears($event)\"\n [yearSelected]=\"_currentlyDisplayed.year\"\n [yearViewGrid]=\"yearGrid\"\n [aggregatedYearsViewGrid]=\"aggregatedYearGrid\"\n [id]=\"id\"\n [focusEscapeFunction]=\"escapeFocusFunction\"\n >\n </fd-calendar-aggregated-year-view>\n </div>\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.25.0-rc.16\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *//*!\n.fd-calendar+(--compact, --mobile-landscape, --mobile-portrait)\n .fd-calendar__header\n .fd-calendar__navigation(--main-navigation)\n .fd-calendar__action(+[--arrow-left, --arrow-right])\n .fd-calendar__close-button--navigation\n .fd-calendar__content(+[--months, --years])\n .fd-calendar__table\n .fd-calendar__group\n .fd-calendar__row\n .fd-calendar__item(+[--other-month, --current, --side-helper, --weekend, --range],\n +[(.is-disabled | [aria-disabled=true]), (.is-focus | [aria-focus=true]), (.is-active | [aria-active=true])])\n .fd-calendar__special-day(+[--1, --2, ..., --19, --20])\n .fd-calendar__text\n*/.fd-calendar .fd-calendar__item{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 1 .375rem;background-color:var(--sapLegend_WorkingBackground);border:0;border-radius:var(--fdCalendar_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);cursor:pointer;flex:1 1 .375rem;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:2.75rem;line-height:var(--sapContent_LineHeight);margin:.0625rem;min-width:2.125rem;overflow:hidden;padding:0;position:relative}.fd-calendar .fd-calendar__item:after,.fd-calendar .fd-calendar__item:before{box-sizing:inherit;font-size:inherit}.fd-calendar .fd-calendar__item:hover,.fd-calendar .is-hover.fd-calendar__item{background-color:var(--sapList_Hover_Background)}.fd-calendar__content--dates .fd-calendar__item--side-helper{align-self:center;background-color:var(--sapList_Background);height:1.875rem;pointer-events:none}.fd-calendar__content--dates .fd-calendar__item--other-month{background-color:var(--sapList_Background)}.fd-calendar__content--dates .fd-calendar__item--other-month:hover,.fd-calendar__content--dates .is-hover.fd-calendar__item--other-month{background-color:var(--sapList_Hover_Background)}.fd-calendar__content--dates .fd-calendar__item--weekend{background-color:var(--sapLegend_NonWorkingBackground)}.fd-calendar__content--dates .fd-calendar__item--weekend:hover,.fd-calendar__content--dates .is-hover.fd-calendar__item--weekend{background-color:var(--sapList_Hover_Background)}.fd-calendar .fd-calendar__item--current,.fd-calendar__content--dates .fd-calendar__item--range.fd-calendar__item--current{border:solid var(--sapLegend_CurrentDateTime)!important}.fd-calendar .fd-calendar__item--current:active:after,.fd-calendar .is-active.fd-calendar__item--current:after,.fd-calendar__content--dates .fd-calendar__item--range.fd-calendar__item--current:active:after,.fd-calendar__content--dates .is-active.fd-calendar__item--range.fd-calendar__item--current:after{border:var(--fdCalendar_Active_Item_Border);border-radius:calc(var(--fdCalendar_Border_Radius) / 2);bottom:.0625rem;content:\" \";height:calc(100% - .125rem);left:.0625rem;position:absolute;right:auto;width:calc(100% - .125rem)}.fd-calendar .fd-calendar__item--current:active:after[dir=rtl],.fd-calendar .is-active.fd-calendar__item--current:after[dir=rtl],.fd-calendar [dir=rtl] .fd-calendar__item--current:active:after,.fd-calendar [dir=rtl] .is-active.fd-calendar__item--current:after,.fd-calendar__content--dates .fd-calendar__item--range.fd-calendar__item--current:active:after[dir=rtl],.fd-calendar__content--dates .is-active.fd-calendar__item--range.fd-calendar__item--current:after[dir=rtl],.fd-calendar__content--dates [dir=rtl] .fd-calendar__item--range.fd-calendar__item--current:active:after,.fd-calendar__content--dates [dir=rtl] .is-active.fd-calendar__item--range.fd-calendar__item--current:after,[dir=rtl] .fd-calendar .fd-calendar__item--current:active:after,[dir=rtl] .fd-calendar .is-active.fd-calendar__item--current:after,[dir=rtl] .fd-calendar__content--dates .fd-calendar__item--range.fd-calendar__item--current:active:after,[dir=rtl] .fd-calendar__content--dates .is-active.fd-calendar__item--range.fd-calendar__item--current:after{left:auto;right:.0625rem}.fd-calendar__content--dates .fd-calendar__item.is-active,.fd-calendar__content--dates .fd-calendar__item:active{background-color:var(--sapContent_Selected_Background);border:var(--fdCalendar_Active_Item_Border);font-weight:var(--fdCalendar_Active_Item_Font_Weight)}.fd-calendar__content--dates .fd-calendar__item.is-active:hover,.fd-calendar__content--dates .fd-calendar__item:hover:active,.fd-calendar__content--dates .is-hover.fd-calendar__item.is-active,.fd-calendar__content--dates .is-hover.fd-calendar__item:active{background-color:var(--fdCalendar_Item_Active_Background_Hover)}.fd-calendar__content--dates .fd-calendar__item.is-active:focus,.fd-calendar__content--dates .fd-calendar__item:focus:active,.fd-calendar__content--dates .is-focus.fd-calendar__item.is-active,.fd-calendar__content--dates .is-focus.fd-calendar__item:active{box-shadow:none;outline-color:var(--fdCalendar_Active_Focus_Item_Outline_Color);z-index:5}.fd-calendar__content--dates .fd-calendar__item--range{background-color:var(--sapList_SelectionBackgroundColor);border:.0625rem solid var(--sapList_SelectionBorderColor)}.fd-calendar__content--dates .fd-calendar__item--range:hover,.fd-calendar__content--dates .is-hover.fd-calendar__item--range{background-color:var(--sapList_Hover_SelectionBackground)}.fd-calendar__content--dates .fd-calendar__item.is-disabled,.fd-calendar__content--dates .fd-calendar__item:disabled,.fd-calendar__content--dates .fd-calendar__item[aria-disabled=true]{opacity:.4;pointer-events:none}.fd-calendar__content--dates .fd-calendar__item.is-disabled:hover,.fd-calendar__content--dates .fd-calendar__item:hover:disabled,.fd-calendar__content--dates .fd-calendar__item[aria-disabled=true]:hover{cursor:not-allowed}.fd-calendar__content--dates .fd-calendar__item.is-focus,.fd-calendar__content--dates .fd-calendar__item:focus{box-shadow:none;outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth);outline-offset:-.1875rem}.fd-calendar__text{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0;text-shadow:var(--fdCalendar_Text_Shadow)}.fd-calendar__text:after,.fd-calendar__text:before{box-sizing:inherit;font-size:inherit}.fd-calendar{-webkit-box-sizing:border-box;background-color:var(--sapList_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:1rem;width:20rem}.fd-calendar:after,.fd-calendar:before{box-sizing:inherit;font-size:inherit}.fd-calendar__header{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative}.fd-calendar__header:after,.fd-calendar__header:before{box-sizing:inherit;font-size:inherit}.fd-calendar__navigation{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem 0;width:100%}.fd-calendar__navigation:after,.fd-calendar__navigation:before{box-sizing:inherit;font-size:inherit}.fd-calendar__action{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex-positive:1;border:0;box-sizing:border-box;color:var(--sapTextColor);flex-grow:1;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-calendar__action:after,.fd-calendar__action:before{box-sizing:inherit;font-size:inherit}.fd-calendar__action:not(:last-child):not(:first-child){margin-left:.25rem;margin-right:.25rem}.fd-calendar__action:first-child{margin-right:.25rem}.fd-calendar__action:last-child{margin-left:.25rem}.fd-calendar__action>[type=button]{width:100%}.fd-calendar__action--arrow-left,.fd-calendar__action--arrow-right{flex-grow:0}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{margin-left:auto}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right[dir=rtl],[dir=rtl] .fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{margin-left:0;margin-right:auto}.fd-calendar__action [class*=sap-icon][dir=rtl],[dir=rtl] .fd-calendar__action [class*=sap-icon]{transform:scaleX(-1)}.fd-calendar__content{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-calendar__content:after,.fd-calendar__content:before{box-sizing:inherit;font-size:inherit}.fd-calendar__content--months,.fd-calendar__content--years{padding-top:1.875rem}.fd-calendar__content--months .fd-calendar__item,.fd-calendar__content--years .fd-calendar__item{background-color:transparent;max-height:2.75rem}.fd-calendar__content--months .fd-calendar__item-button,.fd-calendar__content--years .fd-calendar__item-button{min-height:100%;min-width:100%;padding:0}.fd-calendar__content--months .fd-calendar__item--current .fd-calendar__item-button,.fd-calendar__content--years .fd-calendar__item--current .fd-calendar__item-button{-webkit-box-shadow:none;border:none;border-radius:var(--fdCalendar_Month_Year_Item_Border_Radius);box-shadow:none}.fd-calendar__content--months .fd-calendar__item .fd-calendar__text,.fd-calendar__content--years .fd-calendar__item .fd-calendar__text{color:inherit}.fd-calendar__content--dates .fd-calendar__item.is-focus,.fd-calendar__content--dates .fd-calendar__item:focus{z-index:5}.fd-calendar__content--dates .fd-calendar__item.is-active .fd-calendar__text,.fd-calendar__content--dates .fd-calendar__item:active .fd-calendar__text{color:var(--sapContent_Selected_TextColor)}.fd-calendar__content--dates .fd-calendar__item--side-helper .fd-calendar__text{color:var(--sapContent_LabelColor);font-size:var(--sapFontSmallSize)}.fd-calendar__content--dates .fd-calendar__item--other-month .fd-calendar__text{color:var(--sapContent_LabelColor)}.fd-calendar__content--screen-reader-only{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.fd-calendar__table{-webkit-box-sizing:border-box;border:0;border-spacing:0;box-sizing:border-box;color:var(--sapTextColor);display:table;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:100%}.fd-calendar__table:after,.fd-calendar__table:before{box-sizing:inherit;font-size:inherit}.fd-calendar__group{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:table-row-group;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-calendar__group:after,.fd-calendar__group:before{box-sizing:inherit;font-size:inherit}.fd-calendar__row{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-calendar__row:after,.fd-calendar__row:before{box-sizing:inherit;font-size:inherit}.fd-calendar .fd-calendar__item{display:inline-block}.fd-calendar .fd-calendar__item--current .fd-calendar__text:before{border:var(--fdCalendar_Item_Current_Border);border-radius:calc(var(--sapElement_BorderCornerRadius) / 2);bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:1}.fd-calendar__special-day--1 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor1);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor1);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--1.is-active .fd-calendar__text:after,.fd-calendar__special-day--1:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor1),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--1.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--1.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--2 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor2);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor2);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--2.is-active .fd-calendar__text:after,.fd-calendar__special-day--2:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor2),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--2.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--2.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--3 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor3);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor3);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--3.is-active .fd-calendar__text:after,.fd-calendar__special-day--3:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor3),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--3.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--3.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--4 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor4);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor4);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--4.is-active .fd-calendar__text:after,.fd-calendar__special-day--4:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor4),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--4.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--4.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--5 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor5);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor5);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--5.is-active .fd-calendar__text:after,.fd-calendar__special-day--5:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor5),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--5.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--5.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--6 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor6);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor6);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--6.is-active .fd-calendar__text:after,.fd-calendar__special-day--6:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor6),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--6.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--6.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--7 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor7);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor7);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--7.is-active .fd-calendar__text:after,.fd-calendar__special-day--7:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor7),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--7.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--7.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--8 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor8);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor8);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--8.is-active .fd-calendar__text:after,.fd-calendar__special-day--8:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor8),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--8.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--8.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--9 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor9);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor9);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--9.is-active .fd-calendar__text:after,.fd-calendar__special-day--9:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor9),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--9.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--9.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--10 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor10);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor10);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--10.is-active .fd-calendar__text:after,.fd-calendar__special-day--10:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor10),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--10.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--10.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--11 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor11);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor11);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--11.is-active .fd-calendar__text:after,.fd-calendar__special-day--11:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor11),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--11.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--11.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--12 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor12);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor12);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--12.is-active .fd-calendar__text:after,.fd-calendar__special-day--12:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor12),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--12.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--12.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--13 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor13);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor13);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--13.is-active .fd-calendar__text:after,.fd-calendar__special-day--13:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor13),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--13.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--13.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--14 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor14);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor14);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--14.is-active .fd-calendar__text:after,.fd-calendar__special-day--14:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor14),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--14.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--14.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--15 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor15);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor15);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--15.is-active .fd-calendar__text:after,.fd-calendar__special-day--15:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor15),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--15.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--15.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--16 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor16);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor16);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--16.is-active .fd-calendar__text:after,.fd-calendar__special-day--16:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor16),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--16.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--16.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--17 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor17);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor17);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--17.is-active .fd-calendar__text:after,.fd-calendar__special-day--17:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor17),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--17.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--17.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--18 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor18);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor18);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--18.is-active .fd-calendar__text:after,.fd-calendar__special-day--18:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor18),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--18.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--18.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--19 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor19);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor19);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--19.is-active .fd-calendar__text:after,.fd-calendar__special-day--19:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor19),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--19.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--19.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar__special-day--20 .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor20);bottom:0;box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor20);content:\"\";height:var(--fdCalendar_Special_Day_Marker_Height);left:0;position:absolute;right:0}.fd-calendar__special-day--20.is-active .fd-calendar__text:after,.fd-calendar__special-day--20:active .fd-calendar__text:after{box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height) * -1) 0 var(--sapLegendColor20),inset 0 -.33rem 0 var(--fdCalendar_Item_Current_Inner_Border_Color);height:calc(var(--fdCalendar_Special_Day_Marker_Height) + .0625rem)}.fd-calendar__special-day--20.fd-calendar__item--current.is-active .fd-calendar__text:after,.fd-calendar__special-day--20.fd-calendar__item--current:active .fd-calendar__text:after{bottom:var(--fdCalendar_Item_Current_Active_Special_Day_Bottom);height:var(--fdCalendar_Item_Current_Active_Special_Day_Height);left:var(--fdCalendar_Item_Current_Active_Special_Day_Left);right:var(--fdCalendar_Item_Current_Active_Special_Day_Right);width:var(--fdCalendar_Item_Current_Active_Special_Day_Width)}.fd-calendar .fd-calendar__close-button--navigation{-webkit-transform:translateY(-50%);position:absolute;right:0;top:50%;transform:translateY(-50%)}.fd-calendar .fd-calendar__close-button--navigation[dir=rtl],[dir=rtl] .fd-calendar .fd-calendar__close-button--navigation{left:0;right:auto}.fd-calendar--compact{padding:.5rem;width:17rem}.fd-calendar--compact .fd-calendar__navigation{padding-bottom:.1875rem;padding-top:.1875rem}.fd-calendar--compact .fd-calendar__action--arrow-left,.fd-calendar--compact .fd-calendar__action--arrow-right{width:1.875rem}.fd-calendar--compact .fd-calendar__content--months .fd-calendar__item,.fd-calendar--compact .fd-calendar__content--years .fd-calendar__item{max-height:1.875rem}.fd-calendar--compact .fd-calendar__item{height:1.875rem;min-width:1.875rem}.fd-calendar--compact .fd-calendar__item:after{height:calc(100% - .125rem);width:calc(100% - .125rem)}.fd-calendar--mobile-landscape,.fd-calendar--mobile-portrait{height:100%;width:100%}.fd-calendar--mobile-landscape{padding:0}.fd-calendar--mobile-landscape .fd-calendar__item--side-helper{height:1.625rem}.fd-calendar--mobile-landscape .fd-calendar__navigation--main{max-width:20rem}.fd-calendar--mobile-portrait{padding:1rem 0 0}.fd-has-display-block{display:block}\n"] }]
|
|
523
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DatetimeAdapter, decorators: [{
|
|
526
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DatetimeAdapter, decorators: [{
|
|
524
527
|
type: Optional
|
|
525
528
|
}] }, { type: undefined, decorators: [{
|
|
526
529
|
type: Optional
|
|
@@ -601,4 +604,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
601
604
|
}], disableRangeEndFunction: [{
|
|
602
605
|
type: Input
|
|
603
606
|
}] } });
|
|
604
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFtQixNQUFNLGdDQUFnQyxDQUFDO0FBR3JHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0ZBQXdGLENBQUM7QUFHN0ksT0FBTyxFQUNILHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0Isa0JBQWtCLEVBQ3JCLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7QUFFL0MsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFekI7Ozs7Ozs7Ozs7R0FVRztBQStCSCxNQUFNLE9BQU8saUJBQWlCO0lBc00xQixjQUFjO0lBQ2QsWUFDWSxrQkFBcUMsRUFDckMsdUJBQStDO0lBQ3ZELHFHQUFxRztJQUNqRixnQkFBb0MsRUFDVCxnQkFBaUM7UUFKeEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBRW5DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDVCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBdk1wRjs7V0FFRztRQUVILGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCOztXQUVHO1FBRUgsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsd0dBQXdHO1FBR3hHLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLDhEQUE4RDtRQUc5RCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQU12QixpRUFBaUU7UUFFakUsZUFBVSxHQUFtQixLQUFLLENBQUM7UUFNbkMsZ0dBQWdHO1FBRWhHLFlBQU8sR0FBaUIsUUFBUSxDQUFDO1FBRWpDLHNFQUFzRTtRQUV0RSxPQUFFLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFekM7Ozs7OztXQU1HO1FBRUgscUJBQWdCLEdBQXdCLEVBQUUsQ0FBQztRQUUzQzs7O1dBR0c7UUFFSCxhQUFRLEdBQXFCO1lBQ3pCLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7U0FDVixDQUFDO1FBRUY7OztXQUdHO1FBRUgsdUJBQWtCLEdBQXFCO1lBQ25DLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7U0FDVixDQUFDO1FBRUY7OztXQUdHO1FBRUgscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHFEQUFxRDtRQUU1QyxxQkFBZ0IsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFN0Ysc0VBQXNFO1FBRTdELHVCQUFrQixHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO1FBRXJFLG1GQUFtRjtRQUUxRSw0QkFBdUIsR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFaEcsNEZBQTRGO1FBRW5GLHNCQUFpQixHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBRWhGLDZEQUE2RDtRQUVwRCxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXRFLGlEQUFpRDtRQUV4QyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBOENyRSxjQUFjO1FBQ04sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBVzVDLHdHQUF3RztRQUV4Ryx3QkFBbUIsR0FBd0IsQ0FBQyxLQUFxQixFQUFRLEVBQUU7WUFDdkUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUM7UUFFRjs7O1dBR0c7UUFFSCxvQkFBZSxHQUEyQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFFdEQ7OztXQUdHO1FBRUgsOEJBQXlCLEdBQTJCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUVoRTs7O1dBR0c7UUFFSCw0QkFBdUIsR0FBMkIsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBRTlELGNBQWM7UUFDZCxhQUFRLEdBQWtDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUVuRCxjQUFjO1FBQ2QsY0FBUyxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQVU3QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLE1BQU0sb0NBQW9DLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNqRTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsTUFBTSxvQ0FBb0MsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsdUJBQXVCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBZSxDQUFDO1FBQy9GLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUNJLDJCQUEyQixJQUFJLE9BQU87WUFDdEMsK0JBQStCLElBQUksT0FBTztZQUMxQyxxQkFBcUIsSUFBSSxPQUFPLEVBQ2xDO1lBQ0UsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDMUcsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLFFBQTBCO1FBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQzNCLFFBQVEsR0FBTSxRQUFRLENBQUM7WUFFdkIsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUN0QyxRQUFRLEdBQWlCLFFBQVEsQ0FBQztZQUVsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEcsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNqQjtZQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRztnQkFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7YUFDcEIsQ0FBQztTQUNMO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDO2dCQUNJLGNBQWMsRUFBRTtvQkFDWixLQUFLLEVBQUUsS0FBSztpQkFDZjthQUNKLENBQUM7SUFDWixDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsVUFBMEI7UUFDN0MsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZDLElBQUksVUFBVSxLQUFLLE9BQU8sRUFBRTtZQUN4QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksVUFBVSxLQUFLLGdCQUFnQixFQUFFO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLElBQU87UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxLQUFtQjtRQUN4QyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVELHFIQUFxSDtJQUNySCxvQkFBb0I7UUFDaEIsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JCLEtBQUssS0FBSztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssT0FBTztnQkFDUixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDVixLQUFLLGdCQUFnQjtnQkFDakIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE1BQU07U0FDYjtRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQseUhBQXlIO0lBQ3pILHdCQUF3QjtRQUNwQixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckIsS0FBSyxLQUFLO2dCQUNOLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1YsS0FBSyxPQUFPO2dCQUNSLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBQ1YsS0FBSyxNQUFNO2dCQUNQLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxnQkFBZ0I7Z0JBQ2pCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNoQyxNQUFNO1NBQ2I7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDcEY7YUFBTTtZQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxDQUFDO2FBQzVDLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsb0JBQW9CO1FBQ2hCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUNyRjthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUk7Z0JBQ25DLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLENBQUM7YUFDNUMsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxlQUFlO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEgsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxtQkFBbUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsSCxDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLG1CQUFtQjtRQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxzRkFBc0Y7SUFDdEYsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCwwRkFBMEY7SUFDMUYsd0JBQXdCO1FBQ3BCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxJQUFpQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFLLENBQUM7Z0JBQzVDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQzthQUM3QyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFlBQVksQ0FBQyxZQUFvQjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQTZCO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRztZQUN2QixHQUFHLElBQUksQ0FBQyxtQkFBbUI7WUFDM0IsSUFBSSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1NBQ2hDLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNkLGtCQUFrQjtRQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7SUFDZCxtQkFBbUI7UUFDZixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO0lBQ2Qsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNkLHdCQUF3QjtRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxzR0FBc0c7SUFDdEcsWUFBWTtRQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzRDtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7WUFDMUIsT0FBTyxDQUNILElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQzVELENBQUM7U0FDTDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFlLENBQUM7WUFDL0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHFCQUFxQjtRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQy9FLElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDdEQsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUMzRCxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO1lBQy9ELElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztnQkFDakUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQzthQUN0RSxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQzdELElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztnQkFDL0QsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQzthQUNwRSxDQUFDO1NBQ0w7YUFBTTtZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDMUMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQy9DLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sdUJBQXVCO1FBQzNCLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyQixLQUFLLEtBQUs7Z0JBQ04sT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDbEMsS0FBSyxPQUFPO2dCQUNSLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3BDLEtBQUssTUFBTTtnQkFDUCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNuQyxLQUFLLGdCQUFnQjtnQkFDakIsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUM7WUFDN0M7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsc0JBQXNCO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixLQUFLLFVBQVU7Z0JBQ3hELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQjtZQUNuQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxVQUFVO2dCQUNwRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs4R0E1bEJRLGlCQUFpQix3SUE0TUYsaUJBQWlCO2tHQTVNaEMsaUJBQWlCLHd4Q0F6QmY7UUFDUDtZQUNJLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUNoRCxLQUFLLEVBQUUsSUFBSTtTQUNkO1FBQ0Q7WUFDSSxPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELEtBQUssRUFBRSxJQUFJO1NBQ2Q7UUFDRCxlQUFlO1FBQ2YsK0JBQStCLENBQUM7WUFDNUIsU0FBUyxFQUFFO2dCQUNQLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsc0JBQXNCO2FBQ3ZEO1NBQ0osQ0FBQztLQUNMLDZFQXFIVSx3QkFBd0Isc0ZBSXhCLDBCQUEwQixxRkFJMUIseUJBQXlCLCtGQUl6QixtQ0FBbUMsMkZBSW5DLHVCQUF1QixxRUNuTnRDLDhtR0FzRUE7MkZEZ0JhLGlCQUFpQjtrQkE5QjdCLFNBQVM7K0JBQ0ksYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNELGVBQWU7d0JBQ2YsK0JBQStCLENBQUM7NEJBQzVCLFNBQVMsRUFBRTtnQ0FDUCxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLHNCQUFzQjs2QkFDdkQ7eUJBQ0osQ0FBQztxQkFDTCxRQUNLO3dCQUNGLFFBQVEsRUFBRSxhQUFhO3dCQUN2QixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLGtDQUFrQztxQkFDNUMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQTZNMUMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7NENBek16QyxZQUFZO3NCQURYLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFNTixlQUFlO3NCQUZkLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMscUNBQXFDO2dCQU1sRCxjQUFjO3NCQUZiLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0NBQW9DO2dCQUtqRCxpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sRUFBRTtzQkFERCxLQUFLO2dCQVdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFXTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBV04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtFLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsaUJBQWlCO3NCQUR6QixNQUFNO2dCQUtFLGFBQWE7c0JBRHJCLE1BQU07Z0JBS0UsWUFBWTtzQkFEcEIsTUFBTTtnQkFLUCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsd0JBQXdCO2dCQUtuQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsMEJBQTBCO2dCQUtyQyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUtwQyw0QkFBNEI7c0JBRDNCLFNBQVM7dUJBQUMsbUNBQW1DO2dCQUs5Qyx3QkFBd0I7c0JBRHZCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQVVsQyw2QkFBNkI7c0JBRDVCLEtBQUs7Z0JBVU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQXVCTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBV04sZUFBZTtzQkFEZCxLQUFLO2dCQVFOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFRTix1QkFBdUI7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IE51bGxhYmxlLCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuL21vZGVscy9kYXRlLXJhbmdlJztcbmltcG9ydCB7IENhbGVuZGFyQ3VycmVudCB9IGZyb20gJy4vbW9kZWxzL2NhbGVuZGFyLWN1cnJlbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyR3JpZCB9IGZyb20gJy4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGVkWWVhciB9IGZyb20gJy4vbW9kZWxzL2FnZ3JlZ2F0ZWQteWVhcic7XG5pbXBvcnQgeyBDYWxlbmRhckRheVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWRheS12aWV3L2NhbGVuZGFyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vY2FsZW5kYXItZXJyb3JzJztcbmltcG9ydCB7IENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzYWJsZURhdGVGdW5jdGlvbiwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IENhbGVuZGFyVHlwZSwgRGF5c09mV2VlaywgRmRDYWxlbmRhclZpZXcsIE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzLFxuICAgIENvbnRlbnREZW5zaXR5TW9kZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcblxubGV0IGNhbGVuZGFyVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIE1vbnRoczogMSA9IEphbnVhcnksIDEyID0gZGVjZW1iZXIuXG4gKiBEYXlzOiAxID0gU3VuZGF5LCA3ID0gU2F0dXJkYXlcbiAqXG4gKiBDYWxlbmRhciBjb21wb25lbnQgdXNlZCBmb3Igc2VsZWN0aW5nIGRhdGVzLCB0eXBpY2FsbHkgdXNlZCBieSB0aGUgRGF0ZVBpY2tlciBhbmQgRGF0ZVRpbWVQaWNrZXIgY29tcG9uZW50cy5cbiAqIFN1cHBvcnRzIHRoZSBBbmd1bGFyIGZvcm1zIG1vZHVsZSwgZW5hYmxpbmcgZm9ybSB2YWxpZGl0eSwgbmdNb2RlbCwgZXRjLlxuICogYGBgaHRtbFxuICogPGZkLWNhbGVuZGFyPjwvZmQtY2FsZW5kYXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDYWxlbmRhclNlcnZpY2UsXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoe1xuICAgICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUXTogJ2ZkLWNhbGVuZGFyLS1jb21wYWN0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICAgICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgICAgIGNsYXNzOiAnZmQtY2FsZW5kYXIgZmQtaGFzLWRpc3BsYXktYmxvY2snXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gc2luZ2xlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZERhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBzaG93IHdlZWsgbnVtYmVycyBuZXh0IHRvIGRheXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIGxhbmRzY2FwZSBtb2RlLCBpdCBhbHNvIGFkZHMgY2xvc2UgYnV0dG9uIG9uIHJpZ2h0IHNpZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtY2FsZW5kYXItLW1vYmlsZS1sYW5kc2NhcGUnKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIHBvcnRyYWl0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtY2FsZW5kYXItLW1vYmlsZS1wb3J0cmFpdCcpXG4gICAgbW9iaWxlUG9ydHJhaXQgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPjtcblxuICAgIC8qKiBBY3R1YWxseSBzaG93biBhY3RpdmUgdmlldyBvbmUgb2YgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gICAgLyoqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBvbi4gMSByZXByZXNlbnRzIFN1bmRheSwgMiBpcyBNb25kYXksIDMgaXMgVHVlc2RheSwgYW5kIHNvIG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNhbFR5cGU6IENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIElkIG9mIHRoZSBjYWxlbmRhci4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSAnZmQtY2FsZW5kYXItJyArIGNhbGVuZGFyVW5pcXVlSWQrKztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9fc3BlY2lhbC1kYXktLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRCBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBEKSA9PiBmZERhdGUuZ2V0RGF5KCkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGVjaWFsRGF5c1J1bGVzOiBTcGVjaWFsRGF5UnVsZTxEPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogNVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIGFnZ3JlZ2F0ZWQgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFnZ3JlZ2F0ZWRZZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogM1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBkYXkgY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQgb24gRGF5IFZpZXcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGRhdGUgaW4gc2luZ2xlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB3aGVuIHZhbHVlIGlzIG92ZXJ3cml0dGVuIGZyb20gb3V0c2lkZSBhbmQgdGhyb3cgYmFjayBpc1ZhbGlkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXNWYWxpZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB3aGVuIGNhbGVuZGFyIHNob3VsZCBiZSBjbG9zZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjbG9zZUNhbGVuZGFyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2xvc2VDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50KVxuICAgIF9kYXlWaWV3Q29tcG9uZW50OiBDYWxlbmRhckRheVZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQpXG4gICAgX21vbnRoVmlld0NvbXBvbmVudDogQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudClcbiAgICBfeWVhclZpZXdDb21wb25lbnQ6IENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQpXG4gICAgX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFySGVhZGVyQ29tcG9uZW50OiBDYWxlbmRhckhlYWRlckNvbXBvbmVudDxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gZGF0ZSBzZWxlY3RlZCBkYXRlXG4gICAgICogQHBhcmFtIGN1cnJlbnRseURpc3BsYXllZERhdGUgY3VycmVudGx5IGRpc3BsYXllZCBkYXRlXG4gICAgICogQHBhcmFtIGFjdGl2ZVZpZXcgY3VycmVudCB2aWV3IG9mIGNhbGVuZGFyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBuZXh0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBkYXRlIHNlbGVjdGVkIGRhdGVcbiAgICAgKiBAcGFyYW0gY3VycmVudGx5RGlzcGxheWVkRGF0ZSBjdXJyZW50bHkgZGlzcGxheWVkIGRhdGVcbiAgICAgKiBAcGFyYW0gYWN0aXZlVmlldyBjdXJyZW50IHZpZXcgb2YgY2FsZW5kYXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VycmVudGx5IGRpc3BsYXllZCBkYXlzIGRlcGVuZGluZyBvbiBtb250aCBhbmQgeWVhclxuICAgICAqL1xuICAgIF9jdXJyZW50bHlEaXNwbGF5ZWQ6IENhbGVuZGFyQ3VycmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZXh0QnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogVGhhdCBhbGxvd3MgdG8gZGVmaW5lIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGhhcHBlbiwgd2hlbiBmb2N1cyBzaG91bGQgbm9ybWFsbHkgZXNjYXBlIG9mIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXNjYXBlRm9jdXNGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbiA9IChldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySGVhZGVyQ29tcG9uZW50Py5mb2N1cygpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZUZ1bmN0aW9uOiBEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+ID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBzdGFydCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogRGlzYWJsZURhdGVGdW5jdGlvbjxEPiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGZvciB0aGUgcmFuZ2UgZW5kIHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbjogRGlzYWJsZURhdGVGdW5jdGlvbjxEPiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKF86IEQgfCBEYXRlUmFuZ2U8RD4pID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0c1xuICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEYXRlVGltZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEQVRFX1RJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgICAgICAvLyBzZXQgZGVmYXVsdCB2YWx1ZVxuICAgICAgICB0aGlzLl9hZGFwdGVyU3RhcnRpbmdEYXlPZldlZWsgPSAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCkgKyAxKSBhcyBEYXlzT2ZXZWVrO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJlcGFyZURpc3BsYXllZFZpZXcoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgJ25leHRCdXR0b25EaXNhYmxlRnVuY3Rpb24nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbicgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ19jdXJyZW50bHlEaXNwbGF5ZWQnIGluIGNoYW5nZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0V2Vla1N0YXJ0RGF5KCk6IERheXNPZldlZWsge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydGluZ0RheU9mV2VlayA9PT0gdW5kZWZpbmVkID8gdGhpcy5fYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrIDogdGhpcy5zdGFydGluZ0RheU9mV2VlaztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zLlxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IERhdGVSYW5nZTxEPiB8IEQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSA8RD5zZWxlY3RlZDtcblxuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSAncmFuZ2UnICYmIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IDxEYXRlUmFuZ2U8RD4+c2VsZWN0ZWQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc2VsZWN0ZWQuc3RhcnQpIHx8ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZC5lbmQpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogc2VsZWN0ZWQuc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBzZWxlY3RlZC5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5pc1ZhbGlkRGF0ZUNoYW5nZS5lbWl0KHZhbGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhbGlkKClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGUgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICpcbiAgICAgKiBGaXJlZCBieSBjYWxlbmRhciBoZWFkZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGhhbmRsZUFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gYWN0aXZlVmlldztcblxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdChhY3RpdmVWaWV3KTtcblxuICAgICAgICBpZiAoYWN0aXZlVmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5vbk1vbnRoVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5vblllYXJWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZlVmlldyA9PT0gJ2FnZ3JlZ2F0ZWRZZWFyJykge1xuICAgICAgICAgICAgdGhpcy5vblllYXJzUmFuZ2VWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBkYXkgdmlldyBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgc2luZ2xlIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHNlbGVjdGVkRGF0ZUNoYW5nZWQoZGF0ZTogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoZGF0ZSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhci5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBkYXkgdmlldyBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKGRhdGVzOiBEYXRlUmFuZ2U8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogZGF0ZXMuc3RhcnQsIGVuZDogZGF0ZXMuZW5kID8gZGF0ZXMuZW5kIDogZGF0ZXMuc3RhcnQgfTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmV4dCBhcnJvdyBpY29uIGNsaWNrLCBkZXBlbmRpbmcgb24gY3VycmVudCB2aWV3IGl0IGNoYW5nZXMgbW9udGgsIHllYXIgb3IgbGlzdCBvZiB5ZWFycyAqL1xuICAgIGhhbmRsZU5leHRBcnJvd0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOZXh0TW9udGgoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOZXh0WWVhcigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXJMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZ2dyZWdhdGVkWWVhcic6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXJzTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBwcmV2aW91cyBhcnJvdyBpY29uIGNsaWNrLCBkZXBlbmRpbmcgb24gY3VycmVudCB2aWV3IGl0IGNoYW5nZXMgbW9udGgsIHllYXIgb3IgbGlzdCBvZiB5ZWFycyAqL1xuICAgIGhhbmRsZVByZXZpb3VzQXJyb3dDbGljaygpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzWWVhcigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UHJldmlvdXNZZWFyTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRlZFllYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbCB2aWV3IHRvIG5leHQgbW9udGggKi9cbiAgICBkaXNwbGF5TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciArIDEsIG1vbnRoOiAxIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIsXG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCArIDFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbCB2aWV3IHRvIHByZXZpb3VzIG1vbnRoICovXG4gICAgZGlzcGxheVByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPD0gMSkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciAtIDEsIG1vbnRoOiAxMiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBuZXh0IHllYXIgKi9cbiAgICBkaXNwbGF5TmV4dFllYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgbW9udGg6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBwcmV2aW91cyB5ZWFyICovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoLCB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciAtIDEgfTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbGx5IGRpc3BsYXllZCBsaXN0IG9mIHllYXIgdG8gbmV4dCB5ZWFyIGxpc3QqL1xuICAgIGRpc3BsYXlOZXh0WWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50LmxvYWROZXh0WWVhckxpc3QoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbGx5IGRpc3BsYXllZCBsaXN0IG9mIHllYXIgdG8gcHJldmlvdXMgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5UHJldmlvdXNZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5feWVhclZpZXdDb21wb25lbnQubG9hZFByZXZpb3VzWWVhckxpc3QoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbGx5IGRpc3BsYXllZCBsaXN0IG9mIHllYXIgdG8gbmV4dCB5ZWFyIGxpc3QqL1xuICAgIGRpc3BsYXlOZXh0WWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQubG9hZE5leHRZZWFyc0xpc3QoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3dpdGNoIGFjdHVhbGx5IGRpc3BsYXllZCBsaXN0IG9mIHllYXIgdG8gcHJldmlvdXMgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5UHJldmlvdXNZZWFyc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudC5sb2FkUHJldmlvdXNZZWFyc0xpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBjaGFuZ2UgY3VycmVudGx5IGRpc3BsYXllZCBtb250aC95ZWFyIGNvbmZpZ3VyYXRpb24sXG4gICAgICogd2hpY2ggYXJlIGNvbm5lY3RlZCB0byBkYXlzIGRpc3BsYXllZFxuICAgICAqL1xuICAgIHNldEN1cnJlbnRseURpc3BsYXllZChkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUhKSxcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlISlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaW5pdGlhbCBmb2N1cyBvbiBvbmUgb2YgdGhlIGNhbGVuZGFyJ3MgZWxlbWVudFxuICAgICAqL1xuICAgIGluaXRpYWxGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ2V0QWN0aXZlRm9jdXNhYmxlVmlldygpPy5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgY2hhbmdlcyBmcm9tIG1vbnRoIHZpZXcgY2hpbGQgY29tcG9uZW50LCBjaGFuZ2VzIGFjdHVhbCB2aWV3IGFuZCBjaGFuZ2VzIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGhcbiAgICAgKi9cbiAgICBoYW5kbGVNb250aFZpZXdDaGFuZ2UobW9udGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7IG1vbnRoLCB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciB9O1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSAnZGF5JztcbiAgICAgICAgdGhpcy5vbkRheXNWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZFllYXIoeWVhclNlbGVjdGVkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ2RheSc7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyID0geWVhclNlbGVjdGVkO1xuICAgICAgICB0aGlzLm9uRGF5c1ZpZXdTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHNlbGVjdGVkWWVhcnMoeWVhcnNTZWxlY3RlZDogQWdncmVnYXRlZFllYXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ3llYXInO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyc1NlbGVjdGVkLnN0YXJ0WWVhclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uWWVhclZpZXdTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25EYXlzVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2RheVZpZXdDb21wb25lbnQ/LnNldEZvY3VzT25DZWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbk1vbnRoVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX21vbnRoVmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uWWVhclZpZXdTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl95ZWFyVmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uWWVhcnNSYW5nZVZpZXdTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ/LnNldEZvY3VzT25DZWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNNb2RlbFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyU3RhcnRpbmdEYXlPZldlZWsgPSAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCkgKyAxKSBhcyBEYXlzT2ZXZWVrO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgc2V0cyB1cCB0aGUgY3VycmVudGx5IGRpc3BsYXllZCB2YXJpYWJsZXMsIGxpa2Ugc2hvd24gbW9udGggYW5kIHllYXIuXG4gICAgICogRGF5IGdyaWQgaXMgYmFzZWQgb24gY3VycmVudGx5IGRpc3BsYXllZCBtb250aCBhbmQgeWVhclxuICAgICAqL1xuICAgIHByaXZhdGUgX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSAnc2luZ2xlJyAmJiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkRGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLnNlbGVjdGVkRGF0ZSksXG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSAmJiB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCksXG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlICYmIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9kYXkgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0b2RheSksXG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0b2RheSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZUZvY3VzYWJsZVZpZXcoKTogRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHwgbnVsbCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXlWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aFZpZXdDb21wb25lbnQ7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feWVhclZpZXdDb21wb25lbnQ7XG4gICAgICAgICAgICBjYXNlICdhZ2dyZWdhdGVkWWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZWQgPVxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb24odGhpcy5zZWxlY3RlZERhdGUsIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCwgdGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgdGhpcy5uZXh0QnV0dG9uRGlzYWJsZWQgPVxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgdGhpcy5uZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uKHRoaXMuc2VsZWN0ZWREYXRlLCB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQsIHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiIsIjxmZC1jYWxlbmRhci1oZWFkZXJcbiAgICBbY3VycmVudGx5RGlzcGxheWVkXT1cIl9jdXJyZW50bHlEaXNwbGF5ZWRcIlxuICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgW2NhbGVuZGFyWWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgIFttb2JpbGVMYW5kc2NhcGVdPVwibW9iaWxlTGFuZHNjYXBlXCJcbiAgICAoY2xvc2VDbGlja2VkKT1cImNsb3NlQ2xpY2tlZC5lbWl0KClcIlxuICAgIChuZXh0Q2xpY2tlZCk9XCJoYW5kbGVOZXh0QXJyb3dDbGljaygpXCJcbiAgICAocHJldmlvdXNDbGlja2VkKT1cImhhbmRsZVByZXZpb3VzQXJyb3dDbGljaygpXCJcbiAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlZF09XCJwcmV2aW91c0J1dHRvbkRpc2FibGVkXCJcbiAgICBbbmV4dEJ1dHRvbkRpc2FibGVkXT1cIm5leHRCdXR0b25EaXNhYmxlZFwiXG4gICAgKGFjdGl2ZVZpZXdDaGFuZ2UpPVwiaGFuZGxlQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbj48L2ZkLWNhbGVuZGFyLWhlYWRlcj5cbjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImFjdGl2ZVZpZXdcIiAqbmdJZj1cIl9jdXJyZW50bHlEaXNwbGF5ZWRcIj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2NvbnRlbnQtLWRhdGVzXT1cImFjdGl2ZVZpZXcgPT09ICdkYXknXCJcbiAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19jb250ZW50LS1tb250aHNdPVwiYWN0aXZlVmlldyA9PT0gJ21vbnRoJ1wiXG4gICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fY29udGVudC0teWVhcnNdPVwiYWN0aXZlVmlldyA9PT0gJ3llYXInIHx8IGFjdGl2ZVZpZXcgPT09ICdhZ2dyZWdhdGVkWWVhcidcIlxuICAgID5cbiAgICAgICAgPGZkLWNhbGVuZGFyLWRheS12aWV3XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RheSdcIlxuICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJzZWxlY3RlZERhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgW3NlbGVjdGVkUmFuZ2VEYXRlXT1cInNlbGVjdGVkUmFuZ2VEYXRlXCJcbiAgICAgICAgICAgIChzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZSk9XCJzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY3VycmVudGx5RGlzcGxheWVkXT1cIl9jdXJyZW50bHlEaXNwbGF5ZWRcIlxuICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cImdldFdlZWtTdGFydERheSgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFtjYWxUeXBlXT1cImNhbFR5cGVcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtyYW5nZUhvdmVyRWZmZWN0XT1cInJhbmdlSG92ZXJFZmZlY3RcIlxuICAgICAgICAgICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgICAgICAgICBbZm9jdXNFc2NhcGVGdW5jdGlvbl09XCJlc2NhcGVGb2N1c0Z1bmN0aW9uXCJcbiAgICAgICAgICAgIChuZXh0TW9udGhTZWxlY3QpPVwiZGlzcGxheU5leHRNb250aCgpXCJcbiAgICAgICAgICAgIChwcmV2aW91c01vbnRoU2VsZWN0KT1cImRpc3BsYXlQcmV2aW91c01vbnRoKClcIlxuICAgICAgICA+PC9mZC1jYWxlbmRhci1kYXktdmlldz5cbiAgICAgICAgPGZkLWNhbGVuZGFyLW1vbnRoLXZpZXdcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbW9udGgnXCJcbiAgICAgICAgICAgIFttb250aFNlbGVjdGVkXT1cIl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGhcIlxuICAgICAgICAgICAgW3llYXJdPVwiX2N1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZm9jdXNFc2NhcGVGdW5jdGlvbl09XCJlc2NhcGVGb2N1c0Z1bmN0aW9uXCJcbiAgICAgICAgICAgIChtb250aENsaWNrZWQpPVwiaGFuZGxlTW9udGhWaWV3Q2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9mZC1jYWxlbmRhci1tb250aC12aWV3PlxuICAgICAgICA8ZmQtY2FsZW5kYXIteWVhci12aWV3XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3llYXInXCJcbiAgICAgICAgICAgIFt5ZWFyU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgIFt5ZWFyVmlld0dyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgKHllYXJDbGlja2VkKT1cInNlbGVjdGVkWWVhcigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNhbGVuZGFyLXllYXItdmlldz5cbiAgICAgICAgPGZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2FnZ3JlZ2F0ZWRZZWFyJ1wiXG4gICAgICAgICAgICAoeWVhcnNDbGlja2VkKT1cInNlbGVjdGVkWWVhcnMoJGV2ZW50KVwiXG4gICAgICAgICAgICBbeWVhclNlbGVjdGVkXT1cIl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhclwiXG4gICAgICAgICAgICBbeWVhclZpZXdHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgIFthZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICA+XG4gICAgICAgIDwvZmQtY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
607
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJaEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDN0csT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDaEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdGQUF3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TixlQUFlO3NCQURkLEtBQUs7Z0JBUU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQVFOLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSwgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi9tb2RlbHMvZGF0ZS1yYW5nZSc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci15ZWFyLWdyaWQnO1xuaW1wb3J0IHsgQWdncmVnYXRlZFllYXIgfSBmcm9tICcuL21vZGVscy9hZ2dyZWdhdGVkLXllYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1kYXktdmlldy9jYWxlbmRhci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXIteWVhci12aWV3L2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLW1vbnRoLXZpZXcvY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2NhbGVuZGFyLWVycm9ycyc7XG5pbXBvcnQgeyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IERpc2FibGVEYXRlRnVuY3Rpb24sIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhclR5cGUsIERheXNPZldlZWssIEZkQ2FsZW5kYXJWaWV3LCBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyxcbiAgICBDb250ZW50RGVuc2l0eU1vZGVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmxldCBjYWxlbmRhclVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBNb250aHM6IDEgPSBKYW51YXJ5LCAxMiA9IGRlY2VtYmVyLlxuICogRGF5czogMSA9IFN1bmRheSwgNyA9IFNhdHVyZGF5XG4gKlxuICogQ2FsZW5kYXIgY29tcG9uZW50IHVzZWQgZm9yIHNlbGVjdGluZyBkYXRlcywgdHlwaWNhbGx5IHVzZWQgYnkgdGhlIERhdGVQaWNrZXIgYW5kIERhdGVUaW1lUGlja2VyIGNvbXBvbmVudHMuXG4gKiBTdXBwb3J0cyB0aGUgQW5ndWxhciBmb3JtcyBtb2R1bGUsIGVuYWJsaW5nIGZvcm0gdmFsaWRpdHksIG5nTW9kZWwsIGV0Yy5cbiAqIGBgYGh0bWxcbiAqIDxmZC1jYWxlbmRhcj48L2ZkLWNhbGVuZGFyPlxuICogYGBgXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIG1vZGlmaWVyczoge1xuICAgICAgICAgICAgICAgIFtDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVF06ICdmZC1jYWxlbmRhci0tY29tcGFjdCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhmb2N1c291dCknOiAnX2ZvY3VzT3V0KCRldmVudCknLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhciBmZC1oYXMtZGlzcGxheS1ibG9jaydcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCBpbiBzaW5nbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBzdW5kYXkvc2F0dXJkYXkgd2l0aCBgZmQtY2FsZW5kYXJfX2l0ZW0tLXdlZWtlbmRgIGNsYXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXJrV2Vla2VuZHMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjYWxlbmRhciBpcyB1c2VkIGluc2lkZSBtb2JpbGUgaW4gbGFuZHNjYXBlIG1vZGUsIGl0IGFsc28gYWRkcyBjbG9zZSBidXR0b24gb24gcmlnaHQgc2lkZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1jYWxlbmRhci0tbW9iaWxlLWxhbmRzY2FwZScpXG4gICAgbW9iaWxlTGFuZHNjYXBlID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjYWxlbmRhciBpcyB1c2VkIGluc2lkZSBtb2JpbGUgaW4gcG9ydHJhaXQgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1jYWxlbmRhci0tbW9iaWxlLXBvcnRyYWl0JylcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRmREYXRlcyBtb2RlbCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+O1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgICAvKiogVGhlIGRheSBvZiB0aGUgd2VlayB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IG9uLiAxIHJlcHJlc2VudHMgU3VuZGF5LCAyIGlzIE1vbmRheSwgMyBpcyBUdWVzZGF5LCBhbmQgc28gb24uICovXG4gICAgQElucHV0KClcbiAgICBzdGFydGluZ0RheU9mV2VlazogRGF5c09mV2VlaztcblxuICAgIC8qKiBUaGUgdHlwZSBvZiBjYWxlbmRhciwgJ3NpbmdsZScgZm9yIHNpbmdsZSBkYXRlIHNlbGVjdGlvbiBvciAncmFuZ2UnIGZvciBhIHJhbmdlIG9mIGRhdGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2FsVHlwZTogQ2FsZW5kYXJUeXBlID0gJ3NpbmdsZSc7XG5cbiAgICAvKiogSWQgb2YgdGhlIGNhbGVuZGFyLiBJZiBub25lIGlzIHByb3ZpZGVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpZCA9ICdmZC1jYWxlbmRhci0nICsgY2FsZW5kYXJVbmlxdWVJZCsrO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIG1hcmssIGl0IGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYXJyYXkgb2Ygb2JqZWN0IHdpdGhcbiAgICAgKiBTcGVjaWFsIGRheSBudW1iZXIsIGxpc3QgMS0yMCBbY2xhc3M6YGZkLWNhbGVuZGFyX19zcGVjaWFsLWRheS0te3tudW1iZXJ9fWBdIGlzIGF2YWlsYWJsZSB0aGVyZTpcbiAgICAgKiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtc3R5bGVzL2NvbXBvbmVudHMvY2FsZW5kYXIuaHRtbCBjYWxlbmRhciBzcGVjaWFsIGRheXMgc2VjdGlvblxuICAgICAqIFJ1bGUgYWNjZXB0cyBtZXRob2Qgd2l0aCBEIG9iamVjdCBhcyBhIHBhcmFtZXRlci4gZXg6XG4gICAgICogYHJ1bGU6IChmZERhdGU6IEQpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIGRheSBjZWxscyBvbiBob3Zlci5cbiAgICAgKiBXb3JrcyBvbmx5IG9uIHJhbmdlIG1vZGUsIHdoZW4gc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZCBvbiBEYXkgVmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlSG92ZXJFZmZlY3QgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIHJhbmdlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHdoZW4gdmFsdWUgaXMgb3ZlcndyaXR0ZW4gZnJvbSBvdXRzaWRlIGFuZCB0aHJvdyBiYWNrIGlzVmFsaWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpc1ZhbGlkRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHdoZW4gY2FsZW5kYXIgc2hvdWxkIGJlIGNsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNsb3NlQ2FsZW5kYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjbG9zZUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckRheVZpZXdDb21wb25lbnQpXG4gICAgX2RheVZpZXdDb21wb25lbnQ6IENhbGVuZGFyRGF5Vmlld0NvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudClcbiAgICBfbW9udGhWaWV3Q29tcG9uZW50OiBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50KVxuICAgIF95ZWFyVmlld0NvbXBvbmVudDogQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudClcbiAgICBfYWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50OiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckhlYWRlckNvbXBvbmVudClcbiAgICBfY2FsZW5kYXJIZWFkZXJDb21wb25lbnQ6IENhbGVuZGFySGVhZGVyQ29tcG9uZW50PEQ+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIHByZXZpb3VzIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBkYXRlIHNlbGVjdGVkIGRhdGVcbiAgICAgKiBAcGFyYW0gY3VycmVudGx5RGlzcGxheWVkRGF0ZSBjdXJyZW50bHkgZGlzcGxheWVkIGRhdGVcbiAgICAgKiBAcGFyYW0gYWN0aXZlVmlldyBjdXJyZW50IHZpZXcgb2YgY2FsZW5kYXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIG5leHQgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICogQHBhcmFtIGRhdGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAqIEBwYXJhbSBjdXJyZW50bHlEaXNwbGF5ZWREYXRlIGN1cnJlbnRseSBkaXNwbGF5ZWQgZGF0ZVxuICAgICAqIEBwYXJhbSBhY3RpdmVWaWV3IGN1cnJlbnQgdmlldyBvZiBjYWxlbmRhclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXJyZW50bHkgZGlzcGxheWVkIGRheXMgZGVwZW5kaW5nIG9uIG1vbnRoIGFuZCB5ZWFyXG4gICAgICovXG4gICAgX2N1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGFwdGVyU3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBUaGF0IGFsbG93cyB0byBkZWZpbmUgZnVuY3Rpb24gdGhhdCBzaG91bGQgaGFwcGVuLCB3aGVuIGZvY3VzIHNob3VsZCBub3JtYWxseSBlc2NhcGUgb2YgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBlc2NhcGVGb2N1c0Z1bmN0aW9uOiBFc2NhcGVGb2N1c0Z1bmN0aW9uID0gKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJIZWFkZXJDb21wb25lbnQ/LmZvY3VzKCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhci5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246IERpc2FibGVEYXRlRnVuY3Rpb248RD4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIHN0YXJ0IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uOiBEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+ID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uOiBEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+ID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAoXzogRCB8IERhdGVSYW5nZTxEPikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIHRoaXMuX2FkYXB0ZXJTdGFydGluZ0RheU9mV2VlayA9ICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSArIDEpIGFzIERheXNPZldlZWs7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmVwYXJlRGlzcGxheWVkVmlldygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAnbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbicgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ3ByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnX2N1cnJlbnRseURpc3BsYXllZCcgaW4gY2hhbmdlc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRXZWVrU3RhcnREYXkoKTogRGF5c09mV2VlayB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrID09PSB1bmRlZmluZWQgPyB0aGlzLl9hZGFwdGVyU3RhcnRpbmdEYXlPZldlZWsgOiB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciB0aGF0IGFsbG93cyB0byB1c2UgWyhuZ01vZGVsKV0gb3IgZm9ybXMuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogRGF0ZVJhbmdlPEQ+IHwgRCk6IHZvaWQge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IDxEPnNlbGVjdGVkO1xuXG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHNlbGVjdGVkKTtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBzZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbFR5cGUgPT09ICdyYW5nZScgJiYgc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gPERhdGVSYW5nZTxEPj5zZWxlY3RlZDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZC5zdGFydCkgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHNlbGVjdGVkLmVuZCkpIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBzZWxlY3RlZC5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IHNlbGVjdGVkLmVuZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZURpc3BsYXllZFZpZXcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmlzVmFsaWREYXRlQ2hhbmdlLmVtaXQodmFsaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgVmFsaWRhdG9yIEludGVyZmFjZSwgYWRkcyB2YWxpZGF0aW9uIHN1cHBvcnQgZm9yIGZvcm1zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vZGVsVmFsaWQoKVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZSBhY3RpdmUgdmlldyBjaGFuZ2UgYW5kIHRocm93cyBldmVudC5cbiAgICAgKlxuICAgICAqIEZpcmVkIGJ5IGNhbGVuZGFyIGhlYWRlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgaGFuZGxlQWN0aXZlVmlld0NoYW5nZShhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgICAgICBpZiAoYWN0aXZlVmlldyA9PT0gdGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBhY3RpdmVWaWV3O1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KGFjdGl2ZVZpZXcpO1xuXG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLm9uTW9udGhWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZlVmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLm9uWWVhclZpZXdTZWxlY3RlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSAnYWdncmVnYXRlZFllYXInKSB7XG4gICAgICAgICAgICB0aGlzLm9uWWVhcnNSYW5nZVZpZXdTZWxlY3RlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGRheSB2aWV3IGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBzaW5nbGUgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgc2VsZWN0ZWREYXRlQ2hhbmdlZChkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGRheSB2aWV3IGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZWQoZGF0ZXM6IERhdGVSYW5nZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBkYXRlcy5zdGFydCwgZW5kOiBkYXRlcy5lbmQgPyBkYXRlcy5lbmQgOiBkYXRlcy5zdGFydCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhci5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIG5leHQgYXJyb3cgaWNvbiBjbGljaywgZGVwZW5kaW5nIG9uIGN1cnJlbnQgdmlldyBpdCBjaGFuZ2VzIG1vbnRoLCB5ZWFyIG9yIGxpc3Qgb2YgeWVhcnMgKi9cbiAgICBoYW5kbGVOZXh0QXJyb3dDbGljaygpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU5leHRZZWFyTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRlZFllYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU5leHRZZWFyc0xpc3QoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgcHJldmlvdXMgYXJyb3cgaWNvbiBjbGljaywgZGVwZW5kaW5nIG9uIGN1cnJlbnQgdmlldyBpdCBjaGFuZ2VzIG1vbnRoLCB5ZWFyIG9yIGxpc3Qgb2YgeWVhcnMgKi9cbiAgICBoYW5kbGVQcmV2aW91c0Fycm93Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzWWVhckxpc3QoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FnZ3JlZ2F0ZWRZZWFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXJzTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBuZXh0IG1vbnRoICovXG4gICAgZGlzcGxheU5leHRNb250aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxLCBtb250aDogMSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggKyAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBwcmV2aW91cyBtb250aCAqL1xuICAgIGRpc3BsYXlQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIDw9IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxLCBtb250aDogMTIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhcixcbiAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIC0gMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gbmV4dCB5ZWFyICovXG4gICAgZGlzcGxheU5leHRZZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7IG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyICsgMSB9O1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gcHJldmlvdXMgeWVhciAqL1xuICAgIGRpc3BsYXlQcmV2aW91c1llYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgbW9udGg6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5sb2FkTmV4dFllYXJMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50LmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJzTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50LmxvYWROZXh0WWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gY2hhbmdlIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGgveWVhciBjb25maWd1cmF0aW9uLFxuICAgICAqIHdoaWNoIGFyZSBjb25uZWN0ZWQgdG8gZGF5cyBkaXNwbGF5ZWRcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50bHlEaXNwbGF5ZWQoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlISksXG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGluaXRpYWwgZm9jdXMgb24gb25lIG9mIHRoZSBjYWxlbmRhcidzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpbml0aWFsRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldEFjdGl2ZUZvY3VzYWJsZVZpZXcoKT8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIGNoYW5nZXMgZnJvbSBtb250aCB2aWV3IGNoaWxkIGNvbXBvbmVudCwgY2hhbmdlcyBhY3R1YWwgdmlldyBhbmQgY2hhbmdlcyBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoXG4gICAgICovXG4gICAgaGFuZGxlTW9udGhWaWV3Q2hhbmdlKG1vbnRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyBtb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgfTtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ2RheSc7XG4gICAgICAgIHRoaXMub25EYXlzVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRZZWFyKHllYXJTZWxlY3RlZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICdkYXknO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciA9IHllYXJTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5vbkRheXNWaWV3U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZFllYXJzKHllYXJzU2VsZWN0ZWQ6IEFnZ3JlZ2F0ZWRZZWFyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICd5ZWFyJztcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fY3VycmVudGx5RGlzcGxheWVkLFxuICAgICAgICAgICAgeWVhcjogeWVhcnNTZWxlY3RlZC5zdGFydFllYXJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblllYXJWaWV3U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uRGF5c1ZpZXdTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9kYXlWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Nb250aFZpZXdTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9tb250aFZpZXdDb21wb25lbnQ/LnNldEZvY3VzT25DZWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblllYXJWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5feWVhclZpZXdDb21wb25lbnQ/LnNldEZvY3VzT25DZWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblllYXJzUmFuZ2VWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzTW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrID0gKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpICsgMSkgYXMgRGF5c09mV2VlaztcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHNldHMgdXAgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgdmFyaWFibGVzLCBsaWtlIHNob3duIG1vbnRoIGFuZCB5ZWFyLlxuICAgICAqIERheSBncmlkIGlzIGJhc2VkIG9uIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGggYW5kIHllYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9wcmVwYXJlRGlzcGxheWVkVmlldygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gJ3NpbmdsZScgJiYgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5zZWxlY3RlZERhdGUpLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5zZWxlY3RlZERhdGUpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiYgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSAmJiB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKSxcbiAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodG9kYXkpLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodG9kYXkpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVGb2N1c2FibGVWaWV3KCk6IEZvY3VzYWJsZUNhbGVuZGFyVmlldyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF5Vmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRlZFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0J1dHRvbkRpc2FibGVkID1cbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uKHRoaXMuc2VsZWN0ZWREYXRlLCB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQsIHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIHRoaXMubmV4dEJ1dHRvbkRpc2FibGVkID1cbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIHRoaXMubmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbih0aGlzLnNlbGVjdGVkRGF0ZSwgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLCB0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGZkLWNhbGVuZGFyLWhlYWRlclxuICAgIFtjdXJyZW50bHlEaXNwbGF5ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZFwiXG4gICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbY2FsZW5kYXJZZWFyR3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgW21vYmlsZUxhbmRzY2FwZV09XCJtb2JpbGVMYW5kc2NhcGVcIlxuICAgIChjbG9zZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkLmVtaXQoKVwiXG4gICAgKG5leHRDbGlja2VkKT1cImhhbmRsZU5leHRBcnJvd0NsaWNrKClcIlxuICAgIChwcmV2aW91c0NsaWNrZWQpPVwiaGFuZGxlUHJldmlvdXNBcnJvd0NsaWNrKClcIlxuICAgIFtwcmV2aW91c0J1dHRvbkRpc2FibGVkXT1cInByZXZpb3VzQnV0dG9uRGlzYWJsZWRcIlxuICAgIFtuZXh0QnV0dG9uRGlzYWJsZWRdPVwibmV4dEJ1dHRvbkRpc2FibGVkXCJcbiAgICAoYWN0aXZlVmlld0NoYW5nZSk9XCJoYW5kbGVBY3RpdmVWaWV3Q2hhbmdlKCRldmVudClcIlxuPjwvZmQtY2FsZW5kYXItaGVhZGVyPlxuPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYWN0aXZlVmlld1wiICpuZ0lmPVwiX2N1cnJlbnRseURpc3BsYXllZFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fY29udGVudC0tZGF0ZXNdPVwiYWN0aXZlVmlldyA9PT0gJ2RheSdcIlxuICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2NvbnRlbnQtLW1vbnRoc109XCJhY3RpdmVWaWV3ID09PSAnbW9udGgnXCJcbiAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19jb250ZW50LS15ZWFyc109XCJhY3RpdmVWaWV3ID09PSAneWVhcicgfHwgYWN0aXZlVmlldyA9PT0gJ2FnZ3JlZ2F0ZWRZZWFyJ1wiXG4gICAgPlxuICAgICAgICA8ZmQtY2FsZW5kYXItZGF5LXZpZXdcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF5J1wiXG4gICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICBbbWFya1dlZWtlbmRzXT1cIm1hcmtXZWVrZW5kc1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cInNlbGVjdGVkRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlKT1cInNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjdXJyZW50bHlEaXNwbGF5ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZFwiXG4gICAgICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwiZ2V0V2Vla1N0YXJ0RGF5KClcIlxuICAgICAgICAgICAgW2Rpc2FibGVGdW5jdGlvbl09XCJkaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2Rpc2FibGVSYW5nZUVuZEZ1bmN0aW9uXT1cImRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uXT1cImRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25cIlxuICAgICAgICAgICAgW2NhbFR5cGVdPVwiY2FsVHlwZVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgKG5leHRNb250aFNlbGVjdCk9XCJkaXNwbGF5TmV4dE1vbnRoKClcIlxuICAgICAgICAgICAgKHByZXZpb3VzTW9udGhTZWxlY3QpPVwiZGlzcGxheVByZXZpb3VzTW9udGgoKVwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyLWRheS12aWV3PlxuICAgICAgICA8ZmQtY2FsZW5kYXItbW9udGgtdmlld1xuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtb250aCdcIlxuICAgICAgICAgICAgW21vbnRoU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC5tb250aFwiXG4gICAgICAgICAgICBbeWVhcl09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgKG1vbnRoQ2xpY2tlZCk9XCJoYW5kbGVNb250aFZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyLW1vbnRoLXZpZXc+XG4gICAgICAgIDxmZC1jYWxlbmRhci15ZWFyLXZpZXdcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIneWVhcidcIlxuICAgICAgICAgICAgW3llYXJTZWxlY3RlZF09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW3llYXJWaWV3R3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW2ZvY3VzRXNjYXBlRnVuY3Rpb25dPVwiZXNjYXBlRm9jdXNGdW5jdGlvblwiXG4gICAgICAgICAgICAoeWVhckNsaWNrZWQpPVwic2VsZWN0ZWRZZWFyKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvZmQtY2FsZW5kYXIteWVhci12aWV3PlxuICAgICAgICA8ZmQtY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXdcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYWdncmVnYXRlZFllYXInXCJcbiAgICAgICAgICAgICh5ZWFyc0NsaWNrZWQpPVwic2VsZWN0ZWRZZWFycygkZXZlbnQpXCJcbiAgICAgICAgICAgIFt5ZWFyU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgIFt5ZWFyVmlld0dyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW2ZvY3VzRXNjYXBlRnVuY3Rpb25dPVwiZXNjYXBlRm9jdXNGdW5jdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgPC9mZC1jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|