@fundamental-ngx/core 0.35.0-rc.1 → 0.35.0-rc.2
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/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/date-picker/date-picker.component.d.ts +11 -7
- package/date-picker/esm2020/date-picker.component.mjs +16 -8
- package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs +15 -7
- package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs +15 -7
- package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/datetime-picker.component.d.ts +6 -2
- package/datetime-picker/esm2020/datetime-picker.component.mjs +11 -3
- package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs +10 -2
- package/datetime-picker/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs +10 -2
- package/datetime-picker/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/date-picker/date-picker.component.mjs +16 -8
- package/esm2020/datetime-picker/datetime-picker.component.mjs +11 -3
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-date-picker.mjs +15 -7
- package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +10 -2
- package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-date-picker.mjs +15 -7
- package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +10 -2
- package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/package.json +1 -1
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/package.json +1 -1
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
package/action-bar/package.json
CHANGED
package/alert/package.json
CHANGED
package/avatar/package.json
CHANGED
package/bar/package.json
CHANGED
package/breadcrumb/package.json
CHANGED
package/button/package.json
CHANGED
package/calendar/package.json
CHANGED
package/card/package.json
CHANGED
package/carousel/package.json
CHANGED
package/checkbox/package.json
CHANGED
package/combobox/package.json
CHANGED
|
@@ -30,7 +30,7 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
30
30
|
placeholder: string;
|
|
31
31
|
/** Whether this is the compact input date picker */
|
|
32
32
|
compact?: boolean;
|
|
33
|
-
/**
|
|
33
|
+
/** ID attribute for input element inside DatePicker component */
|
|
34
34
|
inputId: string;
|
|
35
35
|
/** If it is mandatory field */
|
|
36
36
|
required: boolean;
|
|
@@ -56,11 +56,11 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
56
56
|
rangeHoverEffect: boolean;
|
|
57
57
|
/** Whether to validate the date picker input. */
|
|
58
58
|
useValidation: boolean;
|
|
59
|
-
/** Aria
|
|
59
|
+
/** Aria-label for the datepicker input. */
|
|
60
60
|
dateInputLabel: string;
|
|
61
|
-
/** Aria
|
|
61
|
+
/** Aria-label for the datepicker input. */
|
|
62
62
|
dateRangeInputLabel: string;
|
|
63
|
-
/** Aria
|
|
63
|
+
/** Aria-label for the button to show/hide the calendar. */
|
|
64
64
|
displayCalendarToggleLabel: string;
|
|
65
65
|
/**
|
|
66
66
|
* Value state "success" aria message.
|
|
@@ -103,7 +103,7 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
103
103
|
nextButtonDisableFunction: NavigationButtonDisableFunction<D>;
|
|
104
104
|
/**
|
|
105
105
|
* The state of the form control - applies css classes.
|
|
106
|
-
* Also this is applied to message.
|
|
106
|
+
* Also, this is applied to message.
|
|
107
107
|
* Can be `success`, `error`, `warning`, `information` or blank for default.
|
|
108
108
|
*/
|
|
109
109
|
set state(state: Nullable<FormStates>);
|
|
@@ -153,6 +153,10 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
153
153
|
*/
|
|
154
154
|
set processInputOnBlur(v: boolean);
|
|
155
155
|
get processInputOnBlur(): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.
|
|
158
|
+
*/
|
|
159
|
+
preventScrollOnFocus: boolean;
|
|
156
160
|
/** @hidden */
|
|
157
161
|
_processInputOnBlur: boolean;
|
|
158
162
|
/** Event emitted when the state of the isOpen property changes. */
|
|
@@ -168,7 +172,7 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
168
172
|
/** @hidden */
|
|
169
173
|
_inputGroupElement: ElementRef;
|
|
170
174
|
/** @hidden */
|
|
171
|
-
_inputElement: ElementRef
|
|
175
|
+
_inputElement: ElementRef<HTMLInputElement>;
|
|
172
176
|
/** @hidden The value of the input */
|
|
173
177
|
_inputFieldDate: string | null;
|
|
174
178
|
/** @hidden Whether the date input is invalid */
|
|
@@ -296,5 +300,5 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
|
|
|
296
300
|
/** @hidden */
|
|
297
301
|
private _InitialiseVariablesInMessageService;
|
|
298
302
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent<any>, [null, { optional: true; }, { optional: true; }, null, { optional: true; }]>;
|
|
299
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent<any>, "fd-date-picker", never, { "type": "type"; "placeholder": "placeholder"; "compact": "compact"; "inputId": "inputId"; "required": "required"; "message": "message"; "messageTriggers": "messageTriggers"; "selectedDate": "selectedDate"; "selectedRangeDate": "selectedRangeDate"; "startingDayOfWeek": "startingDayOfWeek"; "rangeHoverEffect": "rangeHoverEffect"; "useValidation": "useValidation"; "dateInputLabel": "dateInputLabel"; "dateRangeInputLabel": "dateRangeInputLabel"; "displayCalendarToggleLabel": "displayCalendarToggleLabel"; "valueStateSuccessMessage": "valueStateSuccessMessage"; "valueStateInformationMessage": "valueStateInformationMessage"; "valueStateWarningMessage": "valueStateWarningMessage"; "valueStateErrorMessage": "valueStateErrorMessage"; "allowNull": "allowNull"; "activeView": "activeView"; "placement": "placement"; "appendTo": "appendTo"; "disabled": "disabled"; "closeOnDateChoose": "closeOnDateChoose"; "previousButtonDisableFunction": "previousButtonDisableFunction"; "nextButtonDisableFunction": "nextButtonDisableFunction"; "state": "state"; "buttonFocusable": "buttonFocusable"; "specialDaysRules": "specialDaysRules"; "yearGrid": "yearGrid"; "aggregatedYearGrid": "aggregatedYearGrid"; "markWeekends": "markWeekends"; "showWeekNumbers": "showWeekNumbers"; "isOpen": "isOpen"; "inline": "inline"; "processInputOnBlur": "processInputOnBlur"; "disableFunction": "disableFunction"; "disableRangeStartFunction": "disableRangeStartFunction"; "disableRangeEndFunction": "disableRangeEndFunction"; }, { "isOpenChange": "isOpenChange"; "selectedDateChange": "selectedDateChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "activeViewChange": "activeViewChange"; }, never, ["*"]>;
|
|
303
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent<any>, "fd-date-picker", never, { "type": "type"; "placeholder": "placeholder"; "compact": "compact"; "inputId": "inputId"; "required": "required"; "message": "message"; "messageTriggers": "messageTriggers"; "selectedDate": "selectedDate"; "selectedRangeDate": "selectedRangeDate"; "startingDayOfWeek": "startingDayOfWeek"; "rangeHoverEffect": "rangeHoverEffect"; "useValidation": "useValidation"; "dateInputLabel": "dateInputLabel"; "dateRangeInputLabel": "dateRangeInputLabel"; "displayCalendarToggleLabel": "displayCalendarToggleLabel"; "valueStateSuccessMessage": "valueStateSuccessMessage"; "valueStateInformationMessage": "valueStateInformationMessage"; "valueStateWarningMessage": "valueStateWarningMessage"; "valueStateErrorMessage": "valueStateErrorMessage"; "allowNull": "allowNull"; "activeView": "activeView"; "placement": "placement"; "appendTo": "appendTo"; "disabled": "disabled"; "closeOnDateChoose": "closeOnDateChoose"; "previousButtonDisableFunction": "previousButtonDisableFunction"; "nextButtonDisableFunction": "nextButtonDisableFunction"; "state": "state"; "buttonFocusable": "buttonFocusable"; "specialDaysRules": "specialDaysRules"; "yearGrid": "yearGrid"; "aggregatedYearGrid": "aggregatedYearGrid"; "markWeekends": "markWeekends"; "showWeekNumbers": "showWeekNumbers"; "isOpen": "isOpen"; "inline": "inline"; "processInputOnBlur": "processInputOnBlur"; "preventScrollOnFocus": "preventScrollOnFocus"; "disableFunction": "disableFunction"; "disableRangeStartFunction": "disableRangeStartFunction"; "disableRangeEndFunction": "disableRangeEndFunction"; }, { "isOpenChange": "isOpenChange"; "selectedDateChange": "selectedDateChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "activeViewChange": "activeViewChange"; }, never, ["*"]>;
|
|
300
304
|
}
|
|
@@ -59,11 +59,11 @@ export class DatePickerComponent {
|
|
|
59
59
|
this.rangeHoverEffect = false;
|
|
60
60
|
/** Whether to validate the date picker input. */
|
|
61
61
|
this.useValidation = true;
|
|
62
|
-
/** Aria
|
|
62
|
+
/** Aria-label for the datepicker input. */
|
|
63
63
|
this.dateInputLabel = 'Date input';
|
|
64
|
-
/** Aria
|
|
64
|
+
/** Aria-label for the datepicker input. */
|
|
65
65
|
this.dateRangeInputLabel = 'Date range input';
|
|
66
|
-
/** Aria
|
|
66
|
+
/** Aria-label for the button to show/hide the calendar. */
|
|
67
67
|
this.displayCalendarToggleLabel = 'Open picker';
|
|
68
68
|
/**
|
|
69
69
|
* Value state "success" aria message.
|
|
@@ -135,6 +135,10 @@ export class DatePickerComponent {
|
|
|
135
135
|
this.isOpen = false;
|
|
136
136
|
/** Should date picker be inlined. */
|
|
137
137
|
this.inline = true;
|
|
138
|
+
/**
|
|
139
|
+
* Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.
|
|
140
|
+
*/
|
|
141
|
+
this.preventScrollOnFocus = false;
|
|
138
142
|
/** @hidden */
|
|
139
143
|
this._processInputOnBlur = false;
|
|
140
144
|
/** Event emitted when the state of the isOpen property changes. */
|
|
@@ -194,7 +198,7 @@ export class DatePickerComponent {
|
|
|
194
198
|
}
|
|
195
199
|
/**
|
|
196
200
|
* The state of the form control - applies css classes.
|
|
197
|
-
* Also this is applied to message.
|
|
201
|
+
* Also, this is applied to message.
|
|
198
202
|
* Can be `success`, `error`, `warning`, `information` or blank for default.
|
|
199
203
|
*/
|
|
200
204
|
set state(state) {
|
|
@@ -380,7 +384,7 @@ export class DatePickerComponent {
|
|
|
380
384
|
}
|
|
381
385
|
if (this.type === 'single') {
|
|
382
386
|
/**
|
|
383
|
-
* For single mode, if the date is invalid, model is changed, it
|
|
387
|
+
* For single mode, if the date is invalid, model is changed, it refreshes currently
|
|
384
388
|
* input field text, but it does not refresh currently displayed day
|
|
385
389
|
*/
|
|
386
390
|
selected = selected;
|
|
@@ -514,7 +518,9 @@ export class DatePickerComponent {
|
|
|
514
518
|
this._changeMessageVisibility();
|
|
515
519
|
// focus input control every time popup is closed
|
|
516
520
|
if (!isOpen && this._inputElement) {
|
|
517
|
-
this._inputElement.nativeElement.focus(
|
|
521
|
+
this._inputElement.nativeElement.focus({
|
|
522
|
+
preventScroll: this.preventScrollOnFocus
|
|
523
|
+
});
|
|
518
524
|
}
|
|
519
525
|
// focus calendar cell on opening
|
|
520
526
|
if (isOpen && this._calendarComponent) {
|
|
@@ -567,7 +573,7 @@ export class DatePickerComponent {
|
|
|
567
573
|
}
|
|
568
574
|
}
|
|
569
575
|
DatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }, { token: i3.ContentDensityService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
570
|
-
DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: DatePickerComponent, selector: "fd-date-picker", inputs: { type: "type", placeholder: "placeholder", compact: "compact", inputId: "inputId", required: "required", message: "message", messageTriggers: "messageTriggers", selectedDate: "selectedDate", selectedRangeDate: "selectedRangeDate", startingDayOfWeek: "startingDayOfWeek", rangeHoverEffect: "rangeHoverEffect", useValidation: "useValidation", dateInputLabel: "dateInputLabel", dateRangeInputLabel: "dateRangeInputLabel", displayCalendarToggleLabel: "displayCalendarToggleLabel", valueStateSuccessMessage: "valueStateSuccessMessage", valueStateInformationMessage: "valueStateInformationMessage", valueStateWarningMessage: "valueStateWarningMessage", valueStateErrorMessage: "valueStateErrorMessage", allowNull: "allowNull", activeView: "activeView", placement: "placement", appendTo: "appendTo", disabled: "disabled", closeOnDateChoose: "closeOnDateChoose", previousButtonDisableFunction: "previousButtonDisableFunction", nextButtonDisableFunction: "nextButtonDisableFunction", state: "state", buttonFocusable: "buttonFocusable", specialDaysRules: "specialDaysRules", yearGrid: "yearGrid", aggregatedYearGrid: "aggregatedYearGrid", markWeekends: "markWeekends", showWeekNumbers: "showWeekNumbers", isOpen: "isOpen", inline: "inline", processInputOnBlur: "processInputOnBlur", disableFunction: "disableFunction", disableRangeStartFunction: "disableRangeStartFunction", disableRangeEndFunction: "disableRangeEndFunction" }, outputs: { isOpenChange: "isOpenChange", selectedDateChange: "selectedDateChange", selectedRangeDateChange: "selectedRangeDateChange", activeViewChange: "activeViewChange" }, host: { listeners: { "blur": "onTouched()" }, properties: { "class.fd-date-picker": "true", "class.fd-date-picker-custom": "inline" } }, providers: [
|
|
576
|
+
DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: DatePickerComponent, selector: "fd-date-picker", inputs: { type: "type", placeholder: "placeholder", compact: "compact", inputId: "inputId", required: "required", message: "message", messageTriggers: "messageTriggers", selectedDate: "selectedDate", selectedRangeDate: "selectedRangeDate", startingDayOfWeek: "startingDayOfWeek", rangeHoverEffect: "rangeHoverEffect", useValidation: "useValidation", dateInputLabel: "dateInputLabel", dateRangeInputLabel: "dateRangeInputLabel", displayCalendarToggleLabel: "displayCalendarToggleLabel", valueStateSuccessMessage: "valueStateSuccessMessage", valueStateInformationMessage: "valueStateInformationMessage", valueStateWarningMessage: "valueStateWarningMessage", valueStateErrorMessage: "valueStateErrorMessage", allowNull: "allowNull", activeView: "activeView", placement: "placement", appendTo: "appendTo", disabled: "disabled", closeOnDateChoose: "closeOnDateChoose", previousButtonDisableFunction: "previousButtonDisableFunction", nextButtonDisableFunction: "nextButtonDisableFunction", state: "state", buttonFocusable: "buttonFocusable", specialDaysRules: "specialDaysRules", yearGrid: "yearGrid", aggregatedYearGrid: "aggregatedYearGrid", markWeekends: "markWeekends", showWeekNumbers: "showWeekNumbers", isOpen: "isOpen", inline: "inline", processInputOnBlur: "processInputOnBlur", preventScrollOnFocus: "preventScrollOnFocus", disableFunction: "disableFunction", disableRangeStartFunction: "disableRangeStartFunction", disableRangeEndFunction: "disableRangeEndFunction" }, outputs: { isOpenChange: "isOpenChange", selectedDateChange: "selectedDateChange", selectedRangeDateChange: "selectedRangeDateChange", activeViewChange: "activeViewChange" }, host: { listeners: { "blur": "onTouched()" }, properties: { "class.fd-date-picker": "true", "class.fd-date-picker-custom": "inline" } }, providers: [
|
|
571
577
|
{
|
|
572
578
|
provide: NG_VALUE_ACCESSOR,
|
|
573
579
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
@@ -684,6 +690,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
684
690
|
type: Input
|
|
685
691
|
}], processInputOnBlur: [{
|
|
686
692
|
type: Input
|
|
693
|
+
}], preventScrollOnFocus: [{
|
|
694
|
+
type: Input
|
|
687
695
|
}], isOpenChange: [{
|
|
688
696
|
type: Output
|
|
689
697
|
}], selectedDateChange: [{
|
|
@@ -708,4 +716,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
708
716
|
}], disableRangeEndFunction: [{
|
|
709
717
|
type: Input
|
|
710
718
|
}] } });
|
|
711
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlELE9BQU8sRUFDSCxpQkFBaUIsRUFJakIsU0FBUyxFQUVaLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxF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Z0JBT04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQU9OLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTiw2QkFBNkI7c0JBRDVCLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQVNGLEtBQUs7c0JBRFIsS0FBSztnQkFvQk4sZUFBZTtzQkFEZCxLQUFLO2dCQVdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFXTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBVU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFhRyxZQUFZO3NCQURwQixNQUFNO2dCQUtFLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3RELGFBQWE7c0JBRFosU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBdUJ6RCxlQUFlO3NCQURkLEtBQUs7Z0JBUU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQVFOLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IFBsYWNlbWVudCwgU3BlY2lhbERheVJ1bGUsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7XG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJUeXBlLFxuICAgIERheXNPZldlZWssXG4gICAgRmRDYWxlbmRhclZpZXcsXG4gICAgRGF0ZVJhbmdlLFxuICAgIENhbGVuZGFyWWVhckdyaWRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzLCBEQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5cbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb24gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuXG5sZXQgZGF0ZVBpY2tlckNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyIGFuZFxuICogZmQtY2FsZW5kYXIgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtcGlja2VyIFsobmdNb2RlbCldPVwiZGF0ZVwiPjwvZmQtZGF0ZS1waWNrZXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlci1jdXN0b21dJzogJ2lubGluZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZSxcbiAgICAgICAgUG9wb3ZlclNlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIERhdGUgcGlja2VyIGlucHV0IHBsYWNlaG9sZGVyIHN0cmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGNvbXBhY3QgaW5wdXQgZGF0ZSBwaWNrZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3Q/OiBib29sZWFuO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgaW5wdXQgZWxlbWVudCBpbnNpZGUgRGF0ZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgbWVzc2FnZSBib3guXG4gICAgICogIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2VUcmlnZ2Vycyh0cmlnZ2Vyczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVRyaWdnZXJzID0gdHJpZ2dlcnM7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBDYWxlbmRhckRheSBtb2RlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgLyoqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBvbi4gMSByZXByZXNlbnRzIFN1bmRheSwgMiBpcyBNb25kYXksIDMgaXMgVHVlc2RheSwgYW5kIHNvIG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBkYXkgY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQgb24gRGF5IFZpZXcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgZGF0ZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICB1c2VWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgZGF0ZXBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGVJbnB1dExhYmVsID0gJ0RhdGUgaW5wdXQnO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBkYXRlcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZVJhbmdlSW5wdXRMYWJlbCA9ICdEYXRlIHJhbmdlIGlucHV0JztcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgYnV0dG9uIHRvIHNob3cvaGlkZSB0aGUgY2FsZW5kYXIuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCA9ICdPcGVuIHBpY2tlcic7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcInN1Y2Nlc3NcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgPSAnVmFsdWUgc3RhdGUgU3VjY2Vzcyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImluZm9ybWF0aW9uXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSA9ICdWYWx1ZSBzdGF0ZSBJbmZvcm1hdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcIndhcm5pbmdcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgPSAnVmFsdWUgc3RhdGUgV2FybmluZyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImVycm9yXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSA9ICdWYWx1ZSBzdGF0ZSBFcnJvcic7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRhdGUgcGlja2VyIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgZGF0ZSBjaG9vc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25EYXRlQ2hvb3NlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIG5leHQgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBjb250cm9sIC0gYXBwbGllcyBjc3MgY2xhc3Nlcy5cbiAgICAgKiAgQWxzbyB0aGlzIGlzIGFwcGxpZWQgdG8gbWVzc2FnZS5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXRlKHN0YXRlOiBOdWxsYWJsZTxGb3JtU3RhdGVzPikge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlIHx8ICdkZWZhdWx0JztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gc3RhdGUgfHwgJ2RlZmF1bHQnO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09IG51bGwgJiYgdGhpcy51c2VWYWxpZGF0aW9uICYmIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX3NwZWNpYWwtZGF5LS17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcGlja2VyIGlzIG9wZW4uIENhbiBiZSB1c2VkIHRocm91Z2ggdHdvLXdheSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogU2hvdWxkIGRhdGUgcGlja2VyIGJlIGlubGluZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZWNhbGN1bGF0ZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBhcyB1c2VyIHR5cGVzIG9yIG9uIGJsdXIuXG4gICAgICogQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGUgdmFsdWUgYXMgdXNlciB0eXBlcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHByb2Nlc3NJbnB1dE9uQmx1cih2OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NJbnB1dE9uQmx1ciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG4gICAgZ2V0IHByb2Nlc3NJbnB1dE9uQmx1cigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NJbnB1dE9uQmx1cjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBpc09wZW4gcHJvcGVydHkgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRmlyZWQgd2hlbiBhIG5ldyBkYXRlIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TnVsbGFibGU8RD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIHJhbmdlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U8RD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyQ29tcG9uZW50KVxuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBDb21wb25lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfaW5wdXRHcm91cEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBXaGV0aGVyIHRoZSBkYXRlIGlucHV0IGlzIGludmFsaWQgKi9cbiAgICBfaXNJbnZhbGlkRGF0ZUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZCA9IGBmZC1kYXRlLXBpY2tlci1mb3JtLW1lc3NhZ2UtJHtkYXRlUGlja2VyQ291bnRlcisrfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBzdGFydCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcmFuZ2VEZWxpbWl0ZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5yYW5nZURlbGltaXRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIGlucHV0IGFyaWEgbGFiZWwgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3JhbmdlJyA/IHRoaXMuZGF0ZVJhbmdlSW5wdXRMYWJlbCA6IHRoaXMuZGF0ZUlucHV0TGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0aW9uUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9wb3BvdmVyRm9ybU1lc3NhZ2U6IFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SW5wdXREYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb21wYWN0ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY29udGVudERlbnNpdHlTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UuX2lzQ29tcGFjdERlbnNpdHkuc3Vic2NyaWJlKChpc0NvbXBhY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wYWN0ID0gaXNDb21wYWN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY2xvc2VGcm9tQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnICYmIHRoaXMuY2xvc2VPbkRhdGVDaG9vc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBjYWxlbmRhciAqL1xuICAgIG9wZW5DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGNhbGVuZGFyIG9wZW4gb3IgY2xvc2VkICovXG4gICAgcHVibGljIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgY2FsZW5kYXIgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBzaW5nbGUgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZVNpbmdsZURhdGVDaGFuZ2UoZGF0ZTogRCk6IHZvaWQge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdElucHV0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBkYXRlIGZvcm1hdHRpbmcgaW4gdGhlIGRhdGUgY29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXRJbnB1dERhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gY2FsZW5kYXIgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHJhbmdlIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVSYW5nZURhdGVDaGFuZ2UoZGF0ZXM6IERhdGVSYW5nZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRlcyAmJlxuICAgICAgICAgICAgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0LCBkYXRlcy5zdGFydCkgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQsIGRhdGVzLmVuZCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2UoZGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGRhdGVzLnN0YXJ0LCBlbmQ6IGRhdGVzLmVuZCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0IGlucHV0IGlzIGNvbmZpcm1lZCB0byBiYSBjaGFuZ2VkLCBieSBjbGlja2luZyBlbnRlciwgb3IgYmx1clxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVJbnB1dENoYW5nZShzdHJEYXRlOiBzdHJpbmcsIGlzVHlwZUV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICgoaXNUeXBlRXZlbnQgJiYgdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpIHx8ICghaXNUeXBlRXZlbnQgJiYgIXRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSkge1xuICAgICAgICAgICAgLy8gaWYgcHJvY2Vzc0lucHV0T25CbHVyID09PSB0cnVlLCBpZ25vcmUgdHlwZSBldmVudFxuICAgICAgICAgICAgLy8gaWYgcHJvY2Vzc0lucHV0T25CbHVyID09PSBmYWxzZSwgaWdub3JlIGJsdXIvZW50ZXIgZXZlbnRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVTdHJpbmdVcGRhdGUoc3RyRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBWYWxpZGF0b3IgSW50ZXJmYWNlLCBhZGRzIHZhbGlkYXRpb24gc3VwcG9ydCBmb3IgZm9ybXNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9kZWxWYWxpZCgpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZVZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55KSA9PiB7IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogRGF0ZVJhbmdlPEQ+IHwgRCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgLyoqIElmIHdyaXR0ZW4gdmFsdWUgaXMgbm90IGRlZmluZWQsIG51bGwsIGVtcHR5IHN0cmluZyAqL1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciBzaW5nbGUgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgaXQgcmVmcmVzaCBjdXJyZW50bHlcbiAgICAgICAgICAgICAqIGlucHV0IGZpZWxkIHRleHQsIGJ1dCBpdCBkb2VzIG5vdCByZWZyZXNoIGN1cnJlbnRseSBkaXNwbGF5ZWQgZGF5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQgYXMgRDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciByYW5nZSBtb2RlLCBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBtb2RlbCBpcyBjaGFuZ2VkLCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHlcbiAgICAgICAgICAgICAqIGRpc3BsYXllZCBkYXkgdmlldywgb3IgaW5wdXQgZmllbGQgdGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkIGFzIERhdGVSYW5nZTxEPjtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkPy5zdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBzZWxlY3RlZC5zdGFydCwgZW5kOiBzZWxlY3RlZC5lbmQgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1JhbmdlTW9kZWxWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2Uoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2Zvcm1pbmcgc3RyaW5nIHRvIGRhdGUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dFxuICAgICAqL1xuICAgIGRhdGVTdHJpbmdVcGRhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVN0cjtcbiAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyBzaW5nbGUgbW9kZSAqL1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGVTdHIsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuXG4gICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsLCBpZiBzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIGFueSBjaGFuZ2VzICovXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQoZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZSBpcyB2YWxpZCwgaWYgaXQncyBub3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVmcmVzaCBjYWxlbmRhciAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRGF0ZSBpbiBtb2RlbCBpcyBjaGFuZ2VkIG5vIG1hdHRlciBpZiB0aGUgcGFyc2VkIGRhdGUgZnJvbSBzdHJpbmcgaXMgdmFsaWQgb3Igbm90LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyByYW5nZSBtb2RlICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW3N0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0cl0gPSBkYXRlU3RyLnNwbGl0KHRoaXMuX3JhbmdlRGVsaW1pdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShzdGFydERhdGVTdHIsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShlbmREYXRlU3RyLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayBpZiBkYXRlcyBhcmUgZXF1YWwsIGlmIGRhdGVzIGFyZSB0aGUgc2FtZSB0aGVyZSBpcyBubyBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXNcbiAgICAgICAgICAgICAqIERhdGUgaW4gbW9kZWwgaXMgY2hhbmdlZCBubyBtYXR0ZXIgaWYgdGhlIHBhcnNlZCBkYXRlcyBmcm9tIHN0cmluZyBhcmUgdmFsaWQgb3Igbm90LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHN0YXJ0RGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZW5kRGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBlbmQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUsIHRoZXJlIGlzIG5lZWQgdG8gcmVwbGFjZSB0aGVtICAqL1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChlbmREYXRlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoc3RhcnREYXRlLCBlbmREYXRlKSA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBlbmREYXRlLCBlbmQ6IHN0YXJ0RGF0ZSB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogc3RhcnREYXRlLCBlbmQ6IGVuZERhdGUgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNSYW5nZU1vZGVsVmFsaWQoc2VsZWN0ZWRSYW5nZURhdGUpO1xuXG4gICAgICAgICAgICAgICAgLyoqIFdob2xlIG9iamVjdCBpcyBjaGFuZ2VkLCBldmVuIGl0J3MgaW52YWxpZCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuXG4gICAgICAgICAgICAgICAgLyoqIENoZWNrIGlmIHN0YXJ0IGRhdGUgaXMgdmFsaWQsIGlmIGl0J3Mgbm90LCB0aGVyZSBpcyBubyBuZWVkIG8gcmVmcmVzaCBjYWxlbmRhciAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0YXJ0RGF0ZVZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNNb2RlbFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2luZ2xlTW9kZWxWYWxpZCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSYW5nZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uT3BlblN0YXRlQ2hhbmdlZChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICAvLyBmb2N1cyBpbnB1dCBjb250cm9sIGV2ZXJ5IHRpbWUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgIGlmICghaXNPcGVuICYmIHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBjYWxlbmRhciBjZWxsIG9uIG9wZW5pbmdcbiAgICAgICAgaWYgKGlzT3BlbiAmJiB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHJhbmdlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1JhbmdlTW9kZWxWYWxpZChmZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmRSYW5nZURhdGUgJiYgdGhpcy5faXNTdGFydERhdGVWYWxpZChmZFJhbmdlRGF0ZS5zdGFydCkgJiYgdGhpcy5faXNFbmREYXRlVmFsaWQoZmRSYW5nZURhdGUuZW5kKSkgfHxcbiAgICAgICAgICAgICghZmRSYW5nZURhdGUuc3RhcnQgJiYgIWZkUmFuZ2VEYXRlLmVuZCAmJiB0aGlzLmFsbG93TnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIGVuZCBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNFbmREYXRlVmFsaWQoZW5kRGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKGVuZERhdGUpICYmICF0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKGVuZERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgc3RhcnQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU3RhcnREYXRlVmFsaWQoc3RhcnREYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRlVmFsaWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKHN0YXJ0RGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBnaXZlbiBkYXRlIG1vZGVsIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBkYXRlIGlzIEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVSYW5nZShkYXRlUmFuZ2U6IERhdGVSYW5nZTxEPik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZVJhbmdlLmVuZCk7XG4gICAgICAgIHJldHVybiBzdGFydERhdGUgKyB0aGlzLl9yYW5nZURlbGltaXRlciArIGVuZERhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2UgfHwgJyc7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gdGhpcy5fc3RhdGU7XG4gICAgfVxufVxuIiwiPGZkLXBvcG92ZXJcbiAgICBbKGlzT3BlbildPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vbk9wZW5TdGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbZm9jdXNUcmFwcGVkXT1cInRydWVcIlxuICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuPlxuICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIGdseXBoPVwiYXBwb2ludG1lbnQtMlwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cImRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWxcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJncmlkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9kYXRlSW5wdXRBcmlhbExhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVJbnB1dENoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCBmYWxzZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICA8ZmQtcG9wb3Zlci1ib2R5IFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiPlxuICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlIFtlbWJlZGRlZF09XCJ0cnVlXCIgKm5nSWY9XCJfbWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxmZC1jYWxlbmRhclxuICAgICAgICAgICAgKGNsb3NlQ2FsZW5kYXIpPVwiY2xvc2VGcm9tQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgKGFjdGl2ZVZpZXdDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW2NhbFR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbcmFuZ2VIb3ZlckVmZmVjdF09XCJyYW5nZUhvdmVyRWZmZWN0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uID8gZGlzYWJsZUZ1bmN0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uID8gZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbiA6IG51bGxcIlxuICAgICAgICAgICAgW2Rpc2FibGVSYW5nZUVuZEZ1bmN0aW9uXT1cImRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uID8gZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24gOiBudWxsXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFJhbmdlRGF0ZV09XCJzZWxlY3RlZFJhbmdlRGF0ZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwiaGFuZGxlUmFuZ2VEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJoYW5kbGVTaW5nbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICAgICAgICAgIFtwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgPC9mZC1wb3BvdmVyLWJvZHk+XG48L2ZkLXBvcG92ZXI+XG5cbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfZm9ybVZhbHVlU3RhdGVNZXNzYWdlSWRcIiBhcmlhLWF0b21pYz1cInRydWVcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3RhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdWNjZXNzJ1wiPnt7IHZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZm9ybWF0aW9uJ1wiPnt7IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid3YXJuaW5nJ1wiPnt7IHZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiPnt7IHZhbHVlU3RhdGVFcnJvck1lc3NhZ2UgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIHt7IF9tZXNzYWdlIH19XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
719
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlELE9BQU8sRUFDSCxpQkFBaUIsRUFJakIsU0FBUyxFQUVaLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxF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QUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IFBsYWNlbWVudCwgU3BlY2lhbERheVJ1bGUsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7XG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJUeXBlLFxuICAgIERheXNPZldlZWssXG4gICAgRmRDYWxlbmRhclZpZXcsXG4gICAgRGF0ZVJhbmdlLFxuICAgIENhbGVuZGFyWWVhckdyaWRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzLCBEQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5cbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb24gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuXG5sZXQgZGF0ZVBpY2tlckNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyIGFuZFxuICogZmQtY2FsZW5kYXIgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtcGlja2VyIFsobmdNb2RlbCldPVwiZGF0ZVwiPjwvZmQtZGF0ZS1waWNrZXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlci1jdXN0b21dJzogJ2lubGluZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZSxcbiAgICAgICAgUG9wb3ZlclNlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIERhdGUgcGlja2VyIGlucHV0IHBsYWNlaG9sZGVyIHN0cmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGNvbXBhY3QgaW5wdXQgZGF0ZSBwaWNrZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3Q/OiBib29sZWFuO1xuXG4gICAgLyoqIElEIGF0dHJpYnV0ZSBmb3IgaW5wdXQgZWxlbWVudCBpbnNpZGUgRGF0ZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgbWVzc2FnZSBib3guXG4gICAgICogIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2VUcmlnZ2Vycyh0cmlnZ2Vyczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVRyaWdnZXJzID0gdHJpZ2dlcnM7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBDYWxlbmRhckRheSBtb2RlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgLyoqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBvbi4gMSByZXByZXNlbnRzIFN1bmRheSwgMiBpcyBNb25kYXksIDMgaXMgVHVlc2RheSwgYW5kIHNvIG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBkYXkgY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQgb24gRGF5IFZpZXcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgZGF0ZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICB1c2VWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciB0aGUgZGF0ZXBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGVJbnB1dExhYmVsID0gJ0RhdGUgaW5wdXQnO1xuXG4gICAgLyoqIEFyaWEtbGFiZWwgZm9yIHRoZSBkYXRlcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZVJhbmdlSW5wdXRMYWJlbCA9ICdEYXRlIHJhbmdlIGlucHV0JztcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciB0aGUgYnV0dG9uIHRvIHNob3cvaGlkZSB0aGUgY2FsZW5kYXIuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCA9ICdPcGVuIHBpY2tlcic7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcInN1Y2Nlc3NcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgPSAnVmFsdWUgc3RhdGUgU3VjY2Vzcyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImluZm9ybWF0aW9uXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSA9ICdWYWx1ZSBzdGF0ZSBJbmZvcm1hdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcIndhcm5pbmdcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgPSAnVmFsdWUgc3RhdGUgV2FybmluZyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImVycm9yXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSA9ICdWYWx1ZSBzdGF0ZSBFcnJvcic7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRhdGUgcGlja2VyIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgZGF0ZSBjaG9vc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25EYXRlQ2hvb3NlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIG5leHQgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBjb250cm9sIC0gYXBwbGllcyBjc3MgY2xhc3Nlcy5cbiAgICAgKiAgQWxzbywgdGhpcyBpcyBhcHBsaWVkIHRvIG1lc3NhZ2UuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZShzdGF0ZTogTnVsbGFibGU8Rm9ybVN0YXRlcz4pIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZSB8fCAnZGVmYXVsdCc7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlVHlwZSA9IHN0YXRlIHx8ICdkZWZhdWx0JztcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PSBudWxsICYmIHRoaXMudXNlVmFsaWRhdGlvbiAmJiB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGF0ZTogRm9ybVN0YXRlcyA9ICdkZWZhdWx0JztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgQWRkT24gQnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGVcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIG1hcmssIGl0IGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYXJyYXkgb2Ygb2JqZWN0IHdpdGhcbiAgICAgKiBTcGVjaWFsIGRheSBudW1iZXIsIGxpc3QgMS0yMCBbY2xhc3M6YGZkLWNhbGVuZGFyX19zcGVjaWFsLWRheS0te3tudW1iZXJ9fWBdIGlzIGF2YWlsYWJsZSB0aGVyZTpcbiAgICAgKiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtc3R5bGVzL2NvbXBvbmVudHMvY2FsZW5kYXIuaHRtbCBjYWxlbmRhciBzcGVjaWFsIGRheXMgc2VjdGlvblxuICAgICAqIFJ1bGUgYWNjZXB0cyBtZXRob2Qgd2l0aCBGZERhdGUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLiBleDpcbiAgICAgKiBgcnVsZTogKGZkRGF0ZTogRmREYXRlKSA9PiBmZERhdGUuZ2V0RGF5KCkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGVjaWFsRGF5c1J1bGVzOiBTcGVjaWFsRGF5UnVsZTxEPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogNVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIGFnZ3JlZ2F0ZWQgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFnZ3JlZ2F0ZWRZZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogM1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBzdW5kYXkvc2F0dXJkYXkgd2l0aCBgZmQtY2FsZW5kYXJfX2l0ZW0tLXdlZWtlbmRgIGNsYXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXJrV2Vla2VuZHMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHBpY2tlciBpcyBvcGVuLiBDYW4gYmUgdXNlZCB0aHJvdWdoIHR3by13YXkgYmluZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFNob3VsZCBkYXRlIHBpY2tlciBiZSBpbmxpbmVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5saW5lID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcm9jZXNzSW5wdXRPbkJsdXIodjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuICAgIGdldCBwcm9jZXNzSW5wdXRPbkJsdXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmcgZGF0ZSBwaWNrZXIgaW5wdXQgZmllbGQgYWZ0ZXIgY2FsZW5kYXIgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2Nlc3NJbnB1dE9uQmx1ciA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBGaXJlZCB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBmaXJzdCBvciBsYXN0IGRhdGUgaW4gcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFyQ29tcG9uZW50OiBDYWxlbmRhckNvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9pbnB1dEdyb3VwRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9pbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIGlucHV0ICovXG4gICAgX2lucHV0RmllbGREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIFdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgaXMgaW52YWxpZCAqL1xuICAgIF9pc0ludmFsaWREYXRlSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2Zvcm1WYWx1ZVN0YXRlTWVzc2FnZUlkID0gYGZkLWRhdGUtcGlja2VyLWZvcm0tbWVzc2FnZS0ke2RhdGVQaWNrZXJDb3VudGVyKyt9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZUZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIHN0YXJ0IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIGVuZCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9yYW5nZURlbGltaXRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLnJhbmdlRGVsaW1pdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERhdGUgaW5wdXQgYXJpYSBsYWJlbCBiYXNlZCBvbiB0eXBlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBfZGF0ZUlucHV0QXJpYWxMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAncmFuZ2UnID8gdGhpcy5kYXRlUmFuZ2VJbnB1dExhYmVsIDogdGhpcy5kYXRlSW5wdXRMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3Rpb25SZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAvLyBVc2UgQE9wdGlvbmFsIHRvIGF2b2lkIGFuZ3VsYXIgaW5qZWN0aW9uIGVycm9yIG1lc3NhZ2UgYW5kIHRocm93IG91ciBvd24gd2hpY2ggaXMgbW9yZSBwcmVjaXNlIG9uZVxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX3BvcG92ZXJGb3JtTWVzc2FnZTogUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udGVudERlbnNpdHlTZXJ2aWNlOiBDb250ZW50RGVuc2l0eVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignRGF0ZVRpbWVBZGFwdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignREFURV9USU1FX0ZPUk1BVFMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZS5faXNDb21wYWN0RGVuc2l0eS5zdWJzY3JpYmUoKGlzQ29tcGFjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBhY3QgPSBpc0NvbXBhY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZShhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdChhY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBjbG9zZUZyb21DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScgJiYgdGhpcy5jbG9zZU9uRGF0ZUNob29zZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIGNhbGVuZGFyICovXG4gICAgb3BlbkNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgY2FsZW5kYXIgb3BlbiBvciBjbG9zZWQgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gY2FsZW5kYXIgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SW5wdXREYXRlKGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdElucHV0RGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZVJhbmdlRGF0ZUNoYW5nZShkYXRlczogRGF0ZVJhbmdlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGVzICYmXG4gICAgICAgICAgICAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQsIGRhdGVzLnN0YXJ0KSB8fFxuICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCwgZGF0ZXMuZW5kKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogZGF0ZXMuc3RhcnQsIGVuZDogZGF0ZXMuZW5kIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHRleHQgaW5wdXQgaXMgY29uZmlybWVkIHRvIGJhIGNoYW5nZWQsIGJ5IGNsaWNraW5nIGVudGVyLCBvciBibHVyXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUlucHV0Q2hhbmdlKHN0ckRhdGU6IHN0cmluZywgaXNUeXBlRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKChpc1R5cGVFdmVudCAmJiB0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikgfHwgKCFpc1R5cGVFdmVudCAmJiAhdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpKSB7XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IHRydWUsIGlnbm9yZSB0eXBlIGV2ZW50XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IGZhbHNlLCBpZ25vcmUgYmx1ci9lbnRlciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVN0cmluZ1VwZGF0ZShzdHJEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhbGlkKClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHNlbGVjdGVkOiBhbnkpID0+IHsgdm9pZCB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciB0aGF0IGFsbG93cyB0byB1c2UgWyhuZ01vZGVsKV0gb3IgZm9ybXNcbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHNlbGVjdGVkOiBEYXRlUmFuZ2U8RD4gfCBEIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvKiogSWYgd3JpdHRlbiB2YWx1ZSBpcyBub3QgZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nICovXG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRm9yIHNpbmdsZSBtb2RlLCBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBtb2RlbCBpcyBjaGFuZ2VkLCBpdCByZWZyZXNoZXMgY3VycmVudGx5XG4gICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkIGFzIEQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHNlbGVjdGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShzZWxlY3RlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgKiBkaXNwbGF5ZWQgZGF5IHZpZXcsIG9yIGlucHV0IGZpZWxkIHRleHRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZD8uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogc2VsZWN0ZWQuc3RhcnQsIGVuZDogc2VsZWN0ZWQuZW5kIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNSYW5nZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShzZWxlY3RlZC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZVJhbmdlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmb3JtaW5nIHN0cmluZyB0byBkYXRlLCBkZXBlbmRpbmcgb24gdHlwZSBvclxuICAgICAqIHZhbGlkYXRpb24gdGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudC4gSXQgYWxzbyBjaGFuZ2VzIHRvIHN0YXRlIG9mIF9pc0ludmFsaWREYXRlSW5wdXRcbiAgICAgKi9cbiAgICBkYXRlU3RyaW5nVXBkYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IGRhdGVTdHI7XG4gICAgICAgIC8qKiBDYXNlIHdoZW4gdGhlcmUgaXMgc2luZ2xlIG1vZGUgKi9cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGlmICghZGF0ZVN0cikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlU3RyLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcblxuICAgICAgICAgICAgLyoqIENoZWNrIGlmIGRhdGVzIGFyZSBlcXVhbCwgaWYgc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBhbnkgY2hhbmdlcyAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgLyoqIENoZWNrIGlmIGRhdGUgaXMgdmFsaWQsIGlmIGl0J3Mgbm90LCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlZnJlc2ggY2FsZW5kYXIgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIERhdGUgaW4gbW9kZWwgaXMgY2hhbmdlZCBubyBtYXR0ZXIgaWYgdGhlIHBhcnNlZCBkYXRlIGZyb20gc3RyaW5nIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBDYXNlIHdoZW4gdGhlcmUgaXMgcmFuZ2UgbW9kZSAqL1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtzdGFydERhdGVTdHIsIGVuZERhdGVTdHJdID0gZGF0ZVN0ci5zcGxpdCh0aGlzLl9yYW5nZURlbGltaXRlcik7XG4gICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIucGFyc2Uoc3RhcnREYXRlU3RyLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIucGFyc2UoZW5kRGF0ZVN0ciwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLnBhcnNlLmRhdGVJbnB1dCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsLCBpZiBkYXRlcyBhcmUgdGhlIHNhbWUgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIGFueSBjaGFuZ2VzXG4gICAgICAgICAgICAgKiBEYXRlIGluIG1vZGVsIGlzIGNoYW5nZWQgbm8gbWF0dGVyIGlmIHRoZSBwYXJzZWQgZGF0ZXMgZnJvbSBzdHJpbmcgYXJlIHZhbGlkIG9yIG5vdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChzdGFydERhdGUsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGVuZERhdGUsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkUmFuZ2VEYXRlOiBEYXRlUmFuZ2U8RD4gfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8qKiBJZiB0aGUgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCB0aGVyZSBpcyBuZWVkIHRvIHJlcGxhY2UgdGhlbSAgKi9cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZW5kRGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPiAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogZW5kRGF0ZSwgZW5kOiBzdGFydERhdGUgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZSwgZW5kOiBlbmREYXRlIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHNlbGVjdGVkUmFuZ2VEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8qKiBXaG9sZSBvYmplY3QgaXMgY2hhbmdlZCwgZXZlbiBpdCdzIGludmFsaWQgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0gc2VsZWN0ZWRSYW5nZURhdGU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8qKiBDaGVjayBpZiBzdGFydCBkYXRlIGlzIHZhbGlkLCBpZiBpdCdzIG5vdCwgdGhlcmUgaXMgbm8gbmVlZCBvIHJlZnJlc2ggY2FsZW5kYXIgKi9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdGFydERhdGVWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzTW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk9wZW5TdGF0ZUNoYW5nZWQoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgLy8gZm9jdXMgaW5wdXQgY29udHJvbCBldmVyeSB0aW1lIHBvcHVwIGlzIGNsb3NlZFxuICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0aGlzLnByZXZlbnRTY3JvbGxPbkZvY3VzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBjYWxlbmRhciBjZWxsIG9uIG9wZW5pbmdcbiAgICAgICAgaWYgKGlzT3BlbiAmJiB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHJhbmdlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1JhbmdlTW9kZWxWYWxpZChmZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmRSYW5nZURhdGUgJiYgdGhpcy5faXNTdGFydERhdGVWYWxpZChmZFJhbmdlRGF0ZS5zdGFydCkgJiYgdGhpcy5faXNFbmREYXRlVmFsaWQoZmRSYW5nZURhdGUuZW5kKSkgfHxcbiAgICAgICAgICAgICghZmRSYW5nZURhdGUuc3RhcnQgJiYgIWZkUmFuZ2VEYXRlLmVuZCAmJiB0aGlzLmFsbG93TnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIGVuZCBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNFbmREYXRlVmFsaWQoZW5kRGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKGVuZERhdGUpICYmICF0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKGVuZERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgc3RhcnQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU3RhcnREYXRlVmFsaWQoc3RhcnREYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRlVmFsaWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKHN0YXJ0RGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBnaXZlbiBkYXRlIG1vZGVsIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBkYXRlIGlzIEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVSYW5nZShkYXRlUmFuZ2U6IERhdGVSYW5nZTxEPik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZVJhbmdlLmVuZCk7XG4gICAgICAgIHJldHVybiBzdGFydERhdGUgKyB0aGlzLl9yYW5nZURlbGltaXRlciArIGVuZERhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2UgfHwgJyc7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gdGhpcy5fc3RhdGU7XG4gICAgfVxufVxuIiwiPGZkLXBvcG92ZXJcbiAgICBbKGlzT3BlbildPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vbk9wZW5TdGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbZm9jdXNUcmFwcGVkXT1cInRydWVcIlxuICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuPlxuICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIGdseXBoPVwiYXBwb2ludG1lbnQtMlwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cImRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWxcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJncmlkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9kYXRlSW5wdXRBcmlhbExhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVJbnB1dENoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCBmYWxzZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICA8ZmQtcG9wb3Zlci1ib2R5IFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiPlxuICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlIFtlbWJlZGRlZF09XCJ0cnVlXCIgKm5nSWY9XCJfbWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxmZC1jYWxlbmRhclxuICAgICAgICAgICAgKGNsb3NlQ2FsZW5kYXIpPVwiY2xvc2VGcm9tQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgKGFjdGl2ZVZpZXdDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW2NhbFR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbcmFuZ2VIb3ZlckVmZmVjdF09XCJyYW5nZUhvdmVyRWZmZWN0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uID8gZGlzYWJsZUZ1bmN0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uID8gZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbiA6IG51bGxcIlxuICAgICAgICAgICAgW2Rpc2FibGVSYW5nZUVuZEZ1bmN0aW9uXT1cImRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uID8gZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24gOiBudWxsXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFJhbmdlRGF0ZV09XCJzZWxlY3RlZFJhbmdlRGF0ZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwiaGFuZGxlUmFuZ2VEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJoYW5kbGVTaW5nbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICAgICAgICAgIFtwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgPC9mZC1wb3BvdmVyLWJvZHk+XG48L2ZkLXBvcG92ZXI+XG5cbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfZm9ybVZhbHVlU3RhdGVNZXNzYWdlSWRcIiBhcmlhLWF0b21pYz1cInRydWVcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3RhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdWNjZXNzJ1wiPnt7IHZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZm9ybWF0aW9uJ1wiPnt7IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid3YXJuaW5nJ1wiPnt7IHZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiPnt7IHZhbHVlU3RhdGVFcnJvck1lc3NhZ2UgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIHt7IF9tZXNzYWdlIH19XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|