@fundamental-ngx/core 0.44.0-rc.6 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/action-bar/action-bar.component.mjs +3 -2
- package/esm2022/alert/alert-service/alert.service.mjs +3 -3
- package/esm2022/alert/alert-utils/alert-config.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-container.component.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-ref.mjs +3 -2
- package/esm2022/alert/alert.component.mjs +3 -3
- package/esm2022/alert/alert.module.mjs +3 -3
- package/esm2022/avatar/avatar.component.mjs +3 -3
- package/esm2022/bar/directives/bar-element.directive.mjs +3 -2
- package/esm2022/carousel/carousel.component.mjs +4 -4
- package/esm2022/date-picker/date-picker.component.mjs +9 -8
- package/esm2022/datetime-picker/datetime-picker.component.mjs +8 -7
- package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +3 -2
- package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +3 -2
- package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +4 -4
- package/esm2022/form/form-label/form-label.component.mjs +5 -4
- package/esm2022/inline-help/inline-help.directive.mjs +3 -2
- package/esm2022/input-group/input-group.component.mjs +4 -3
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list-item/list-item.component.mjs +6 -6
- package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +3 -2
- package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +3 -2
- package/esm2022/pagination/pagination.component.mjs +10 -10
- package/esm2022/popover/base/base-popover.class.mjs +5 -4
- package/esm2022/popover/popover.component.mjs +3 -2
- package/esm2022/product-switch/product-switch/product-switch.component.mjs +3 -2
- package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +3 -2
- package/esm2022/slider/slider.component.mjs +5 -4
- package/esm2022/split-button/split-button.component.mjs +4 -3
- package/esm2022/splitter/splitter.component.mjs +3 -2
- package/esm2022/step-input/step-input.component.mjs +4 -4
- package/esm2022/switch/switch.component.mjs +5 -4
- package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +3 -2
- package/esm2022/tabs/tab-list.component.mjs +3 -3
- package/esm2022/time/i18n/time-i18n.mjs +3 -2
- package/esm2022/token/token.component.mjs +4 -4
- package/esm2022/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +8 -7
- package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-alert.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-carousel.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +7 -6
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +5 -5
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-pagination.mjs +9 -9
- package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +6 -5
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-slider.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-step-input.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fundamental-ngx-core-v0.44.0.tgz +0 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.44.0-rc.6.tgz +0 -0
|
@@ -9,6 +9,7 @@ import { PopoverFormMessageService, registerFormItemControl } from '@fundamental
|
|
|
9
9
|
import { PopoverService } from '@fundamental-ngx/core/popover';
|
|
10
10
|
import { InputGroupInputDirective } from '@fundamental-ngx/core/input-group';
|
|
11
11
|
import { createMissingDateImplementationError } from './errors';
|
|
12
|
+
import { warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "@fundamental-ngx/core/datetime";
|
|
14
15
|
import * as i2 from "@fundamental-ngx/core/form";
|
|
@@ -48,7 +49,7 @@ export class DatePickerComponent {
|
|
|
48
49
|
* Aria-label for the datepicker input.
|
|
49
50
|
*/
|
|
50
51
|
set dateInputLabel(value) {
|
|
51
|
-
|
|
52
|
+
warnOnce("Property dateInputLabel is deprecated. Use i18n capabilities 'coreDatePicker.dateInputLabel' key instead.");
|
|
52
53
|
this._dateInputLabel = value;
|
|
53
54
|
}
|
|
54
55
|
get dateInputLabel() {
|
|
@@ -59,7 +60,7 @@ export class DatePickerComponent {
|
|
|
59
60
|
* Aria-label for the datepicker input.
|
|
60
61
|
*/
|
|
61
62
|
set dateRangeInputLabel(value) {
|
|
62
|
-
|
|
63
|
+
warnOnce("Property dateRangeInputLabel is deprecated. Use i18n capabilities 'coreDatePicker.dateRangeInputLabel' key instead.");
|
|
63
64
|
this._dateRangeInputLabel = value;
|
|
64
65
|
}
|
|
65
66
|
get dateRangeInputLabel() {
|
|
@@ -70,7 +71,7 @@ export class DatePickerComponent {
|
|
|
70
71
|
* Aria-label for the button to show/hide the calendar.
|
|
71
72
|
*/
|
|
72
73
|
set displayCalendarToggleLabel(value) {
|
|
73
|
-
|
|
74
|
+
warnOnce("Property displayCalendarToggleLabel is deprecated. Use i18n capabilities 'coreDatePicker.displayCalendarToggleLabel' key instead.");
|
|
74
75
|
this._displayCalendarToggleLabel = value;
|
|
75
76
|
}
|
|
76
77
|
get displayCalendarToggleLabel() {
|
|
@@ -81,7 +82,7 @@ export class DatePickerComponent {
|
|
|
81
82
|
* Value state "success" aria message.
|
|
82
83
|
*/
|
|
83
84
|
set valueStateSuccessMessage(value) {
|
|
84
|
-
|
|
85
|
+
warnOnce("Property valueStateSuccessMessage is deprecated. Use i18n capabilities 'coreDatePicker.valueStateSuccessMessage' key instead.");
|
|
85
86
|
this._valueStateSuccessMessage = value;
|
|
86
87
|
}
|
|
87
88
|
get valueStateSuccessMessage() {
|
|
@@ -92,7 +93,7 @@ export class DatePickerComponent {
|
|
|
92
93
|
* Value state "information" aria message.
|
|
93
94
|
*/
|
|
94
95
|
set valueStateInformationMessage(value) {
|
|
95
|
-
|
|
96
|
+
warnOnce("Property valueStateInformationMessage is deprecated. Use i18n capabilities 'coreDatePicker.valueStateInformationMessage' key instead.");
|
|
96
97
|
this._valueStateInformationMessage = value;
|
|
97
98
|
}
|
|
98
99
|
get valueStateInformationMessage() {
|
|
@@ -103,7 +104,7 @@ export class DatePickerComponent {
|
|
|
103
104
|
* Value state "warning" aria message.
|
|
104
105
|
*/
|
|
105
106
|
set valueStateWarningMessage(value) {
|
|
106
|
-
|
|
107
|
+
warnOnce("Property valueStateWarningMessage is deprecated. Use i18n capabilities 'coreDatePicker.valueStateWarningMessage' key instead.");
|
|
107
108
|
this._valueStateWarningMessage = value;
|
|
108
109
|
}
|
|
109
110
|
get valueStateWarningMessage() {
|
|
@@ -114,7 +115,7 @@ export class DatePickerComponent {
|
|
|
114
115
|
* Value state "error" aria message.
|
|
115
116
|
*/
|
|
116
117
|
set valueStateErrorMessage(value) {
|
|
117
|
-
|
|
118
|
+
warnOnce("Property valueStateErrorMessage is deprecated. Use i18n capabilities 'coreDatePicker.valueStateErrorMessage' key instead.");
|
|
118
119
|
this._valueStateErrorMessage = value;
|
|
119
120
|
}
|
|
120
121
|
get valueStateErrorMessage() {
|
|
@@ -823,4 +824,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
823
824
|
}], disableRangeEndFunction: [{
|
|
824
825
|
type: Input
|
|
825
826
|
}] } });
|
|
826
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFDSCxpQkFBaUIsRUFHakIsU0FBUyxFQUlaLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQW1CLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7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QUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBT04sNkJBQTZCO3NCQUQ1QixLQUFLO2dCQU9OLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFTRixLQUFLO3NCQURSLEtBQUs7Z0JBbUJOLGVBQWU7c0JBRGQsS0FBSztnQkFXTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixRQUFRO3NCQURQLEtBQUs7Z0JBV04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVVOLFlBQVk7c0JBRFgsS0FBSztnQkFPTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQWFOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFRRyxZQUFZO3NCQURwQixNQUFNO2dCQUtFLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBTzVCLGtCQUFrQjtzQkFIakIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDOUIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELGFBQWE7c0JBSFosU0FBUzt1QkFBQyx3QkFBd0IsRUFBRTt3QkFDakMsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQStDRCxlQUFlO3NCQURkLEtBQUs7Z0JBUU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQVFOLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyVHlwZSxcbiAgICBDYWxlbmRhclllYXJHcmlkLFxuICAgIERhdGVSYW5nZSxcbiAgICBEYXlzT2ZXZWVrLFxuICAgIEZkQ2FsZW5kYXJWaWV3LFxuICAgIE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb25cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG5sZXQgZGF0ZVBpY2tlckNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyIGFuZFxuICogZmQtY2FsZW5kYXIgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtcGlja2VyIFsobmdNb2RlbCldPVwiZGF0ZVwiPjwvZmQtZGF0ZS1waWNrZXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlci1jdXN0b21dJzogJ2lubGluZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQ8RD5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIERhdGUgcGlja2VyIGlucHV0IHBsYWNlaG9sZGVyIHN0cmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBJRCBhdHRyaWJ1dGUgZm9yIGlucHV0IGVsZW1lbnQgaW5zaWRlIERhdGVQaWNrZXIgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkOiBzdHJpbmc7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFRleHQgZGlzcGxheWVkIGluIG1lc3NhZ2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgbWVzc2FnZSBib3guXG4gICAgICogIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2VUcmlnZ2Vycyh0cmlnZ2Vyczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVRyaWdnZXJzID0gdHJpZ2dlcnM7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIENhbGVuZGFyRGF5IG1vZGVsICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZERhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRmREYXRlcyBtb2RlbCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+ID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICAvKiogVGhlIGRheSBvZiB0aGUgd2VlayB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IG9uLiAxIHJlcHJlc2VudHMgU3VuZGF5LCAyIGlzIE1vbmRheSwgMyBpcyBUdWVzZGF5LCBhbmQgc28gb24uICovXG4gICAgQElucHV0KClcbiAgICBzdGFydGluZ0RheU9mV2VlazogRGF5c09mV2VlaztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIGRheSBjZWxscyBvbiBob3Zlci5cbiAgICAgKiBXb3JrcyBvbmx5IG9uIHJhbmdlIG1vZGUsIHdoZW4gc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZCBvbiBEYXkgVmlldy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlSG92ZXJFZmZlY3QgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZVZhbGlkYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBBcmlhLWxhYmVsIGZvciB0aGUgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRlSW5wdXRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZGF0ZUlucHV0TGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlRGF0ZVBpY2tlci5kYXRlSW5wdXRMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGF0ZUlucHV0TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZGF0ZUlucHV0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVJbnB1dExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQXJpYS1sYWJlbCBmb3IgdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0ZVJhbmdlSW5wdXRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZGF0ZVJhbmdlSW5wdXRMYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVEYXRlUGlja2VyLmRhdGVSYW5nZUlucHV0TGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZGF0ZVJhbmdlSW5wdXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVJhbmdlSW5wdXRMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIEFyaWEtbGFiZWwgZm9yIHRoZSBidXR0b24gdG8gc2hvdy9oaWRlIHRoZSBjYWxlbmRhci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlRGF0ZVBpY2tlci5kaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogVmFsdWUgc3RhdGUgXCJzdWNjZXNzXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl92YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImluZm9ybWF0aW9uXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlByb3BlcnR5IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlSW5mb3JtYXRpb25NZXNzYWdlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl92YWx1ZVN0YXRlSW5mb3JtYXRpb25NZXNzYWdlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcIndhcm5pbmdcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWVTdGF0ZVdhcm5pbmdNZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFZhbHVlIHN0YXRlIFwiZXJyb3JcIiBhcmlhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZhbHVlU3RhdGVFcnJvck1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVTdGF0ZUVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRhdGUgcGlja2VyIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgZGF0ZSBjaG9vc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25EYXRlQ2hvb3NlID0gdHJ1ZTtcblxuICAgIC8qKiBFbmFibGVzIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gaWYgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RvZGF5QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogTGFiZWwgZm9yIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvZGF5QnV0dG9uTGFiZWwgPSAnVG9kYXknO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIHByZXZpb3VzIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgbmV4dCBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvLCB0aGlzIGlzIGFwcGxpZWQgdG8gbWVzc2FnZS5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXRlKHN0YXRlOiBOdWxsYWJsZTxGb3JtU3RhdGVzPikge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlIHx8ICdkZWZhdWx0JztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gc3RhdGUgfHwgJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHN0YXRlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT0gbnVsbCAmJiB0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX3NwZWNpYWwtZGF5LS17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcGlja2VyIGlzIG9wZW4uIENhbiBiZSB1c2VkIHRocm91Z2ggdHdvLXdheSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogU2hvdWxkIGRhdGUgcGlja2VyIGJlIGlubGluZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJvY2Vzc0lucHV0T25CbHVyKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0lucHV0T25CbHVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICAgIH1cblxuICAgIGdldCBwcm9jZXNzSW5wdXRPbkJsdXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmcgZGF0ZSBwaWNrZXIgaW5wdXQgZmllbGQgYWZ0ZXIgY2FsZW5kYXIgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2Nlc3NJbnB1dE9uQmx1ciA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBGaXJlZCB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBmaXJzdCBvciBsYXN0IGRhdGUgaW4gcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFyQ29tcG9uZW50OiBDYWxlbmRhckNvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBXaGV0aGVyIHRoZSBkYXRlIGlucHV0IGlzIGludmFsaWQgKi9cbiAgICBfaXNJbnZhbGlkRGF0ZUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZCA9IGBmZC1kYXRlLXBpY2tlci1mb3JtLW1lc3NhZ2UtJHtkYXRlUGlja2VyQ291bnRlcisrfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRlSW5wdXRMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZVN0YXRlSW5mb3JtYXRpb25NZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZVN0YXRlRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBzdGFydCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcmFuZ2VEZWxpbWl0ZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5yYW5nZURlbGltaXRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIGlucHV0IGFyaWEgbGFiZWwgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gcmV0dXJuIGVpdGhlciBpbnB1dCB2YWx1ZSBvciBhIGtleSBmb3IgXCJmZFRyYW5zbGF0ZVwiIHBpcGVcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3JhbmdlJyA/IHRoaXMuZGF0ZVJhbmdlSW5wdXRMYWJlbCA6IHRoaXMuZGF0ZUlucHV0TGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGF0ZSBpbnB1dCBhcmlhIGxhYmVsIGtleSBiYXNlZCBvbiB0eXBlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBfZGF0ZUlucHV0QXJpYWxMYWJlbEtleSgpOiBzdHJpbmcge1xuICAgICAgICAvLyByZXR1cm4gZWl0aGVyIGlucHV0IHZhbHVlIG9yIGEga2V5IGZvciBcImZkVHJhbnNsYXRlXCIgcGlwZVxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAncmFuZ2UnID8gJ2NvcmVEYXRlUGlja2VyLmRhdGVSYW5nZUlucHV0TGFiZWwnIDogJ2NvcmVEYXRlUGlja2VyLmRhdGVJbnB1dExhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3Rpb25SZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAvLyBVc2UgQE9wdGlvbmFsIHRvIGF2b2lkIGFuZ3VsYXIgaW5qZWN0aW9uIGVycm9yIG1lc3NhZ2UgYW5kIHRocm93IG91ciBvd24gd2hpY2ggaXMgbW9yZSBwcmVjaXNlIG9uZVxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX3BvcG92ZXJGb3JtTWVzc2FnZTogUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZVxuICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEYXRlVGltZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEQVRFX1RJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdElucHV0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY2xvc2VGcm9tQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnICYmIHRoaXMuY2xvc2VPbkRhdGVDaG9vc2UpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgY2FsZW5kYXIgKi9cbiAgICBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGNhbGVuZGFyIG9wZW4gb3IgY2xvc2VkICovXG4gICAgcHVibGljIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gY2FsZW5kYXIgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SW5wdXREYXRlKGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiB0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdElucHV0RGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZVJhbmdlRGF0ZUNoYW5nZShkYXRlczogRGF0ZVJhbmdlPEQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2hhbmdlZCA9ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlcy5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZENoYW5nZWQgPSAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZXMuZW5kLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCk7XG4gICAgICAgIGlmIChkYXRlcyAmJiAoc3RhcnRDaGFuZ2VkIHx8IGVuZENoYW5nZWQpKSB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRDbG9zZSA9IHRoaXMuY2xvc2VPbkRhdGVDaG9vc2UgJiYgZGF0ZXMuZW5kICE9PSBudWxsO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2UoZGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogZGF0ZXMuc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBkYXRlcy5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBUb2RheS1TZWxlY3Rpb24tQnV0dG9uIGNsaWNrZWQsIGl0IGNoYW5nZXMgc2VsZWN0ZWQgZGF0ZSBvciBkYXRlIHJhbmdlIHRvIHRvZGF5J3MgZGF0ZVxuICAgICAqL1xuICAgIG9uVG9kYXlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9kYXlEYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZURhdGVDaGFuZ2UodG9kYXlEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGcm9tQ2FsZW5kYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmFuZ2VEYXRlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICBzdGFydDogdG9kYXlEYXRlLFxuICAgICAgICAgICAgICAgIGVuZDogdG9kYXlEYXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCBpcyBjb25maXJtZWQgdG8gYmEgY2hhbmdlZCwgYnkgY2xpY2tpbmcgZW50ZXIsIG9yIGJsdXJcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2Uoc3RyRGF0ZTogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlU3RyaW5nVXBkYXRlKHN0ckRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgVmFsaWRhdG9yIEludGVyZmFjZSwgYWRkcyB2YWxpZGF0aW9uIHN1cHBvcnQgZm9yIGZvcm1zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vZGVsVmFsaWQoKVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKFxuICAgICAgICBmbjogKHNlbGVjdGVkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZvaWQ7XG4gICAgICAgIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHRoYXQgYWxsb3dzIHRvIHVzZSBbKG5nTW9kZWwpXSBvciBmb3Jtc1xuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IERhdGVSYW5nZTxEPiB8IEQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIC8qKiBJZiB3cml0dGVuIHZhbHVlIGlzIG5vdCBkZWZpbmVkLCBudWxsLCBlbXB0eSBzdHJpbmcgKi9cbiAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogbnVsbCxcbiAgICAgICAgICAgICAgICBlbmQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciBzaW5nbGUgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgaXQgcmVmcmVzaGVzIGN1cnJlbnRseVxuICAgICAgICAgICAgICogaW5wdXQgZmllbGQgdGV4dCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5IGRpc3BsYXllZCBkYXlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLl9wYXJzZURhdGUoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShzZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciByYW5nZSBtb2RlLCBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBtb2RlbCBpcyBjaGFuZ2VkLCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHlcbiAgICAgICAgICAgICAqIGRpc3BsYXllZCBkYXkgdmlldywgb3IgaW5wdXQgZmllbGQgdGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkIGFzIERhdGVSYW5nZTxEPjtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZD8uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLl9wYXJzZURhdGUoc2VsZWN0ZWQuZW5kKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShzZWxlY3RlZC5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2Uoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2Zvcm1pbmcgc3RyaW5nIHRvIGRhdGUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dFxuICAgICAqL1xuICAgIGRhdGVTdHJpbmdVcGRhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVN0cjtcbiAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyBzaW5nbGUgbW9kZSAqL1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fcGFyc2VEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsLCBpZiBzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIGFueSBjaGFuZ2VzICovXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQoZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZSBpcyB2YWxpZCwgaWYgaXQncyBub3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVmcmVzaCBjYWxlbmRhciAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRGF0ZSBpbiBtb2RlbCBpcyBjaGFuZ2VkIG5vIG1hdHRlciBpZiB0aGUgcGFyc2VkIGRhdGUgZnJvbSBzdHJpbmcgaXMgdmFsaWQgb3Igbm90LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyByYW5nZSBtb2RlICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbc3RhcnREYXRlU3RyLCBlbmREYXRlU3RyXSA9IGRhdGVTdHIuc3BsaXQodGhpcy5fcmFuZ2VEZWxpbWl0ZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fcGFyc2VEYXRlKHN0YXJ0RGF0ZVN0cik7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fcGFyc2VEYXRlKGVuZERhdGVTdHIpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIGlmIGRhdGVzIGFyZSBlcXVhbCwgaWYgZGF0ZXMgYXJlIHRoZSBzYW1lIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBhbnkgY2hhbmdlc1xuICAgICAgICAgICAgICogRGF0ZSBpbiBtb2RlbCBpcyBjaGFuZ2VkIG5vIG1hdHRlciBpZiB0aGUgcGFyc2VkIGRhdGVzIGZyb20gc3RyaW5nIGFyZSB2YWxpZCBvciBub3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoc3RhcnREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSB8fFxuICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChlbmREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvKiogSWYgdGhlIGVuZCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgZGF0ZSwgdGhlcmUgaXMgbmVlZCB0byByZXBsYWNlIHRoZW0gICovXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzdGFydERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGVuZERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShzdGFydERhdGUsIGVuZERhdGUpID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGVuZERhdGUsIGVuZDogc3RhcnREYXRlIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBzdGFydERhdGUsIGVuZDogZW5kRGF0ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNSYW5nZU1vZGVsVmFsaWQoc2VsZWN0ZWRSYW5nZURhdGUpO1xuXG4gICAgICAgICAgICAgICAgLyoqIFdob2xlIG9iamVjdCBpcyBjaGFuZ2VkLCBldmVuIGl0J3MgaW52YWxpZCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8qKiBDaGVjayBpZiBzdGFydCBkYXRlIGlzIHZhbGlkLCBpZiBpdCdzIG5vdCwgdGhlcmUgaXMgbm8gbmVlZCBvIHJlZnJlc2ggY2FsZW5kYXIgKi9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdGFydERhdGVWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzTW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk9wZW5TdGF0ZUNoYW5nZWQoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgLy8gZm9jdXMgaW5wdXQgY29udHJvbCBldmVyeSB0aW1lIHBvcHVwIGlzIGNsb3NlZFxuICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0aGlzLnByZXZlbnRTY3JvbGxPbkZvY3VzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBjYWxlbmRhciBjZWxsIG9uIG9wZW5pbmdcbiAgICAgICAgaWYgKGlzT3BlbiAmJiB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIGFueSkudmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHJhbmdlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1JhbmdlTW9kZWxWYWxpZChmZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmRSYW5nZURhdGUgJiYgdGhpcy5faXNTdGFydERhdGVWYWxpZChmZFJhbmdlRGF0ZS5zdGFydCkgJiYgdGhpcy5faXNFbmREYXRlVmFsaWQoZmRSYW5nZURhdGUuZW5kKSkgfHxcbiAgICAgICAgICAgICghZmRSYW5nZURhdGUuc3RhcnQgJiYgIWZkUmFuZ2VEYXRlLmVuZCAmJiB0aGlzLmFsbG93TnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIGVuZCBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNFbmREYXRlVmFsaWQoZW5kRGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKGVuZERhdGUpICYmICF0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKGVuZERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgc3RhcnQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU3RhcnREYXRlVmFsaWQoc3RhcnREYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRlVmFsaWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKHN0YXJ0RGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBnaXZlbiBkYXRlIG1vZGVsIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBkYXRlIGlzIEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RGF0ZVJhbmdlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZSArIHRoaXMuX3JhbmdlRGVsaW1pdGVyICsgZW5kRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaW5pdCh0aGlzLl9pbnB1dEdyb3VwRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gdGhpcy5fbWVzc2FnZSB8fCAnJztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZVR5cGUgPSB0aGlzLl9zdGF0ZTtcbiAgICB9XG59XG4iLCI8ZmQtcG9wb3ZlclxuICAgIFsoaXNPcGVuKV09XCJpc09wZW5cIlxuICAgIChpc09wZW5DaGFuZ2UpPVwiX29uT3BlblN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwiZmFsc2VcIlxuICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4+XG4gICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICAgICAjaW5wdXRHcm91cENvbXBvbmVudFxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIGdseXBoPVwiYXBwb2ludG1lbnQtMlwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cImRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsIHx8ICgnY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwgfHwgKCdjb3JlRGF0ZVBpY2tlci5kaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJncmlkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2RhdGVJbnB1dEFyaWFsTGFiZWwgfHwgKF9kYXRlSW5wdXRBcmlhbExhYmVsS2V5IHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJfb25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICA8ZmQtcG9wb3Zlci1ib2R5IFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiPlxuICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlIFtlbWJlZGRlZF09XCJ0cnVlXCIgKm5nSWY9XCJfbWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxmZC1jYWxlbmRhclxuICAgICAgICAgICAgKGNsb3NlQ2FsZW5kYXIpPVwiY2xvc2VGcm9tQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgIFttYXJrV2Vla2VuZHNdPVwibWFya1dlZWtlbmRzXCJcbiAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjYWxUeXBlXT1cInR5cGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlKT1cImhhbmRsZVJhbmdlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RlZERhdGVDaGFuZ2UpPVwiaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdGFydGluZ0RheU9mV2Vla109XCJzdGFydGluZ0RheU9mV2Vla1wiXG4gICAgICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwicHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICAgICAgW25leHRCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwibmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VG9kYXlCdXR0b25cIiBmZC1iYXIgYmFyRGVzaWduPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtsYWJlbF09XCJ0b2RheUJ1dHRvbkxhYmVsXCIgKGNsaWNrKT1cIm9uVG9kYXlCdXR0b25DbGljaygpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2ZkLXBvcG92ZXItYm9keT5cbjwvZmQtcG9wb3Zlcj5cblxuPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N1Y2Nlc3MnXCI+e3tcbiAgICAgICAgICAgICAgICB2YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgfHwgKCdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZm9ybWF0aW9uJ1wiPnt7XG4gICAgICAgICAgICAgICAgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSB8fCAoJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dhcm5pbmcnXCI+e3tcbiAgICAgICAgICAgICAgICB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgfHwgKCdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiPnt7XG4gICAgICAgICAgICAgICAgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSB8fCAoJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgX21lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
827
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFDSCxpQkFBaUIsRUFHakIsU0FBUyxFQUlaLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQW1CLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQztB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QkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBT04sNkJBQTZCO3NCQUQ1QixLQUFLO2dCQU9OLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFTRixLQUFLO3NCQURSLEtBQUs7Z0JBbUJOLGVBQWU7c0JBRGQsS0FBSztnQkFXTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixRQUFRO3NCQURQLEtBQUs7Z0JBV04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVVOLFlBQVk7c0JBRFgsS0FBSztnQkFPTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQWFOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFRRyxZQUFZO3NCQURwQixNQUFNO2dCQUtFLGtCQUFrQjtzQkFEMUIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBTzVCLGtCQUFrQjtzQkFIakIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRTt3QkFDOUIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELGFBQWE7c0JBSFosU0FBUzt1QkFBQyx3QkFBd0IsRUFBRTt3QkFDakMsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQStDRCxlQUFlO3NCQURkLEtBQUs7Z0JBUU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQVFOLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyVHlwZSxcbiAgICBDYWxlbmRhclllYXJHcmlkLFxuICAgIERhdGVSYW5nZSxcbiAgICBEYXlzT2ZXZWVrLFxuICAgIEZkQ2FsZW5kYXJWaWV3LFxuICAgIE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb25cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgTnVsbGFibGUsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcblxubGV0IGRhdGVQaWNrZXJDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgZGF0ZXRpbWUgcGlja2VyIGNvbXBvbmVudCBpcyBhbiBvcGluaW9uYXRlZCBjb21wb3NpdGlvbiBvZiB0aGUgZmQtcG9wb3ZlciBhbmRcbiAqIGZkLWNhbGVuZGFyIGNvbXBvbmVudHMgdG8gYWNjb21wbGlzaCB0aGUgVUkgcGF0dGVybiBmb3IgcGlja2luZyBhIGRhdGUuXG4gKlxuICogU3VwcG9ydHMgQW5ndWxhciBGb3Jtcy5cbiAqIGBgYGh0bWxcbiAqIDxmZC1kYXRlLXBpY2tlciBbKG5nTW9kZWwpXT1cImRhdGVcIj48L2ZkLWRhdGUtcGlja2VyPlxuICogYGBgXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlcl0nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MuZmQtZGF0ZS1waWNrZXItY3VzdG9tXSc6ICdpbmxpbmUnXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBQb3BvdmVyU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50PEQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFRoZSB0eXBlIG9mIGNhbGVuZGFyLCAnc2luZ2xlJyBmb3Igc2luZ2xlIGRhdGUgc2VsZWN0aW9uIG9yICdyYW5nZScgZm9yIGEgcmFuZ2Ugb2YgZGF0ZXMuICovXG4gICAgQElucHV0KClcbiAgICB0eXBlOiBDYWxlbmRhclR5cGUgPSAnc2luZ2xlJztcblxuICAgIC8qKiBEYXRlIHBpY2tlciBpbnB1dCBwbGFjZWhvbGRlciBzdHJpbmcgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKiogSUQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlUGlja2VyIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZDogc3RyaW5nO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBUZXh0IGRpc3BsYXllZCBpbiBtZXNzYWdlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBDYWxlbmRhckRheSBtb2RlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgLyoqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBvbi4gMSByZXByZXNlbnRzIFN1bmRheSwgMiBpcyBNb25kYXksIDMgaXMgVHVlc2RheSwgYW5kIHNvIG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBkYXkgY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQgb24gRGF5IFZpZXcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgZGF0ZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICB1c2VWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQXJpYS1sYWJlbCBmb3IgdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0ZUlucHV0TGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZGF0ZUlucHV0TGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlRGF0ZVBpY2tlci5kYXRlSW5wdXRMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGF0ZUlucHV0TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZGF0ZUlucHV0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVJbnB1dExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQXJpYS1sYWJlbCBmb3IgdGhlIGRhdGVwaWNrZXIgaW5wdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0ZVJhbmdlSW5wdXRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSBkYXRlUmFuZ2VJbnB1dExhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZURhdGVQaWNrZXIuZGF0ZVJhbmdlSW5wdXRMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXRMYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBkYXRlUmFuZ2VJbnB1dExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUmFuZ2VJbnB1dExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQXJpYS1sYWJlbCBmb3IgdGhlIGJ1dHRvbiB0byBzaG93L2hpZGUgdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBcIlByb3BlcnR5IGRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFZhbHVlIHN0YXRlIFwic3VjY2Vzc1wiIGFyaWEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl92YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZVN1Y2Nlc3NNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImluZm9ybWF0aW9uXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFZhbHVlIHN0YXRlIFwid2FybmluZ1wiIGFyaWEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZVdhcm5pbmdNZXNzYWdlIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZVdhcm5pbmdNZXNzYWdlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl92YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZVdhcm5pbmdNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBWYWx1ZSBzdGF0ZSBcImVycm9yXCIgYXJpYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlU3RhdGVFcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZhbHVlU3RhdGVFcnJvck1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVTdGF0ZUVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRhdGUgcGlja2VyIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgZGF0ZSBjaG9vc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25EYXRlQ2hvb3NlID0gdHJ1ZTtcblxuICAgIC8qKiBFbmFibGVzIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gaWYgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RvZGF5QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogTGFiZWwgZm9yIFRvZGF5LVNlbGVjdGlvbi1CdXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvZGF5QnV0dG9uTGFiZWwgPSAnVG9kYXknO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIHByZXZpb3VzIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgbmV4dCBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvLCB0aGlzIGlzIGFwcGxpZWQgdG8gbWVzc2FnZS5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXRlKHN0YXRlOiBOdWxsYWJsZTxGb3JtU3RhdGVzPikge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlIHx8ICdkZWZhdWx0JztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2VUeXBlID0gc3RhdGUgfHwgJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHN0YXRlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT0gbnVsbCAmJiB0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX3NwZWNpYWwtZGF5LS17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcGlja2VyIGlzIG9wZW4uIENhbiBiZSB1c2VkIHRocm91Z2ggdHdvLXdheSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogU2hvdWxkIGRhdGUgcGlja2VyIGJlIGlubGluZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJvY2Vzc0lucHV0T25CbHVyKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0lucHV0T25CbHVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICAgIH1cblxuICAgIGdldCBwcm9jZXNzSW5wdXRPbkJsdXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzSW5wdXRPbkJsdXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmcgZGF0ZSBwaWNrZXIgaW5wdXQgZmllbGQgYWZ0ZXIgY2FsZW5kYXIgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2Nlc3NJbnB1dE9uQmx1ciA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBGaXJlZCB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBmaXJzdCBvciBsYXN0IGRhdGUgaW4gcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFyQ29tcG9uZW50OiBDYWxlbmRhckNvbXBvbmVudDxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBXaGV0aGVyIHRoZSBkYXRlIGlucHV0IGlzIGludmFsaWQgKi9cbiAgICBfaXNJbnZhbGlkRGF0ZUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZCA9IGBmZC1kYXRlLXBpY2tlci1mb3JtLW1lc3NhZ2UtJHtkYXRlUGlja2VyQ291bnRlcisrfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRlSW5wdXRMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZVN0YXRlSW5mb3JtYXRpb25NZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlU3RhdGVXYXJuaW5nTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZVN0YXRlRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBzdGFydCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcmFuZ2VEZWxpbWl0ZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5yYW5nZURlbGltaXRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEYXRlIGlucHV0IGFyaWEgbGFiZWwgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gcmV0dXJuIGVpdGhlciBpbnB1dCB2YWx1ZSBvciBhIGtleSBmb3IgXCJmZFRyYW5zbGF0ZVwiIHBpcGVcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3JhbmdlJyA/IHRoaXMuZGF0ZVJhbmdlSW5wdXRMYWJlbCA6IHRoaXMuZGF0ZUlucHV0TGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGF0ZSBpbnB1dCBhcmlhIGxhYmVsIGtleSBiYXNlZCBvbiB0eXBlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBfZGF0ZUlucHV0QXJpYWxMYWJlbEtleSgpOiBzdHJpbmcge1xuICAgICAgICAvLyByZXR1cm4gZWl0aGVyIGlucHV0IHZhbHVlIG9yIGEga2V5IGZvciBcImZkVHJhbnNsYXRlXCIgcGlwZVxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAncmFuZ2UnID8gJ2NvcmVEYXRlUGlja2VyLmRhdGVSYW5nZUlucHV0TGFiZWwnIDogJ2NvcmVEYXRlUGlja2VyLmRhdGVJbnB1dExhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3Rpb25SZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAvLyBVc2UgQE9wdGlvbmFsIHRvIGF2b2lkIGFuZ3VsYXIgaW5qZWN0aW9uIGVycm9yIG1lc3NhZ2UgYW5kIHRocm93IG91ciBvd24gd2hpY2ggaXMgbW9yZSBwcmVjaXNlIG9uZVxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUylcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX3BvcG92ZXJGb3JtTWVzc2FnZTogUG9wb3ZlckZvcm1NZXNzYWdlU2VydmljZVxuICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEYXRlVGltZUFkYXB0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKCdEQVRFX1RJTUVfRk9STUFUUycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdElucHV0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgY2xvc2VGcm9tQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnICYmIHRoaXMuY2xvc2VPbkRhdGVDaG9vc2UpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgY2FsZW5kYXIgKi9cbiAgICBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGNhbGVuZGFyIG9wZW4gb3IgY2xvc2VkICovXG4gICAgcHVibGljIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gY2FsZW5kYXIgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SW5wdXREYXRlKGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiB0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdElucHV0RGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZVJhbmdlRGF0ZUNoYW5nZShkYXRlczogRGF0ZVJhbmdlPEQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2hhbmdlZCA9ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlcy5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZENoYW5nZWQgPSAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZXMuZW5kLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCk7XG4gICAgICAgIGlmIChkYXRlcyAmJiAoc3RhcnRDaGFuZ2VkIHx8IGVuZENoYW5nZWQpKSB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRDbG9zZSA9IHRoaXMuY2xvc2VPbkRhdGVDaG9vc2UgJiYgZGF0ZXMuZW5kICE9PSBudWxsO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2UoZGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogZGF0ZXMuc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBkYXRlcy5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBUb2RheS1TZWxlY3Rpb24tQnV0dG9uIGNsaWNrZWQsIGl0IGNoYW5nZXMgc2VsZWN0ZWQgZGF0ZSBvciBkYXRlIHJhbmdlIHRvIHRvZGF5J3MgZGF0ZVxuICAgICAqL1xuICAgIG9uVG9kYXlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9kYXlEYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZURhdGVDaGFuZ2UodG9kYXlEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGcm9tQ2FsZW5kYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmFuZ2VEYXRlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICBzdGFydDogdG9kYXlEYXRlLFxuICAgICAgICAgICAgICAgIGVuZDogdG9kYXlEYXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdGV4dCBpbnB1dCBpcyBjb25maXJtZWQgdG8gYmEgY2hhbmdlZCwgYnkgY2xpY2tpbmcgZW50ZXIsIG9yIGJsdXJcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2Uoc3RyRGF0ZTogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlU3RyaW5nVXBkYXRlKHN0ckRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgVmFsaWRhdG9yIEludGVyZmFjZSwgYWRkcyB2YWxpZGF0aW9uIHN1cHBvcnQgZm9yIGZvcm1zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vZGVsVmFsaWQoKVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKFxuICAgICAgICBmbjogKHNlbGVjdGVkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZvaWQ7XG4gICAgICAgIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHRoYXQgYWxsb3dzIHRvIHVzZSBbKG5nTW9kZWwpXSBvciBmb3Jtc1xuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IERhdGVSYW5nZTxEPiB8IEQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIC8qKiBJZiB3cml0dGVuIHZhbHVlIGlzIG5vdCBkZWZpbmVkLCBudWxsLCBlbXB0eSBzdHJpbmcgKi9cbiAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogbnVsbCxcbiAgICAgICAgICAgICAgICBlbmQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciBzaW5nbGUgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgaXQgcmVmcmVzaGVzIGN1cnJlbnRseVxuICAgICAgICAgICAgICogaW5wdXQgZmllbGQgdGV4dCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5IGRpc3BsYXllZCBkYXlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLl9wYXJzZURhdGUoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShzZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciByYW5nZSBtb2RlLCBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBtb2RlbCBpcyBjaGFuZ2VkLCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHlcbiAgICAgICAgICAgICAqIGRpc3BsYXllZCBkYXkgdmlldywgb3IgaW5wdXQgZmllbGQgdGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkIGFzIERhdGVSYW5nZTxEPjtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZD8uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLl9wYXJzZURhdGUoc2VsZWN0ZWQuZW5kKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShzZWxlY3RlZC5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlUmFuZ2Uoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2Zvcm1pbmcgc3RyaW5nIHRvIGRhdGUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dFxuICAgICAqL1xuICAgIGRhdGVTdHJpbmdVcGRhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVN0cjtcbiAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyBzaW5nbGUgbW9kZSAqL1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fcGFyc2VEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsLCBpZiBzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIGFueSBjaGFuZ2VzICovXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQoZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvKiogQ2hlY2sgaWYgZGF0ZSBpcyB2YWxpZCwgaWYgaXQncyBub3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVmcmVzaCBjYWxlbmRhciAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRGF0ZSBpbiBtb2RlbCBpcyBjaGFuZ2VkIG5vIG1hdHRlciBpZiB0aGUgcGFyc2VkIGRhdGUgZnJvbSBzdHJpbmcgaXMgdmFsaWQgb3Igbm90LlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqIENhc2Ugd2hlbiB0aGVyZSBpcyByYW5nZSBtb2RlICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbc3RhcnREYXRlU3RyLCBlbmREYXRlU3RyXSA9IGRhdGVTdHIuc3BsaXQodGhpcy5fcmFuZ2VEZWxpbWl0ZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fcGFyc2VEYXRlKHN0YXJ0RGF0ZVN0cik7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fcGFyc2VEYXRlKGVuZERhdGVTdHIpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIGlmIGRhdGVzIGFyZSBlcXVhbCwgaWYgZGF0ZXMgYXJlIHRoZSBzYW1lIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBhbnkgY2hhbmdlc1xuICAgICAgICAgICAgICogRGF0ZSBpbiBtb2RlbCBpcyBjaGFuZ2VkIG5vIG1hdHRlciBpZiB0aGUgcGFyc2VkIGRhdGVzIGZyb20gc3RyaW5nIGFyZSB2YWxpZCBvciBub3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoc3RhcnREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSB8fFxuICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChlbmREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvKiogSWYgdGhlIGVuZCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgZGF0ZSwgdGhlcmUgaXMgbmVlZCB0byByZXBsYWNlIHRoZW0gICovXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzdGFydERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGVuZERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShzdGFydERhdGUsIGVuZERhdGUpID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGVuZERhdGUsIGVuZDogc3RhcnREYXRlIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBzdGFydERhdGUsIGVuZDogZW5kRGF0ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNSYW5nZU1vZGVsVmFsaWQoc2VsZWN0ZWRSYW5nZURhdGUpO1xuXG4gICAgICAgICAgICAgICAgLyoqIFdob2xlIG9iamVjdCBpcyBjaGFuZ2VkLCBldmVuIGl0J3MgaW52YWxpZCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8qKiBDaGVjayBpZiBzdGFydCBkYXRlIGlzIHZhbGlkLCBpZiBpdCdzIG5vdCwgdGhlcmUgaXMgbm8gbmVlZCBvIHJlZnJlc2ggY2FsZW5kYXIgKi9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdGFydERhdGVWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzTW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZU1vZGVsVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk9wZW5TdGF0ZUNoYW5nZWQoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgLy8gZm9jdXMgaW5wdXQgY29udHJvbCBldmVyeSB0aW1lIHBvcHVwIGlzIGNsb3NlZFxuICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0aGlzLnByZXZlbnRTY3JvbGxPbkZvY3VzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBjYWxlbmRhciBjZWxsIG9uIG9wZW5pbmdcbiAgICAgICAgaWYgKGlzT3BlbiAmJiB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIGFueSkudmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHJhbmdlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1JhbmdlTW9kZWxWYWxpZChmZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmRSYW5nZURhdGUgJiYgdGhpcy5faXNTdGFydERhdGVWYWxpZChmZFJhbmdlRGF0ZS5zdGFydCkgJiYgdGhpcy5faXNFbmREYXRlVmFsaWQoZmRSYW5nZURhdGUuZW5kKSkgfHxcbiAgICAgICAgICAgICghZmRSYW5nZURhdGUuc3RhcnQgJiYgIWZkUmFuZ2VEYXRlLmVuZCAmJiB0aGlzLmFsbG93TnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIGVuZCBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNFbmREYXRlVmFsaWQoZW5kRGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKGVuZERhdGUpICYmICF0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKGVuZERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgc3RhcnQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU3RhcnREYXRlVmFsaWQoc3RhcnREYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRlVmFsaWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKHN0YXJ0RGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBnaXZlbiBkYXRlIG1vZGVsIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBkYXRlIGlzIEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RGF0ZVJhbmdlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZSArIHRoaXMuX3JhbmdlRGVsaW1pdGVyICsgZW5kRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaW5pdCh0aGlzLl9pbnB1dEdyb3VwRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5tZXNzYWdlID0gdGhpcy5fbWVzc2FnZSB8fCAnJztcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZVR5cGUgPSB0aGlzLl9zdGF0ZTtcbiAgICB9XG59XG4iLCI8ZmQtcG9wb3ZlclxuICAgIFsoaXNPcGVuKV09XCJpc09wZW5cIlxuICAgIChpc09wZW5DaGFuZ2UpPVwiX29uT3BlblN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwiZmFsc2VcIlxuICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4+XG4gICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICAgICAjaW5wdXRHcm91cENvbXBvbmVudFxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIGdseXBoPVwiYXBwb2ludG1lbnQtMlwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cImRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsIHx8ICgnY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwgfHwgKCdjb3JlRGF0ZVBpY2tlci5kaXNwbGF5Q2FsZW5kYXJUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJncmlkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2RhdGVJbnB1dEFyaWFsTGFiZWwgfHwgKF9kYXRlSW5wdXRBcmlhbExhYmVsS2V5IHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJfb25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICA8ZmQtcG9wb3Zlci1ib2R5IFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiPlxuICAgICAgICA8ZmQtZm9ybS1tZXNzYWdlIFtlbWJlZGRlZF09XCJ0cnVlXCIgKm5nSWY9XCJfbWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxmZC1jYWxlbmRhclxuICAgICAgICAgICAgKGNsb3NlQ2FsZW5kYXIpPVwiY2xvc2VGcm9tQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgIFttYXJrV2Vla2VuZHNdPVwibWFya1dlZWtlbmRzXCJcbiAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjYWxUeXBlXT1cInR5cGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlKT1cImhhbmRsZVJhbmdlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RlZERhdGVDaGFuZ2UpPVwiaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdGFydGluZ0RheU9mV2Vla109XCJzdGFydGluZ0RheU9mV2Vla1wiXG4gICAgICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwicHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICAgICAgW25leHRCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwibmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VG9kYXlCdXR0b25cIiBmZC1iYXIgYmFyRGVzaWduPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtsYWJlbF09XCJ0b2RheUJ1dHRvbkxhYmVsXCIgKGNsaWNrKT1cIm9uVG9kYXlCdXR0b25DbGljaygpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2ZkLXBvcG92ZXItYm9keT5cbjwvZmQtcG9wb3Zlcj5cblxuPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N1Y2Nlc3MnXCI+e3tcbiAgICAgICAgICAgICAgICB2YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UgfHwgKCdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlU3VjY2Vzc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZm9ybWF0aW9uJ1wiPnt7XG4gICAgICAgICAgICAgICAgdmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZSB8fCAoJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVJbmZvcm1hdGlvbk1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dhcm5pbmcnXCI+e3tcbiAgICAgICAgICAgICAgICB2YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UgfHwgKCdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiPnt7XG4gICAgICAgICAgICAgICAgdmFsdWVTdGF0ZUVycm9yTWVzc2FnZSB8fCAoJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgX21lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|