@bnsights/bbsf-controls 1.0.111 → 1.0.112
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/README.md +4 -0
- package/esm2022/lib/Shared/Components/app-base-component.mjs +7 -7
- package/esm2022/lib/Shared/Enums/StartView.mjs +1 -1
- package/esm2022/lib/Shared/Enums/map-enums.mjs +7 -7
- package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/CalendarOptions.mjs +7 -7
- package/esm2022/lib/Shared/Models/CheckBoxOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ConfirmationModalOptions.mjs +16 -16
- package/esm2022/lib/Shared/Models/ControlOptionsBase.mjs +5 -5
- package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +24 -0
- package/esm2022/lib/Shared/Models/DropdownOptions.mjs +6 -6
- package/esm2022/lib/Shared/Models/EnglishArabicDTO.mjs +3 -3
- package/esm2022/lib/Shared/Models/FileUploadModel.mjs +1 -1
- package/esm2022/lib/Shared/Models/FileUploadOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/FormOptions.mjs +13 -13
- package/esm2022/lib/Shared/Models/HtmlEditorOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ImageUploadOptions.mjs +4 -4
- package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +1 -3
- package/esm2022/lib/Shared/Models/MapAutocompleteDTO.mjs +2 -2
- package/esm2022/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/{MultilingualTextBoxOptions.mjs → MultiLingualTextBoxOptions.mjs} +5 -5
- package/esm2022/lib/Shared/Models/MultilingualControlOptionsBase.mjs +6 -6
- package/esm2022/lib/Shared/Models/MultipleFileUploadModel.mjs +5 -5
- package/esm2022/lib/Shared/Models/PagingOptions.mjs +22 -22
- package/esm2022/lib/Shared/Models/PhoneOptions.mjs +4 -4
- package/esm2022/lib/Shared/Models/ProfileImageUploadOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ProfilePictureDTO.mjs +1 -1
- package/esm2022/lib/Shared/Models/RadioButtonItem.mjs +1 -1
- package/esm2022/lib/Shared/Models/RadioButtonOptions.mjs +1 -1
- package/esm2022/lib/Shared/Models/RangeNumber.mjs +1 -1
- package/esm2022/lib/Shared/Models/Recaptcha.mjs +2 -2
- package/esm2022/lib/Shared/Models/RecaptchaOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/RepeaterField.mjs +1 -1
- package/esm2022/lib/Shared/Models/RepeaterOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/TagsInputDTO.mjs +1 -1
- package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +19 -19
- package/esm2022/lib/Shared/Models/TextAreaOptions.mjs +1 -1
- package/esm2022/lib/Shared/Models/TextBoxOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/{ToggleslideOptions.mjs → ToggleSlideOptions.mjs} +2 -2
- package/esm2022/lib/Shared/Models/filter-options.mjs +5 -5
- package/esm2022/lib/Shared/Models/page-header-options.mjs +32 -32
- package/esm2022/lib/Shared/services/ControlUtility.mjs +37 -37
- package/esm2022/lib/Shared/services/GlobalSettings.service.mjs +9 -9
- package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +81 -81
- package/esm2022/lib/controls/Calendar/Calendar.component.mjs +40 -40
- package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +35 -35
- package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +30 -30
- package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +90 -97
- package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +74 -74
- package/esm2022/lib/controls/FileUplaod/FileUplaod.component.mjs +155 -155
- package/esm2022/lib/controls/Form/Form.component.mjs +24 -24
- package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +55 -55
- package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +113 -113
- package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +62 -66
- package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +163 -163
- package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +193 -193
- package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +210 -210
- package/esm2022/lib/controls/Paging/Paging.component.mjs +85 -85
- package/esm2022/lib/controls/Phone/Phone.component.mjs +42 -42
- package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +112 -112
- package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +38 -38
- package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +46 -46
- package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +12 -12
- package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +556 -556
- package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +15 -15
- package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +100 -100
- package/esm2022/lib/controls/TextArea/TextArea.component.mjs +71 -71
- package/esm2022/lib/controls/TextBox/TextBox.component.mjs +116 -116
- package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +90 -0
- package/esm2022/lib/controls/bbsf-controls.module.mjs +2 -2
- package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +4 -4
- package/esm2022/public-api.mjs +7 -7
- package/fesm2022/bnsights-bbsf-controls.mjs +2801 -2813
- package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
- package/lib/Shared/Enums/map-enums.d.ts +1 -1
- package/lib/Shared/Models/AutocompleteOptions.d.ts +20 -20
- package/lib/Shared/Models/CalendarOptions.d.ts +10 -10
- package/lib/Shared/Models/CheckBoxOptions.d.ts +2 -2
- package/lib/Shared/Models/ConfirmationModalOptions.d.ts +14 -14
- package/lib/Shared/Models/ControlOptionsBase.d.ts +17 -17
- package/lib/Shared/Models/{datePickerOptions.d.ts → DatePickerOptions.d.ts} +12 -13
- package/lib/Shared/Models/DropdownOptions.d.ts +15 -15
- package/lib/Shared/Models/EnglishArabicDTO.d.ts +2 -2
- package/lib/Shared/Models/FileUploadModel.d.ts +1 -1
- package/lib/Shared/Models/FileUploadOptions.d.ts +8 -8
- package/lib/Shared/Models/FormOptions.d.ts +11 -11
- package/lib/Shared/Models/HtmlEditorOptions.d.ts +11 -11
- package/lib/Shared/Models/ImageUploadOptions.d.ts +9 -9
- package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +1 -2
- package/lib/Shared/Models/MapAutocompleteDTO.d.ts +5 -5
- package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +7 -7
- package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +5 -5
- package/lib/Shared/Models/{MultilingualTextBoxOptions.d.ts → MultiLingualTextBoxOptions.d.ts} +6 -6
- package/lib/Shared/Models/MultilingualControlOptionsBase.d.ts +34 -34
- package/lib/Shared/Models/MultipleFileUploadModel.d.ts +4 -4
- package/lib/Shared/Models/PagingOptions.d.ts +25 -25
- package/lib/Shared/Models/PhoneOptions.d.ts +9 -9
- package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +10 -10
- package/lib/Shared/Models/ProfilePictureDTO.d.ts +9 -9
- package/lib/Shared/Models/RadioButtonItem.d.ts +2 -2
- package/lib/Shared/Models/RadioButtonOptions.d.ts +2 -2
- package/lib/Shared/Models/RangeNumber.d.ts +2 -2
- package/lib/Shared/Models/Recaptcha.d.ts +4 -4
- package/lib/Shared/Models/RecaptchaOptions.d.ts +10 -10
- package/lib/Shared/Models/RepeaterField.d.ts +4 -4
- package/lib/Shared/Models/RepeaterOptions.d.ts +16 -16
- package/lib/Shared/Models/TagsInputDTO.d.ts +4 -4
- package/lib/Shared/Models/TagsInputOptions.d.ts +29 -29
- package/lib/Shared/Models/TextAreaOptions.d.ts +11 -11
- package/lib/Shared/Models/TextBoxOptions.d.ts +18 -18
- package/lib/Shared/Models/{ToggleslideOptions.d.ts → ToggleSlideOptions.d.ts} +3 -3
- package/lib/Shared/Models/filter-options.d.ts +4 -4
- package/lib/Shared/Models/page-header-options.d.ts +43 -43
- package/lib/Shared/services/ControlUtility.d.ts +8 -8
- package/lib/Shared/services/GlobalSettings.service.d.ts +8 -8
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +11 -11
- package/lib/controls/Calendar/Calendar.component.d.ts +7 -7
- package/lib/controls/CheckBox/CheckBox.component.d.ts +10 -10
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +20 -24
- package/lib/controls/DropdownList/DropdownList.component.d.ts +13 -13
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +11 -11
- package/lib/controls/Form/Form.component.d.ts +2 -2
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +12 -12
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +16 -16
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +6 -9
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +25 -25
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +24 -24
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +32 -32
- package/lib/controls/Paging/Paging.component.d.ts +9 -9
- package/lib/controls/Phone/Phone.component.d.ts +12 -12
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +18 -18
- package/lib/controls/RadioButton/RadioButton.component.d.ts +11 -11
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +10 -10
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +5 -5
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +1 -1
- package/lib/controls/TagsInput/TagsInput.component.d.ts +17 -17
- package/lib/controls/TextArea/TextArea.component.d.ts +14 -14
- package/lib/controls/TextBox/TextBox.component.d.ts +25 -25
- package/lib/controls/Toggleslide/{toggleslide.component.d.ts → Toggleslide.component.d.ts} +10 -10
- package/lib/controls/bbsf-controls.module.d.ts +1 -1
- package/package.json +3 -2
- package/public-api.d.ts +4 -4
- package/src/lib/assets/images/marker-pin.svg +4 -4
- package/esm2022/bnsights-test-test-controls.mjs +0 -5
- package/esm2022/lib/Shared/Models/datePickerOptions.mjs +0 -23
- package/esm2022/lib/controls/Toggleslide/toggleslide.component.mjs +0 -90
- package/fesm2022/bnsights-test-test-controls.mjs +0 -9164
- package/fesm2022/bnsights-test-test-controls.mjs.map +0 -1
|
@@ -5,44 +5,42 @@ import { StartView } from '../../Shared/Enums/StartView';
|
|
|
5
5
|
import { SelectMode } from '../../Shared/Enums/SelectMode';
|
|
6
6
|
import { OwlDateTimeIntl } from '@danielmoncada/angular-datetime-picker';
|
|
7
7
|
import { DefaultIntl } from '../../Shared/default_intl';
|
|
8
|
+
import { ForceDirection } from '../../Shared/Enums/ForceDirection';
|
|
9
|
+
import moment from 'moment';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "
|
|
10
|
-
import * as i2 from "../../Shared/services/
|
|
11
|
-
import * as i3 from "
|
|
12
|
-
import * as i4 from "
|
|
13
|
-
import * as i5 from "@angular
|
|
14
|
-
import * as i6 from "@
|
|
15
|
-
import * as i7 from "@
|
|
16
|
-
import * as i8 from "
|
|
17
|
-
import * as i9 from "ngx-intl-tel-input";
|
|
11
|
+
import * as i1 from "../../Shared/services/OnPagingFiltersChange.service";
|
|
12
|
+
import * as i2 from "../../Shared/services/ControlUtility";
|
|
13
|
+
import * as i3 from "@angular/forms";
|
|
14
|
+
import * as i4 from "@bnsights/bbsf-utilities";
|
|
15
|
+
import * as i5 from "@danielmoncada/angular-datetime-picker";
|
|
16
|
+
import * as i6 from "@angular/common";
|
|
17
|
+
import * as i7 from "@angular/cdk/bidi";
|
|
18
|
+
import * as i8 from "ngx-intl-tel-input";
|
|
18
19
|
export class DateInputComponent {
|
|
19
|
-
static { this.
|
|
20
|
-
|
|
21
|
-
constructor(datepipe, onChangeService, ErrorHandler, controlUtility, controlContainer, DateInputControlHost, UtilityService, translate, controlValidationService, dateTimeAdapter) {
|
|
22
|
-
this.datepipe = datepipe;
|
|
20
|
+
static { this.controlContainerStatic = null; }
|
|
21
|
+
constructor(onChangeService, controlUtility, controlContainer, DateInputControlHost, utilityService, controlValidationService, dateTimeAdapter) {
|
|
23
22
|
this.onChangeService = onChangeService;
|
|
24
|
-
this.ErrorHandler = ErrorHandler;
|
|
25
23
|
this.controlUtility = controlUtility;
|
|
26
24
|
this.controlContainer = controlContainer;
|
|
27
25
|
this.DateInputControlHost = DateInputControlHost;
|
|
28
|
-
this.
|
|
29
|
-
this.translate = translate;
|
|
26
|
+
this.utilityService = utilityService;
|
|
30
27
|
this.controlValidationService = controlValidationService;
|
|
31
28
|
this.dateTimeAdapter = dateTimeAdapter;
|
|
32
|
-
this.
|
|
29
|
+
this.onChange = new EventEmitter();
|
|
33
30
|
this.markAllAsTouched = false;
|
|
34
31
|
this.validationRules = [];
|
|
35
|
-
this.
|
|
32
|
+
this.validationRulesAsync = [];
|
|
36
33
|
this.comparedControl = null;
|
|
37
34
|
this.dateError = false;
|
|
35
|
+
//#endregion
|
|
38
36
|
this.resetError = () => {
|
|
39
37
|
this.controlValidationService.removeGlobalError();
|
|
40
38
|
};
|
|
41
39
|
this.checkIfEndDateAfterStartDate = () => {
|
|
42
|
-
if (!this.comparedControl.value || !this.group.get(this.options.
|
|
40
|
+
if (!this.comparedControl.value || !this.group.get(this.options.name).value) {
|
|
43
41
|
return null;
|
|
44
42
|
}
|
|
45
|
-
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.
|
|
43
|
+
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.name).value)) {
|
|
46
44
|
this.comparedControl.setErrors(null);
|
|
47
45
|
return null;
|
|
48
46
|
}
|
|
@@ -52,79 +50,66 @@ export class DateInputComponent {
|
|
|
52
50
|
}
|
|
53
51
|
};
|
|
54
52
|
this.checkIfStartDateBeForEndDate = () => {
|
|
55
|
-
if (!this.comparedControl.value || !this.group.get(this.options.
|
|
53
|
+
if (!this.comparedControl.value || !this.group.get(this.options.name).value) {
|
|
56
54
|
return null;
|
|
57
55
|
}
|
|
58
|
-
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.
|
|
59
|
-
this.group.get(this.options.
|
|
56
|
+
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.name).value)) {
|
|
57
|
+
this.group.get(this.options.name).setErrors(null);
|
|
60
58
|
return null;
|
|
61
59
|
}
|
|
62
60
|
else {
|
|
63
|
-
this.group.get(this.options.
|
|
61
|
+
this.group.get(this.options.name).setErrors(null);
|
|
64
62
|
return { InvalidStartDate: true };
|
|
65
63
|
}
|
|
66
64
|
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.controlUtility.RemoveRequiredValidation(this.DatePickerFormControl, this.validationRules, this.options);
|
|
65
|
+
this.removeRequiredValidation = () => {
|
|
66
|
+
this.controlUtility.removeRequiredValidation(this.datePickerFormControl, this.validationRules, this.options);
|
|
70
67
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.controlUtility.AddRequiredValidation(this.DatePickerFormControl, this.validationRules, this.options);
|
|
68
|
+
this.addRequiredValidation = () => {
|
|
69
|
+
this.controlUtility.addRequiredValidation(this.datePickerFormControl, this.validationRules, this.options);
|
|
74
70
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.controlUtility.RemoveCustomValidation(this.DatePickerFormControl, this.validationRules, CustomValidation);
|
|
71
|
+
this.removeCustomValidation = (customValidation) => {
|
|
72
|
+
this.controlUtility.removeCustomValidation(this.datePickerFormControl, this.validationRules, customValidation);
|
|
78
73
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.controlUtility.AddCustomValidation(this.DatePickerFormControl, this.validationRules, CustomValidation);
|
|
74
|
+
this.addCustomValidation = (customValidation) => {
|
|
75
|
+
this.controlUtility.addCustomValidation(this.datePickerFormControl, this.validationRules, customValidation);
|
|
82
76
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.controlUtility.IsValid(this.DatePickerFormControl);
|
|
77
|
+
this.isValid = () => {
|
|
78
|
+
this.controlUtility.isValid(this.datePickerFormControl);
|
|
86
79
|
};
|
|
87
|
-
DateInputComponent.
|
|
80
|
+
DateInputComponent.controlContainerStatic = this.controlContainer;
|
|
88
81
|
}
|
|
82
|
+
//#region events
|
|
89
83
|
ngOnInit() {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
else
|
|
93
|
-
this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
|
|
94
|
-
if (this.options.StartView == 3)
|
|
95
|
-
this.startView = 'multi-year';
|
|
96
|
-
else {
|
|
97
|
-
this.startView = StartView[this.options.StartView].toLowerCase();
|
|
98
|
-
}
|
|
84
|
+
this.textDir = this.options.forceDirection ? (this.options.forceDirection == ForceDirection.Arabic ? 'rtl' : 'ltr') : (localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr');
|
|
85
|
+
this.startView = (this.options.startView == StartView.MultiYear ? 'multi-year' : StartView[this.options.startView].toLowerCase());
|
|
99
86
|
// Update the DateTimeAdapter Language with the current thread langauge
|
|
100
|
-
this.dateTimeAdapter.setLocale(this.
|
|
87
|
+
this.dateTimeAdapter.setLocale(this.utilityService.getCurrentLanguage() == "ar" ? "ar" : "en-UK");
|
|
101
88
|
this.controlValidationService.isCreatedBefor = false;
|
|
102
|
-
this.group.addControl(this.options.
|
|
103
|
-
this.
|
|
104
|
-
this.
|
|
105
|
-
if (this.options.
|
|
106
|
-
let Validations = this.options.
|
|
89
|
+
this.group.addControl(this.options.name, new FormControl(''));
|
|
90
|
+
this.datePickerFormControl = this.group.controls[this.options.name];
|
|
91
|
+
this.datePickerFormControl.setValue(this.options.value);
|
|
92
|
+
if (this.options.customValidation.length > 0) {
|
|
93
|
+
let Validations = this.options.customValidation;
|
|
107
94
|
for (let index = 0; index < Validations.length; index++) {
|
|
108
95
|
const Validation = Validations[index];
|
|
109
96
|
this.validationRules.push(Validation.functionBody);
|
|
110
97
|
}
|
|
111
98
|
}
|
|
112
|
-
if (this.options.
|
|
99
|
+
if (this.options.isRequired)
|
|
113
100
|
this.validationRules.push(Validators.required);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (this.group.get(this.options.StartControlToCompareWith)) {
|
|
122
|
-
this.comparedControl = this.group.get(this.options.StartControlToCompareWith);
|
|
101
|
+
if (this.options.labelKey != null && this.options.labelKey != "")
|
|
102
|
+
this.options.labelValue = this.utilityService.getResourceValue(this.options.labelKey);
|
|
103
|
+
if (this.options.isDisabled)
|
|
104
|
+
this.datePickerFormControl.disable();
|
|
105
|
+
if (this.options.startControlToCompareWith) {
|
|
106
|
+
if (this.group.get(this.options.startControlToCompareWith)) {
|
|
107
|
+
this.comparedControl = this.group.get(this.options.startControlToCompareWith);
|
|
123
108
|
this.subscribeDateChanges();
|
|
124
109
|
}
|
|
125
110
|
}
|
|
126
|
-
this.
|
|
127
|
-
this.
|
|
111
|
+
this.datePickerFormControl.setValidators(this.validationRules);
|
|
112
|
+
this.datePickerFormControl.setAsyncValidators(this.validationRulesAsync);
|
|
128
113
|
this.DateInputControlHost.ngSubmit.subscribe((value) => {
|
|
129
114
|
this.group.markAllAsTouched();
|
|
130
115
|
this.markAllAsTouched = true;
|
|
@@ -165,59 +150,67 @@ export class DateInputComponent {
|
|
|
165
150
|
onDateSelect(item) {
|
|
166
151
|
if (!item)
|
|
167
152
|
return;
|
|
168
|
-
let
|
|
169
|
-
var
|
|
170
|
-
if (this.options.
|
|
153
|
+
let dateValue = new Date(item.value);
|
|
154
|
+
// var tzOffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
|
|
155
|
+
if (this.options.selectMode == SelectMode.Range) {
|
|
171
156
|
for (let index = 0; index < item.value.length; index++) {
|
|
172
|
-
item.value[index] = new Date(item.value[index] -
|
|
157
|
+
// item.value[index] = new Date(item.value[index] - tzOffset).toISOString().slice(0, -1);
|
|
158
|
+
item.value[index] = moment(item.value[index]).format('YYYY-MM-DDTHH:mm:ss.SSS');
|
|
173
159
|
}
|
|
174
|
-
|
|
160
|
+
dateValue = item.value;
|
|
175
161
|
}
|
|
176
|
-
else
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
this.
|
|
180
|
-
this.onChangeService.ChangeValue(this.options.
|
|
181
|
-
let originalValue =
|
|
182
|
-
if (this.options.
|
|
183
|
-
this.controlUtility.patchControlValue(originalValue, this.options.
|
|
162
|
+
else
|
|
163
|
+
dateValue = moment(item.value).format('YYYY-MM-DDTHH:mm:ss.SSS');
|
|
164
|
+
// DateValue = new Date(item.value - tzOffset).toISOString().slice(0, -1);
|
|
165
|
+
this.datePickerFormControl.setValue(dateValue);
|
|
166
|
+
this.onChangeService.ChangeValue(this.options.name);
|
|
167
|
+
let originalValue = dateValue;
|
|
168
|
+
if (this.options.patchFunction && this.options.patchPath && this.group.get(this.options.name).valid) {
|
|
169
|
+
this.controlUtility.patchControlValue(originalValue, this.options.patchFunction, this.options.patchPath);
|
|
184
170
|
}
|
|
185
171
|
//Use this line to enable two way binding.
|
|
186
|
-
this.options.
|
|
187
|
-
this.
|
|
172
|
+
this.options.value = originalValue;
|
|
173
|
+
this.onChange.emit(originalValue);
|
|
188
174
|
}
|
|
189
175
|
subscribeDateChanges() {
|
|
190
176
|
const startDateChanges = this.comparedControl.valueChanges;
|
|
191
|
-
const endDateChanges = this.group.get(this.options.
|
|
177
|
+
const endDateChanges = this.group.get(this.options.name).valueChanges;
|
|
192
178
|
startDateChanges.subscribe(start => {
|
|
193
179
|
this.comparedControl.addValidators(this.checkIfStartDateBeForEndDate);
|
|
194
180
|
this.comparedControl.updateValueAndValidity();
|
|
195
181
|
});
|
|
196
182
|
endDateChanges.subscribe(end => {
|
|
197
|
-
this.
|
|
198
|
-
this.
|
|
183
|
+
this.datePickerFormControl.addValidators(this.checkIfEndDateAfterStartDate);
|
|
184
|
+
this.datePickerFormControl.updateValueAndValidity();
|
|
199
185
|
});
|
|
200
186
|
}
|
|
201
|
-
|
|
202
|
-
|
|
187
|
+
//#region helpers
|
|
188
|
+
translateByKey(key) {
|
|
189
|
+
return this.utilityService.getResourceValue(key);
|
|
203
190
|
}
|
|
204
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.
|
|
205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: DateInputComponent, selector: "BBSF-DateTimePicker", inputs: { group: "group", options: "options" }, outputs: {
|
|
206
|
-
{
|
|
207
|
-
|
|
191
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.OnPagingFiltersChangeService }, { token: i2.ControlUtility }, { token: i3.ControlContainer, optional: true }, { token: i3.FormGroupDirective }, { token: i4.UtilityService }, { token: i4.ControlValidationService }, { token: i5.DateTimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
192
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: DateInputComponent, selector: "BBSF-DateTimePicker", inputs: { group: "group", options: "options" }, outputs: { onChange: "onChange" }, providers: [
|
|
193
|
+
{
|
|
194
|
+
provide: OwlDateTimeIntl,
|
|
195
|
+
useClass: DefaultIntl
|
|
196
|
+
}
|
|
197
|
+
], ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-datetime-picker\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label\r\n {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n </label>\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n <div *ngIf=\"!options.isReadonly\" class=\"bbsf-input-container\">\r\n <!--input-->\r\n <input autocomplete=\"off\" (dateTimeChange)=\"onDateSelect($event)\" [dir]=\"textDir\" class=\"form-control bnsights-control\r\n {{options.extraClasses}} \" [ngClass]=\"(options.viewType==1)?'':'col-md-9'\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.name}}\" [owlDateTime]=\"dt1\" [owlDateTimeTrigger]=\"dt1\" [class.is-invalid]=\"datePickerFormControl.invalid &&\r\n datePickerFormControl.touched\" [min]=\"options.startDate\" [max]=\"options.endDate\" [hour12Timer]=\"options.hour12Timer\"\r\n [selectMode]=\"getSelectMode(options.selectMode)\" placeholder=\"{{options.placeholder}}\" id=\"{{options.name}}\" #Dateinput>\r\n\r\n <owl-date-time [pickerType]=\"getPickerType(options.pickerType)\" [startView]=\"startView\" [firstDayOfWeek]=\"options.firstDayOfWeek\"\r\n [hour12Timer]=\"options.hour12Timer\" #dt1></owl-date-time>\r\n <!--icon-->\r\n <span class=\"copy-clipboard\" [owlDateTimeTrigger]=\"dt1\">\r\n <span class=\"svg-icon\">\r\n <svg id=\"Group_356\" data-name=\"Group 356\" xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0\r\n 0 48 48\">\r\n <path id=\"Path_6737\" data-name=\"Path 6737\" d=\"M11.583,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6738\" data-name=\"Path 6738\" d=\"M38.417,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6739\" data-name=\"Path 6739\" d=\"M0,43.146C0,45.822,1.826,48,4.07,48H43.928C46.174,48,48,45.822,48,43.146V17.121H0Z\"\r\n fill=\"#d5d5d5\">\r\n </path>\r\n <path id=\"Path_6740\" data-name=\"Path 6740\"\r\n d=\"M43.929,5.7H38.417v5.512a1,1,0,1,1-2,0V5.7H11.583v5.512a1,1,0,1,1-2,0V5.7H4.07C1.826,5.7,0,7.877,0,10.555v4.566H48V10.555C48,7.877,46.174,5.7,43.929,5.7Z\"\r\n fill=\"#595959\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\">\r\n <span class=\"readonly-view\">{{options.value ? (options.value|date:'MMM d, y, h:mm a') : translateByKey('NA')}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(datePickerFormControl.invalid &&\r\n datePickerFormControl.touched)\">\r\n {{getErrorValidation(datePickerFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched\r\n )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i8.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i5.OwlDateTimeTriggerDirective, selector: "[owlDateTimeTrigger]", inputs: ["owlDateTimeTrigger", "disabled"] }, { kind: "directive", type: i5.OwlDateTimeInputDirective, selector: "input[owlDateTime]", inputs: ["required", "owlDateTime", "owlDateTimeFilter", "_disabled", "min", "max", "selectMode", "rangeSeparator", "value", "values"], outputs: ["dateTimeChange", "dateTimeInput"], exportAs: ["owlDateTimeInput"] }, { kind: "component", type: i5.OwlDateTimeComponent, selector: "owl-date-time", inputs: ["backdropClass", "panelClass", "startAt", "endAt", "pickerType", "pickerMode", "disabled", "opened", "scrollStrategy"], outputs: ["afterPickerClosed", "beforePickerOpen", "afterPickerOpen", "yearSelected", "monthSelected", "dateSelected"], exportAs: ["owlDateTime"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "pipe", type: i6.KeyValuePipe, name: "keyvalue" }] }); }
|
|
208
198
|
}
|
|
209
199
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DateInputComponent, decorators: [{
|
|
210
200
|
type: Component,
|
|
211
201
|
args: [{ selector: 'BBSF-DateTimePicker', providers: [
|
|
212
|
-
{
|
|
213
|
-
|
|
214
|
-
|
|
202
|
+
{
|
|
203
|
+
provide: OwlDateTimeIntl,
|
|
204
|
+
useClass: DefaultIntl
|
|
205
|
+
}
|
|
206
|
+
], template: "<div class=\"form-group bbsf-control bbsf-datetime-picker\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label\r\n {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n </label>\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n <div *ngIf=\"!options.isReadonly\" class=\"bbsf-input-container\">\r\n <!--input-->\r\n <input autocomplete=\"off\" (dateTimeChange)=\"onDateSelect($event)\" [dir]=\"textDir\" class=\"form-control bnsights-control\r\n {{options.extraClasses}} \" [ngClass]=\"(options.viewType==1)?'':'col-md-9'\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.name}}\" [owlDateTime]=\"dt1\" [owlDateTimeTrigger]=\"dt1\" [class.is-invalid]=\"datePickerFormControl.invalid &&\r\n datePickerFormControl.touched\" [min]=\"options.startDate\" [max]=\"options.endDate\" [hour12Timer]=\"options.hour12Timer\"\r\n [selectMode]=\"getSelectMode(options.selectMode)\" placeholder=\"{{options.placeholder}}\" id=\"{{options.name}}\" #Dateinput>\r\n\r\n <owl-date-time [pickerType]=\"getPickerType(options.pickerType)\" [startView]=\"startView\" [firstDayOfWeek]=\"options.firstDayOfWeek\"\r\n [hour12Timer]=\"options.hour12Timer\" #dt1></owl-date-time>\r\n <!--icon-->\r\n <span class=\"copy-clipboard\" [owlDateTimeTrigger]=\"dt1\">\r\n <span class=\"svg-icon\">\r\n <svg id=\"Group_356\" data-name=\"Group 356\" xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0\r\n 0 48 48\">\r\n <path id=\"Path_6737\" data-name=\"Path 6737\" d=\"M11.583,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6738\" data-name=\"Path 6738\" d=\"M38.417,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6739\" data-name=\"Path 6739\" d=\"M0,43.146C0,45.822,1.826,48,4.07,48H43.928C46.174,48,48,45.822,48,43.146V17.121H0Z\"\r\n fill=\"#d5d5d5\">\r\n </path>\r\n <path id=\"Path_6740\" data-name=\"Path 6740\"\r\n d=\"M43.929,5.7H38.417v5.512a1,1,0,1,1-2,0V5.7H11.583v5.512a1,1,0,1,1-2,0V5.7H4.07C1.826,5.7,0,7.877,0,10.555v4.566H48V10.555C48,7.877,46.174,5.7,43.929,5.7Z\"\r\n fill=\"#595959\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\">\r\n <span class=\"readonly-view\">{{options.value ? (options.value|date:'MMM d, y, h:mm a') : translateByKey('NA')}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(datePickerFormControl.invalid &&\r\n datePickerFormControl.touched)\">\r\n {{getErrorValidation(datePickerFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched\r\n )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>" }]
|
|
207
|
+
}], ctorParameters: () => [{ type: i1.OnPagingFiltersChangeService }, { type: i2.ControlUtility }, { type: i3.ControlContainer, decorators: [{
|
|
215
208
|
type: Optional
|
|
216
|
-
}] }, { type:
|
|
209
|
+
}] }, { type: i3.FormGroupDirective }, { type: i4.UtilityService }, { type: i4.ControlValidationService }, { type: i5.DateTimeAdapter }], propDecorators: { group: [{
|
|
217
210
|
type: Input
|
|
218
211
|
}], options: [{
|
|
219
212
|
type: Input
|
|
220
|
-
}],
|
|
213
|
+
}], onChange: [{
|
|
221
214
|
type: Output
|
|
222
215
|
}] } });
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWVQaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0RhdGVUaW1lUGlja2VyL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUszRCxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTeEQsTUFBTSxPQUFPLGtCQUFrQjthQUN0QiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyw0Q0FBNEM7SUFDNUMsWUFBbUIsUUFBa0IsRUFBVSxlQUE2QyxFQUFVLFlBQW9DLEVBQVUsY0FBOEIsRUFBc0IsZ0JBQWtDLEVBQVMsb0JBQXdDLEVBQVUsY0FBOEIsRUFBVSxTQUErQixFQUFVLHdCQUFrRCxFQUFVLGVBQXFDO1FBQXBjLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxvQkFBZSxHQUFm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QUFxQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBb0RELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNJLENBQUM7OEdBbE5VLGtCQUFrQjtrR0FBbEIsa0JBQWtCLGlJQUpsQjtZQUNULEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO1NBQ3BELDBCQ3JCSCwyekdBb0RNOzsyRkQ3Qk8sa0JBQWtCO2tCQVA5QixTQUFTOytCQUNFLHFCQUFxQixhQUVwQjt3QkFDVCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtxQkFDcEQ7OzBCQUtvTCxRQUFROytNQUdwTCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgQ29udHJvbENvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL2RhdGVQaWNrZXJPcHRpb25zJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IFBpY2tlclR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvUGlja2VyVHlwZSc7XHJcbmltcG9ydCB7IFN0YXJ0VmlldyB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9TdGFydFZpZXcnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL1NlbGVjdE1vZGUnO1xyXG5pbXBvcnQgeyBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL09uUGFnaW5nRmlsdGVyc0NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIsIE93bERhdGVUaW1lSW50bCB9IGZyb20gJ0BkYW5pZWxtb25jYWRhL2FuZ3VsYXItZGF0ZXRpbWUtcGlja2VyJztcclxuaW1wb3J0ICogYXMgZGF0ZVRpbWVDbGFzcyBmcm9tICdAZGFuaWVsbW9uY2FkYS9hbmd1bGFyLWRhdGV0aW1lLXBpY2tlcic7XHJcbmltcG9ydCB7IERlZmF1bHRJbnRsIH0gZnJvbSAnLi4vLi4vU2hhcmVkL2RlZmF1bHRfaW50bCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtRGF0ZVRpbWVQaWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9EYXRlVGltZVBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IE93bERhdGVUaW1lSW50bCwgdXNlQ2xhc3M6IERlZmF1bHRJbnRsIH1cclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLCBwcml2YXRlIG9uQ2hhbmdlU2VydmljZTogT25QYWdpbmdGaWx0ZXJzQ2hhbmdlU2VydmljZSwgcHJpdmF0ZSBFcnJvckhhbmRsZXI6IEVycm9yTWFzc2FnZVZhbGlkYXRpb24sIHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsIHB1YmxpYyBEYXRlSW5wdXRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLCBwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGU6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBwcml2YXRlIGRhdGVUaW1lQWRhcHRlcjogRGF0ZVRpbWVBZGFwdGVyPGFueT4pIHtcclxuICAgIERhdGVJbnB1dENvbXBvbmVudC5jb250cm9sQ29udGFpbmVyc3RhdGljID0gdGhpcy5jb250cm9sQ29udGFpbmVyO1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIERhdGVQaWNrZXJGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBjb21wYXJlZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IG51bGw7XHJcbiAgZGF0ZUVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGV4dERpcjtcclxuICBzdGFydFZpZXc7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbilcclxuICAgICAgdGhpcy50ZXh0RGlyID0gdGhpcy5vcHRpb25zLkZvcmNlRGlyZWN0aW9uID09IDIgPyAncnRsJyA6ICdsdHInO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnRleHREaXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSA9PSAnYXInID8gJ3J0bCcgOiAnbHRyJztcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuU3RhcnRWaWV3ID09IDMpXHJcbiAgICAgIHRoaXMuc3RhcnRWaWV3ID0gJ211bHRpLXllYXInO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRWaWV3ID0gKFN0YXJ0Vmlld1t0aGlzLm9wdGlvbnMuU3RhcnRWaWV3XSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKClcclxuICAgIH1cclxuICAgIC8vIFVwZGF0ZSB0aGUgRGF0ZVRpbWVBZGFwdGVyIExhbmd1YWdlIHdpdGggdGhlIGN1cnJlbnQgdGhyZWFkIGxhbmdhdWdlXHJcbiAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5zZXRMb2NhbGUodGhpcy5VdGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKSA9PSBcImFyXCIgPyBcImFyXCIgOiBcImVuLVVLXCIpO1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMuVmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBWYWxpZGF0aW9ucyA9IHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlN0YXJ0Q29udHJvbFRvQ29tcGFyZVdpdGgpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5TdGFydENvbnRyb2xUb0NvbXBhcmVXaXRoKSkge1xyXG4gICAgICAgIHRoaXMuY29tcGFyZWRDb250cm9sID0gdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLlN0YXJ0Q29udHJvbFRvQ29tcGFyZVdpdGgpXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIHRoaXMuRGF0ZUlucHV0Q29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5yZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yTGlzdCkge1xyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdE1vZGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgVmFsdWUgPSAoU2VsZWN0TW9kZVt0eXBlXSBhcyBzdHJpbmcpXHJcbiAgICByZXR1cm4gVmFsdWUudG9Mb3dlckNhc2UoKSBhcyBkYXRlVGltZUNsYXNzLlNlbGVjdE1vZGVcclxuICB9XHJcbiAgZ2V0UGlja2VyVHlwZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIGxldCBWYWx1ZSA9IChQaWNrZXJUeXBlW3R5cGVdIGFzIHN0cmluZylcclxuICAgIHJldHVybiBWYWx1ZS50b0xvd2VyQ2FzZSgpIGFzIGRhdGVUaW1lQ2xhc3MuUGlja2VyVHlwZVxyXG4gIH1cclxuICBnZXRTdGFydFZpZXcodHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZSA9PSAzKVxyXG4gICAgICByZXR1cm4gJ211bHRpLXllYXInO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IFZhbHVlID0gKFN0YXJ0Vmlld1t0eXBlXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKClcclxuICAgICAgcmV0dXJuIFZhbHVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25EYXRlU2VsZWN0KGl0ZW0pIHtcclxuICAgIGlmICghaXRlbSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgbGV0IERhdGVWYWx1ZTtcclxuICAgIHZhciB0em9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7IC8vb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuU2VsZWN0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtLnZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGl0ZW0udmFsdWVbaW5kZXhdID0gbmV3IERhdGUoaXRlbS52YWx1ZVtpbmRleF0gLSB0em9mZnNldCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIERhdGVWYWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgRGF0ZVZhbHVlID0gbmV3IERhdGUoaXRlbS52YWx1ZSAtIHR6b2Zmc2V0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5zZXRWYWx1ZShEYXRlVmFsdWUpXHJcbiAgICB0aGlzLm9uQ2hhbmdlU2VydmljZS5DaGFuZ2VWYWx1ZSh0aGlzLm9wdGlvbnMuTmFtZSk7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IERhdGVWYWx1ZTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsIHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uLCB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgfVxyXG4gICAgLy9Vc2UgdGhpcyBsaW5lIHRvIGVuYWJsZSB0d28gd2F5IGJpbmRpbmcuXHJcbiAgICB0aGlzLm9wdGlvbnMuVmFsdWUgPSBvcmlnaW5hbFZhbHVlO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG9yaWdpbmFsVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlRGF0ZUNoYW5nZXMoKSB7XHJcbiAgICBjb25zdCBzdGFydERhdGVDaGFuZ2VzID0gdGhpcy5jb21wYXJlZENvbnRyb2wudmFsdWVDaGFuZ2VzO1xyXG4gICAgY29uc3QgZW5kRGF0ZUNoYW5nZXMgPSB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkudmFsdWVDaGFuZ2VzO1xyXG4gICAgc3RhcnREYXRlQ2hhbmdlcy5zdWJzY3JpYmUoc3RhcnQgPT4ge1xyXG4gICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5hZGRWYWxpZGF0b3JzKHRoaXMuY2hlY2tJZlN0YXJ0RGF0ZUJlRm9yRW5kRGF0ZSk7XHJcbiAgICAgIHRoaXMuY29tcGFyZWRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0pO1xyXG4gICAgZW5kRGF0ZUNoYW5nZXMuc3Vic2NyaWJlKGVuZCA9PiB7XHJcbiAgICAgIHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5jaGVja0lmRW5kRGF0ZUFmdGVyU3RhcnREYXRlKTtcclxuICAgICAgdGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRW5kRGF0ZUFmdGVyU3RhcnREYXRlID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZSB8fCAhdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKG5ldyBEYXRlKHRoaXMuY29tcGFyZWRDb250cm9sLnZhbHVlKSA8IG5ldyBEYXRlKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5jb21wYXJlZENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIHJldHVybiB7IEludmFsaWRFbmREYXRlOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgfTtcclxuICBjaGVja0lmU3RhcnREYXRlQmVGb3JFbmREYXRlID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZSB8fCAhdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKG5ldyBEYXRlKHRoaXMuY29tcGFyZWRDb250cm9sLnZhbHVlKSA8IG5ldyBEYXRlKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgcmV0dXJuIHsgSW52YWxpZFN0YXJ0RGF0ZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG5cclxuICBnZXREYXRlVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLlZhbHVlID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odGhpcy5vcHRpb25zLlZhbHVlLCAnTU1NIGQsIHksIGg6bW0gYScpIDogdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOQScpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtZGF0ZXRpbWUtcGlja2VyXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5IaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWxcclxuICAgICAge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgPC9sYWJlbD5cclxuICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgPHNwYW4gKm5nSWY9XCIoKG9wdGlvbnMuU2hvd0FzdGVyaXNrJiZvcHRpb25zLklzUmVxdWlyZWQpfHwob3B0aW9ucy5Jc1JlcXVpcmVkKSkmJiFvcHRpb25zLklzUmVhZG9ubHlcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgYXJpYS1yZXF1aXJlZD1cInRydWVcIj4qPC9zcGFuPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFvcHRpb25zLklzUmVhZG9ubHlcIiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGRhdGVUaW1lQ2hhbmdlKT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm5zaWdodHMtY29udHJvbFxyXG4gICAgICAgIHt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fSBcIiBbbmdDbGFzc109XCIob3B0aW9ucy5WaWV3VHlwZT09MSk/Jyc6J2NvbC1tZC05J1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiIGFyaWEtaW52YWxpZD1cInRydWVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIiBbb3dsRGF0ZVRpbWVdPVwiZHQxXCIgW293bERhdGVUaW1lVHJpZ2dlcl09XCJkdDFcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJEYXRlUGlja2VyRm9ybUNvbnRyb2wuaW52YWxpZCAmJlxyXG4gICAgICAgIERhdGVQaWNrZXJGb3JtQ29udHJvbC50b3VjaGVkXCIgW21pbl09XCJvcHRpb25zLlN0YXJ0RGF0ZVwiIFttYXhdPVwib3B0aW9ucy5FbmREYXRlXCIgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuSG91cjEyVGltZXJcIlxyXG4gICAgICAgIFtzZWxlY3RNb2RlXT1cImdldFNlbGVjdE1vZGUob3B0aW9ucy5TZWxlY3RNb2RlKVwiIHBsYWNlaG9sZGVyPVwie3tvcHRpb25zLlBsYWNlaG9sZGVyfX1cIiBpZD1cInt7b3B0aW9ucy5OYW1lfX1cIiAjRGF0ZWlucHV0PlxyXG5cclxuICAgICAgPG93bC1kYXRlLXRpbWUgW3BpY2tlclR5cGVdPVwiZ2V0UGlja2VyVHlwZShvcHRpb25zLlBpY2tlclR5cGUpXCIgW3N0YXJ0Vmlld109XCJzdGFydFZpZXdcIiBbZmlyc3REYXlPZldlZWtdPVwib3B0aW9ucy5GaXJzdERheU9mV2Vla1wiXHJcbiAgICAgICAgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuSG91cjEyVGltZXJcIiAjZHQxPjwvb3dsLWRhdGUtdGltZT5cclxuICAgICAgPCEtLWljb24tLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiIFtvd2xEYXRlVGltZVRyaWdnZXJdPVwiZHQxXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvblwiPlxyXG4gICAgICAgICAgPHN2ZyBpZD1cIkdyb3VwXzM1NlwiIGRhdGEtbmFtZT1cIkdyb3VwIDM1NlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMFxyXG4gICAgICAgICAgICAwIDQ4IDQ4XCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzM3XCIgZGF0YS1uYW1lPVwiUGF0aCA2NzM3XCIgZD1cIk0xMS41ODMsMWExLDEsMCwwLDAtMiwwVjUuN2gyWlwiIHN0eWxlPVwiXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8cGF0aCBpZD1cIlBhdGhfNjczOFwiIGRhdGEtbmFtZT1cIlBhdGggNjczOFwiIGQ9XCJNMzguNDE3LDFhMSwxLDAsMCwwLTIsMFY1LjdoMlpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzM5XCIgZGF0YS1uYW1lPVwiUGF0aCA2NzM5XCIgZD1cIk0wLDQzLjE0NkMwLDQ1LjgyMiwxLjgyNiw0OCw0LjA3LDQ4SDQzLjkyOEM0Ni4xNzQsNDgsNDgsNDUuODIyLDQ4LDQzLjE0NlYxNy4xMjFIMFpcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCIjZDVkNWQ1XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8cGF0aCBpZD1cIlBhdGhfNjc0MFwiIGRhdGEtbmFtZT1cIlBhdGggNjc0MFwiXHJcbiAgICAgICAgICAgICAgZD1cIk00My45MjksNS43SDM4LjQxN3Y1LjUxMmExLDEsMCwxLDEtMiwwVjUuN0gxMS41ODN2NS41MTJhMSwxLDAsMSwxLTIsMFY1LjdINC4wN0MxLjgyNiw1LjcsMCw3Ljg3NywwLDEwLjU1NXY0LjU2Nkg0OFYxMC41NTVDNDgsNy44NzcsNDYuMTc0LDUuNyw0My45MjksNS43WlwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIiM1OTU5NTlcIj48L3BhdGg+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSByZWFkb25seSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLklzUmVhZG9ubHlcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3tnZXREYXRlVmFsdWUoKX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIiAqbmdJZj1cIihEYXRlUGlja2VyRm9ybUNvbnRyb2wuaW52YWxpZCAmJlxyXG4gICAgICBEYXRlUGlja2VyRm9ybUNvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oRGF0ZVBpY2tlckZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWRcclxuICAgICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWVQaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0RhdGVUaW1lUGlja2VyL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUczSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBYTVCLE1BQU0sT0FBTyxrQkFBa0I7YUFDdEIsMkJBQXNCLEdBQUcsSUFBSSxBQUFQLENBQVE7SUFFckMsWUFBb0IsZUFBNkMsRUFBVSxjQUE4QixFQUFzQixnQkFBa0MsRUFBUyxvQkFBd0MsRUFBVSxjQUE4QixFQUFVLHdCQUFrRCxFQUFVLGVBQXFDO1FBQWpWLG9CQUFlLEdB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QkFDRSxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsUUFBUSxFQUFFLFdBQVc7YUFDdEI7U0FDRiwwQkN6QkgsZzRHQXFETTs7MkZEMUJPLGtCQUFrQjtrQkFWOUIsU0FBUzsrQkFDRSxxQkFBcUIsYUFFcEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFFBQVEsRUFBRSxXQUFXO3lCQUN0QjtxQkFDRjs7MEJBSzJHLFFBQVE7NEtBSTNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBDb250cm9sQ29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvRGF0ZVBpY2tlck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IFBpY2tlclR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvUGlja2VyVHlwZSc7XHJcbmltcG9ydCB7IFN0YXJ0VmlldyB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9TdGFydFZpZXcnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL1NlbGVjdE1vZGUnO1xyXG5pbXBvcnQgeyBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL09uUGFnaW5nRmlsdGVyc0NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciwgRGF0ZVZpZXdUeXBlLCBPd2xEYXRlVGltZUludGwgfSBmcm9tICdAZGFuaWVsbW9uY2FkYS9hbmd1bGFyLWRhdGV0aW1lLXBpY2tlcic7XHJcbmltcG9ydCAqIGFzIGRhdGVUaW1lQ2xhc3MgZnJvbSAnQGRhbmllbG1vbmNhZGEvYW5ndWxhci1kYXRldGltZS1waWNrZXInO1xyXG5pbXBvcnQgeyBEZWZhdWx0SW50bCB9IGZyb20gJy4uLy4uL1NoYXJlZC9kZWZhdWx0X2ludGwnO1xyXG5pbXBvcnQgeyBGb3JjZURpcmVjdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9Gb3JjZURpcmVjdGlvbic7XHJcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1EYXRlVGltZVBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogT3dsRGF0ZVRpbWVJbnRsLFxyXG4gICAgICB1c2VDbGFzczogRGVmYXVsdEludGxcclxuICAgIH1cclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lclN0YXRpYyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb25DaGFuZ2VTZXJ2aWNlOiBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlLCBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLCBwdWJsaWMgRGF0ZUlucHV0Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSwgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8YW55Pikge1xyXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJTdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZGF0ZVBpY2tlckZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc0FzeW5jID0gW107XHJcbiAgY29tcGFyZWRDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBudWxsO1xyXG4gIGRhdGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRleHREaXI6IERpcmVjdGlvbjtcclxuICBzdGFydFZpZXc6IERhdGVWaWV3VHlwZTtcclxuXHJcbiAgLy8jcmVnaW9uIGV2ZW50c1xyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMudGV4dERpciA9IHRoaXMub3B0aW9ucy5mb3JjZURpcmVjdGlvbiA/ICh0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24gPT0gRm9yY2VEaXJlY3Rpb24uQXJhYmljID8gJ3J0bCcgOiAnbHRyJykgOiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cicpO1xyXG4gICAgdGhpcy5zdGFydFZpZXcgPSAodGhpcy5vcHRpb25zLnN0YXJ0VmlldyA9PSBTdGFydFZpZXcuTXVsdGlZZWFyID8gJ211bHRpLXllYXInIDogKFN0YXJ0Vmlld1t0aGlzLm9wdGlvbnMuc3RhcnRWaWV3XSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpIGFzIERhdGVWaWV3VHlwZTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIERhdGVUaW1lQWRhcHRlciBMYW5ndWFnZSB3aXRoIHRoZSBjdXJyZW50IHRocmVhZCBsYW5nYXVnZVxyXG4gICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuc2V0TG9jYWxlKHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkgPT0gXCJhclwiID8gXCJhclwiIDogXCJlbi1VS1wiKTtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLm5hbWVdO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXF1aXJlZClcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLmxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5sYWJlbEtleSk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZClcclxuICAgICAgdGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhcnRDb250cm9sVG9Db21wYXJlV2l0aCkge1xyXG4gICAgICBpZiAodGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLnN0YXJ0Q29udHJvbFRvQ29tcGFyZVdpdGgpKSB7XHJcbiAgICAgICAgdGhpcy5jb21wYXJlZENvbnRyb2wgPSB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuc3RhcnRDb250cm9sVG9Db21wYXJlV2l0aClcclxuICAgICAgICB0aGlzLnN1YnNjcmliZURhdGVDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0ZVBpY2tlckZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzQXN5bmMpO1xyXG4gICAgdGhpcy5EYXRlSW5wdXRDb250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zZXRBdHRyaWJ1dGVGb3JDb250cm9sKHRoaXMub3B0aW9ucylcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuICAgIGlmICh0aGlzLm1hcmtBbGxBc1RvdWNoZWQgJiYgdGhpcy5ncm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldEVycm9yVmFsaWRhdGlvbk1hc3NhZ2UoRXJyb3JMaXN0LCB0aGlzLmdyb3VwLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQ29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpXHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RNb2RlKHR5cGU6IG51bWJlcikge1xyXG4gICAgbGV0IFZhbHVlID0gKFNlbGVjdE1vZGVbdHlwZV0gYXMgc3RyaW5nKVxyXG4gICAgcmV0dXJuIFZhbHVlLnRvTG93ZXJDYXNlKCkgYXMgZGF0ZVRpbWVDbGFzcy5TZWxlY3RNb2RlXHJcbiAgfVxyXG5cclxuICBnZXRQaWNrZXJUeXBlKHR5cGU6IG51bWJlcikge1xyXG4gICAgbGV0IFZhbHVlID0gKFBpY2tlclR5cGVbdHlwZV0gYXMgc3RyaW5nKVxyXG4gICAgcmV0dXJuIFZhbHVlLnRvTG93ZXJDYXNlKCkgYXMgZGF0ZVRpbWVDbGFzcy5QaWNrZXJUeXBlXHJcbiAgfVxyXG5cclxuICBnZXRTdGFydFZpZXcodHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZSA9PSAzKVxyXG4gICAgICByZXR1cm4gJ211bHRpLXllYXInO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IFZhbHVlID0gKFN0YXJ0Vmlld1t0eXBlXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKClcclxuICAgICAgcmV0dXJuIFZhbHVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRhdGVTZWxlY3QoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoIWl0ZW0pXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgZGF0ZVZhbHVlOiBhbnkgPSBuZXcgRGF0ZShpdGVtLnZhbHVlKTtcclxuXHJcbiAgICAvLyB2YXIgdHpPZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvL29mZnNldCBpbiBtaWxsaXNlY29uZHNcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZWN0TW9kZSA9PSBTZWxlY3RNb2RlLlJhbmdlKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtLnZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIC8vIGl0ZW0udmFsdWVbaW5kZXhdID0gbmV3IERhdGUoaXRlbS52YWx1ZVtpbmRleF0gLSB0ek9mZnNldCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgaXRlbS52YWx1ZVtpbmRleF0gPSBtb21lbnQoaXRlbS52YWx1ZVtpbmRleF0pLmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnKTtcclxuICAgICAgfVxyXG4gICAgICBkYXRlVmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBkYXRlVmFsdWUgPSBtb21lbnQoaXRlbS52YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycpO1xyXG5cclxuICAgIC8vIERhdGVWYWx1ZSA9IG5ldyBEYXRlKGl0ZW0udmFsdWUgLSB0ek9mZnNldCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgdGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2VTZXJ2aWNlLkNoYW5nZVZhbHVlKHRoaXMub3B0aW9ucy5uYW1lKTtcclxuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gZGF0ZVZhbHVlO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5wYXRjaFBhdGggJiYgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLm5hbWUpLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUob3JpZ2luYWxWYWx1ZSwgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24sIHRoaXMub3B0aW9ucy5wYXRjaFBhdGgpXHJcbiAgICB9XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IG9yaWdpbmFsVmFsdWU7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQob3JpZ2luYWxWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVEYXRlQ2hhbmdlcygpIHtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZUNoYW5nZXMgPSB0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZUNoYW5nZXM7XHJcbiAgICBjb25zdCBlbmREYXRlQ2hhbmdlcyA9IHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5uYW1lKS52YWx1ZUNoYW5nZXM7XHJcbiAgICBzdGFydERhdGVDaGFuZ2VzLnN1YnNjcmliZShzdGFydCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGFyZWRDb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5jaGVja0lmU3RhcnREYXRlQmVGb3JFbmREYXRlKTtcclxuICAgICAgdGhpcy5jb21wYXJlZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbiAgICBlbmREYXRlQ2hhbmdlcy5zdWJzY3JpYmUoZW5kID0+IHtcclxuICAgICAgdGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLmNoZWNrSWZFbmREYXRlQWZ0ZXJTdGFydERhdGUpO1xyXG4gICAgICB0aGlzLmRhdGVQaWNrZXJGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZFbmREYXRlQWZ0ZXJTdGFydERhdGUgPSAoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuY29tcGFyZWRDb250cm9sLnZhbHVlIHx8ICF0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMubmFtZSkudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAobmV3IERhdGUodGhpcy5jb21wYXJlZENvbnRyb2wudmFsdWUpIDwgbmV3IERhdGUodGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLm5hbWUpLnZhbHVlKSkge1xyXG4gICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY29tcGFyZWRDb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgcmV0dXJuIHsgSW52YWxpZEVuZERhdGU6IHRydWUgfTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjaGVja0lmU3RhcnREYXRlQmVGb3JFbmREYXRlID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZSB8fCAhdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLm5hbWUpLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKG5ldyBEYXRlKHRoaXMuY29tcGFyZWRDb250cm9sLnZhbHVlKSA8IG5ldyBEYXRlKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5uYW1lKS52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLm5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLm5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgcmV0dXJuIHsgSW52YWxpZFN0YXJ0RGF0ZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGhlbHBlcnNcclxuXHJcbiAgdHJhbnNsYXRlQnlLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShrZXkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5kYXRlUGlja2VyRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIGFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuZGF0ZVBpY2tlckZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICByZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLmRhdGVQaWNrZXJGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIGN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIGFkZEN1c3RvbVZhbGlkYXRpb24gPSAoY3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5hZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuZGF0ZVBpY2tlckZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgY3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgaXNWYWxpZCA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuaXNWYWxpZCh0aGlzLmRhdGVQaWNrZXJGb3JtQ29udHJvbClcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvbiBcclxuXHJcbn1cclxuXHJcblxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtZGF0ZXRpbWUtcGlja2VyXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMudmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5oaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWxcclxuICAgICAge3tvcHRpb25zLmxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLmxhYmVsVmFsdWV9fVxyXG4gICAgPC9sYWJlbD5cclxuICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgPHNwYW4gKm5nSWY9XCIoKG9wdGlvbnMuc2hvd0FzdGVyaXNrJiZvcHRpb25zLmlzUmVxdWlyZWQpfHwob3B0aW9ucy5pc1JlcXVpcmVkKSkmJiFvcHRpb25zLmlzUmVhZG9ubHlcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgYXJpYS1yZXF1aXJlZD1cInRydWVcIj4qPC9zcGFuPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFvcHRpb25zLmlzUmVhZG9ubHlcIiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGRhdGVUaW1lQ2hhbmdlKT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm5zaWdodHMtY29udHJvbFxyXG4gICAgICAgIHt7b3B0aW9ucy5leHRyYUNsYXNzZXN9fSBcIiBbbmdDbGFzc109XCIob3B0aW9ucy52aWV3VHlwZT09MSk/Jyc6J2NvbC1tZC05J1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiIGFyaWEtaW52YWxpZD1cInRydWVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5uYW1lfX1cIiBbb3dsRGF0ZVRpbWVdPVwiZHQxXCIgW293bERhdGVUaW1lVHJpZ2dlcl09XCJkdDFcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJkYXRlUGlja2VyRm9ybUNvbnRyb2wuaW52YWxpZCAmJlxyXG4gICAgICAgIGRhdGVQaWNrZXJGb3JtQ29udHJvbC50b3VjaGVkXCIgW21pbl09XCJvcHRpb25zLnN0YXJ0RGF0ZVwiIFttYXhdPVwib3B0aW9ucy5lbmREYXRlXCIgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuaG91cjEyVGltZXJcIlxyXG4gICAgICAgIFtzZWxlY3RNb2RlXT1cImdldFNlbGVjdE1vZGUob3B0aW9ucy5zZWxlY3RNb2RlKVwiIHBsYWNlaG9sZGVyPVwie3tvcHRpb25zLnBsYWNlaG9sZGVyfX1cIiBpZD1cInt7b3B0aW9ucy5uYW1lfX1cIiAjRGF0ZWlucHV0PlxyXG5cclxuICAgICAgPG93bC1kYXRlLXRpbWUgW3BpY2tlclR5cGVdPVwiZ2V0UGlja2VyVHlwZShvcHRpb25zLnBpY2tlclR5cGUpXCIgW3N0YXJ0Vmlld109XCJzdGFydFZpZXdcIiBbZmlyc3REYXlPZldlZWtdPVwib3B0aW9ucy5maXJzdERheU9mV2Vla1wiXHJcbiAgICAgICAgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuaG91cjEyVGltZXJcIiAjZHQxPjwvb3dsLWRhdGUtdGltZT5cclxuICAgICAgPCEtLWljb24tLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiIFtvd2xEYXRlVGltZVRyaWdnZXJdPVwiZHQxXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvblwiPlxyXG4gICAgICAgICAgPHN2ZyBpZD1cIkdyb3VwXzM1NlwiIGRhdGEtbmFtZT1cIkdyb3VwIDM1NlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMFxyXG4gICAgICAgICAgICAwIDQ4IDQ4XCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzM3XCIgZGF0YS1uYW1lPVwiUGF0aCA2NzM3XCIgZD1cIk0xMS41ODMsMWExLDEsMCwwLDAtMiwwVjUuN2gyWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgPHBhdGggaWQ9XCJQYXRoXzY3MzhcIiBkYXRhLW5hbWU9XCJQYXRoIDY3MzhcIiBkPVwiTTM4LjQxNywxYTEsMSwwLDAsMC0yLDBWNS43aDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8cGF0aCBpZD1cIlBhdGhfNjczOVwiIGRhdGEtbmFtZT1cIlBhdGggNjczOVwiIGQ9XCJNMCw0My4xNDZDMCw0NS44MjIsMS44MjYsNDgsNC4wNyw0OEg0My45MjhDNDYuMTc0LDQ4LDQ4LDQ1LjgyMiw0OCw0My4xNDZWMTcuMTIxSDBaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwiI2Q1ZDVkNVwiPlxyXG4gICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzQwXCIgZGF0YS1uYW1lPVwiUGF0aCA2NzQwXCJcclxuICAgICAgICAgICAgICBkPVwiTTQzLjkyOSw1LjdIMzguNDE3djUuNTEyYTEsMSwwLDEsMS0yLDBWNS43SDExLjU4M3Y1LjUxMmExLDEsMCwxLDEtMiwwVjUuN0g0LjA3QzEuODI2LDUuNywwLDcuODc3LDAsMTAuNTU1djQuNTY2SDQ4VjEwLjU1NUM0OCw3Ljg3Nyw0Ni4xNzQsNS43LDQzLjkyOSw1LjdaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwiIzU5NTk1OVwiPjwvcGF0aD5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIHJlYWRvbmx5IC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuaXNSZWFkb25seVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIj57e29wdGlvbnMudmFsdWUgPyAob3B0aW9ucy52YWx1ZXxkYXRlOidNTU0gZCwgeSwgaDptbSBhJykgOiB0cmFuc2xhdGVCeUtleSgnTkEnKX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICA8IS0tIGxhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLmxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIiAqbmdJZj1cIihkYXRlUGlja2VyRm9ybUNvbnRyb2wuaW52YWxpZCAmJlxyXG4gICAgICBkYXRlUGlja2VyRm9ybUNvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oZGF0ZVBpY2tlckZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWRcclxuICAgICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|