ecabs-components 1.1.66 → 1.1.68
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 +102 -99
- package/esm2022/lib/base/models/sidebar.models.mjs +1 -1
- package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.mjs +57 -46
- package/esm2022/lib/ecabs-time-range-input-v2/ecabs-time-range-input-v2.component.mjs +33 -23
- package/fesm2022/ecabs-components.mjs +82 -59
- package/fesm2022/ecabs-components.mjs.map +1 -1
- package/lib/base/models/sidebar.models.d.ts +9 -4
- package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.d.ts +6 -7
- package/lib/ecabs-time-range-input-v2/ecabs-time-range-input-v2.component.d.ts +2 -1
- package/package.json +1 -1
- package/src/assets/styles/tailwind/index.scss +1 -1
package/README.md
CHANGED
|
@@ -25,107 +25,110 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
|
|
|
25
25
|
|
|
26
26
|
## Version History
|
|
27
27
|
|
|
28
|
-
- **v1.
|
|
29
|
-
- **v1.
|
|
30
|
-
-
|
|
31
|
-
- **v1.
|
|
32
|
-
- **v1.
|
|
33
|
-
- **v1.
|
|
28
|
+
- **v1.1.68** — Add `isVisible` callback for `SidebarMenuItem` to support dynamic visibility based on context.
|
|
29
|
+
- **v1.1.67** — Add support for optional "to" (end date) for `EcabsDateRangePickerV2Component`.
|
|
30
|
+
- Add allow cross-midnight time ranges for `EcabsTimeRangeInputV2Component`.
|
|
31
|
+
- **v1.1.66** — Suppress emission of an empty query on refocusing after selection of option from `EcabsChipAutocomplete`.
|
|
32
|
+
- **v1.1.65** — `EcabsInputRange`: Remove padding and background styling.
|
|
33
|
+
- **v1.1.64** — Refactor `EcabsChipAutocomplete` logic, improve component styles/disabled states, and update button styles.
|
|
34
|
+
- **v1.1.63** — Add `EcabsSegmentComponent`.
|
|
35
|
+
- Update `EcabsSelectV2` to be more robust when handling multiple selections.
|
|
36
|
+
- **v1.1.62** — Add `EcabsTimeRangeInputV2Component`.,
|
|
37
|
+
- **v1.1.61** — Added support for 12-hour time input for `maskito` library.
|
|
38
|
+
- **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
|
|
39
|
+
- **v1.1.60** — Migrate input mask library from `vanilla-text-mask` to `maskito`.
|
|
40
|
+
- **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
|
|
41
|
+
- **v1.1.59** — `EcabsCheckboxV2Component`: Implement version 2 of `EcabsCheckboxComponent`.
|
|
42
|
+
- **v1.1.58** — Add `EcabsInputRangeComponent` with support for minimum and maximum values.
|
|
43
|
+
- **v1.1.57** — Implement `EcabsChipGroup`and `EcabsAutocompleteChipGroup` components with demo.
|
|
44
|
+
- **v1.1.56** — Implement `EcabsDateRangePickerComponentV2`.
|
|
45
|
+
- **v1.1.55** — `EcabsButtonsV2Component`: Added version 2 of `EcabsButtonsComponent` with support for small, medium, and large sizes.
|
|
46
|
+
- **v1.1.54** — Implement `EcabsButtonToggleComponent` with support for small, medium, and large sizes.
|
|
47
|
+
- **v1.1.53** — Introduce new gray color palette and update references and apply styling improvements.
|
|
48
|
+
- **v1.1.52** — Update styling overrides for Material nav-style tabs, including active state.
|
|
49
|
+
- **v1.1.51** — Implement option of displaying dynamic content for `EcabsTableComponent` when empty.
|
|
50
|
+
- **v1.1.50** — Add `Documentation` for `EcabsTableModule`.
|
|
51
|
+
- **v1.1.49** — Add support for `splitButtonsWidth` in `EcabsDialogConfirmComponent` and update button styling.`.
|
|
52
|
+
- **v1.1.48** — Implement `EcabsPlaceAutocompleteV2Component` to support waypoints history, query change handling, and dropdown suggestions display.
|
|
53
|
+
- **v1.1.47** — Add `Title` and `dynamic` content support to `EcabsEmptyPlaceholderComponent`.
|
|
54
|
+
- **v1.1.46** — Add `ViewChild` reference for `MatRadioGroup` and update event type in `EcabsRadioButtonListComponent`.
|
|
55
|
+
- **v1.1.45** — Added default validation of date range
|
|
56
|
+
- **v1.1.44** — Fixed issue Apply button is still active when only the DateFrom is selected
|
|
57
|
+
- **v1.1.43** — Added disabling of Apply button for date range picker
|
|
58
|
+
- **v1.1.42** — Apply `width` and `height` properties directly to root `MatDialog` of `EcabsDialogConfirmComponent`.
|
|
59
|
+
- **v1.1.41** — Added EcabsDialogConfirmationDeletionComponent.
|
|
60
|
+
- **v1.1.40** — `EcabsDateTimePicker`: Added support for preserving and returning `receivedValue` when there is no change in the input.
|
|
61
|
+
- **v1.1.39** — Added date adapter to public api.
|
|
62
|
+
- **v1.1.38** — Use native `matDatepickerToggleIcon` in `EcabsDateTimePicker`.
|
|
63
|
+
- **v1.1.35** — Add `waypointType` input to `EcabsAutoComplete`.
|
|
64
|
+
- Add `nativeElement` handles to custom inputs.
|
|
65
|
+
- **v1.1.34** — Emit `selectionChange` event when selecting item from `EcabsSelectV2`.
|
|
66
|
+
- Add collapse styling for `EcabsLogo`.
|
|
67
|
+
- **v1.1.33** — Return falsey value when no input is available in `DateTime` selector through keyboard action deletion.
|
|
68
|
+
- **v1.1.32** — Return falsey value when no input is available in `DateTime` selector.
|
|
69
|
+
- **v1.1.31** — Prevent hover state persistence on disabled buttons.
|
|
70
|
+
- **v1.1.30** — Added blur event handling and support for special keys in `EcabsTimePickerComponent`.
|
|
71
|
+
- **v1.1.29** — Added handling manual updates data of date range picker.
|
|
72
|
+
- **v1.1.28** — Fixed issue related to the prev version.
|
|
73
|
+
- **v1.1.27** — Added results for the dialog message.
|
|
74
|
+
- **v1.1.26** — Implement dynamic titles for `EcabsDialogComponent`.
|
|
75
|
+
- **v1.1.25** — Fixed date range picker when choose one date only.
|
|
76
|
+
- **v1.1.24** — Fixed date range picker when reset value.
|
|
77
|
+
- **v1.1.23** — Update styling for map markers.
|
|
78
|
+
- **v1.1.22** — Added statuses for mat-chips.
|
|
79
|
+
- Added badges for menu items.
|
|
80
|
+
- **v1.1.21** — Improve style for hovered disabled calendar date.
|
|
81
|
+
- **v1.1.20** — Improve the appearance for the scrollbar.
|
|
82
|
+
- **v1.1.19** — Increase delay for phone control and to config.
|
|
83
|
+
- **v1.1.18** — Adjust position of `sticky` header on `MatTable`.
|
|
84
|
+
- **v1.1.17** — Fix peerDependency on `libphonenumber-js`.
|
|
85
|
+
- **v1.1.16** — Implemented custom phone number control.
|
|
86
|
+
- **v1.1.15** — Cleanup `EcabsComponentsService` and provide default config via `config` property.
|
|
87
|
+
- **v1.1.14** — Update styles for disabled indeterminate checkboxes.
|
|
88
|
+
- **v1.1.13** — Fix `overflow-y` issue on `MatCardContent`.
|
|
89
|
+
- **v1.1.12** — Extend @Input properties of `EcabsSelectV2` from `@ng-select` lib.
|
|
90
|
+
- **v1.1.10** — Added color styles for prompt title message.
|
|
91
|
+
- **v1.1.9** — Fixed i18n issue.
|
|
92
|
+
- **v1.1.8** — Add directive show-on-truncated to directives.
|
|
93
|
+
- **v1.1.7** — Add a message for alphanumeric-only validation.
|
|
94
|
+
- **v1.1.6** — accumulate all directives
|
|
95
|
+
- **v1.1.5** — added slider
|
|
96
|
+
- **v1.1.4** — Fixed blur issue for input.
|
|
97
|
+
- **v1.1.3** — Upgrade `MatLegacyCard` to `MDC`.
|
|
98
|
+
- **v1.1.2** — Introduce new select component (`EcabsSelectV2`) to deprecate `EcabsSelect`.
|
|
99
|
+
- **v1.1.1** — Hide `Timepicker` options on input blur.
|
|
100
|
+
- **v1.1.0** — Upgrade `MatLegacyMenu` to `MDC`.
|
|
101
|
+
- **v1.0.99** — Add `mini` and `maxi` directive and validators to `EcabsInput`.
|
|
102
|
+
- **v1.0.98** — Upgrade `MatLegacyAutocomplete` to `MDC`.
|
|
103
|
+
- **v1.0.97** — Correct misaligned icon and text on `EcabsNotes`.
|
|
104
|
+
- **v1.0.96** — Add missing styles for nested columns on `Table`.
|
|
105
|
+
- **v1.0.95** — Upgrade `MatLegacyTooltip` to `MDC`.
|
|
106
|
+
- **v1.0.94** — Upgrade `MatLegacyTabs` to `MDC`.
|
|
107
|
+
- **v1.0.93** — Update progress colors for percentage.
|
|
108
|
+
- **v1.0.92** — Add default buttons for Confirm and Cancel buttons on dialog.
|
|
109
|
+
- **v1.0.91** — Upgrade `MatLegacyCheckbox` and `MatSlideToggle` to `MDC`.
|
|
110
|
+
- **v1.0.90** — Upgrade `MatLegacyPaginator` to `MDC`.
|
|
111
|
+
- Add `EcabsPaginatorDirective`.
|
|
112
|
+
- Rename `AppHint` to `EcabsHint`.
|
|
113
|
+
- Apply `ngx-toaster` overrides.
|
|
114
|
+
- **v1.0.89** — Upgrade `MatLegacyTable` and `MatLegacyProgress` to `MDC`.
|
|
115
|
+
- **v1.0.88** — Roll back 1.0.87
|
|
116
|
+
- **v1.0.87** — Apply min/max Date logic for date picker
|
|
117
|
+
- **v1.0.85** — Improve styling for `EcabsTable` row colors.
|
|
118
|
+
- **v1.0.84** — Emit `falsey` result when Close button is clicked on `EcabsDialogConfirm` and `EcabsDialogMessage`.
|
|
119
|
+
- **v1.0.83** — Fix buttons height.
|
|
120
|
+
- **v1.0.82** — Improve the appearance of disabled inputs.
|
|
121
|
+
- Fix placeholder text of `EcabsSelect`.
|
|
122
|
+
- **v1.0.81** — Fix font size of `EcabsSelect`.
|
|
123
|
+
- **v1.0.80** — Allow custom button options for `Confirm` and `Cancel` buttons on `EcabsDialog`.
|
|
34
124
|
- **v1.0.79** — feat(CU-11266): Update `MatDialog` to `MDC`.
|
|
35
125
|
- Fix button height issue on anchor tags marked as `mat-button`.
|
|
36
126
|
- Update default font family.
|
|
37
127
|
- Rename `NoteComponent` to `EcabsNoteComponent`.
|
|
38
128
|
- Add `expired` style for `EcabsChip`.
|
|
39
|
-
- **v1.0.
|
|
40
|
-
- **v1.0.
|
|
41
|
-
- **v1.0.
|
|
42
|
-
|
|
43
|
-
- **v1.0.
|
|
44
|
-
- **v1.0.
|
|
45
|
-
- **v1.0.85** — Improve styling for `EcabsTable` row colors.
|
|
46
|
-
- **v1.0.87** — Apply min/max Date logic for date picker
|
|
47
|
-
- **v1.0.88** — Roll back 1.0.87
|
|
48
|
-
- **v1.0.89** — Upgrade `MatLegacyTable` and `MatLegacyProgress` to `MDC`.
|
|
49
|
-
- **v1.0.90** — Upgrade `MatLegacyPaginator` to `MDC`.
|
|
50
|
-
- Add `EcabsPaginatorDirective`.
|
|
51
|
-
- Rename `AppHint` to `EcabsHint`.
|
|
52
|
-
- Apply `ngx-toaster` overrides.
|
|
53
|
-
- **v1.0.91** — Upgrade `MatLegacyCheckbox` and `MatSlideToggle` to `MDC`.
|
|
54
|
-
- **v1.0.92** — Add default buttons for Confirm and Cancel buttons on dialog.
|
|
55
|
-
- **v1.0.93** — Update progress colors for percentage.
|
|
56
|
-
- **v1.0.94** — Upgrade `MatLegacyTabs` to `MDC`.
|
|
57
|
-
- **v1.0.95** — Upgrade `MatLegacyTooltip` to `MDC`.
|
|
58
|
-
- **v1.0.96** — Add missing styles for nested columns on `Table`.
|
|
59
|
-
- **v1.0.97** — Correct misaligned icon and text on `EcabsNotes`.
|
|
60
|
-
- **v1.0.98** — Upgrade `MatLegacyAutocomplete` to `MDC`.
|
|
61
|
-
- **v1.0.99** — Add `mini` and `maxi` directive and validators to `EcabsInput`.
|
|
62
|
-
- **v1.1.0** — Upgrade `MatLegacyMenu` to `MDC`.
|
|
63
|
-
- **v1.1.1** — Hide `Timepicker` options on input blur.
|
|
64
|
-
- **v1.1.2** — Introduce new select component (`EcabsSelectV2`) to deprecate `EcabsSelect`.
|
|
65
|
-
- **v1.1.3** — Upgrade `MatLegacyCard` to `MDC`.
|
|
66
|
-
- **v1.1.4** — Fixed blur issue for input.
|
|
67
|
-
- **v1.1.5** — added slider
|
|
68
|
-
- **v1.1.6** — accumulate all directives
|
|
69
|
-
- **v1.1.7** — Add a message for alphanumeric-only validation.
|
|
70
|
-
- **v1.1.8** — Add directive show-on-truncated to directives.
|
|
71
|
-
- **v1.1.9** — Fixed i18n issue.
|
|
72
|
-
- **v1.1.10** — Added color styles for prompt title message.
|
|
73
|
-
- **v1.1.12** — Extend @Input properties of `EcabsSelectV2` from `@ng-select` lib.
|
|
74
|
-
- **v1.1.13** — Fix `overflow-y` issue on `MatCardContent`.
|
|
75
|
-
- **v1.1.14** — Update styles for disabled indeterminate checkboxes.
|
|
76
|
-
- **v1.1.15** — Cleanup `EcabsComponentsService` and provide default config via `config` property.
|
|
77
|
-
- **v1.1.16** — Implemented custom phone number control.
|
|
78
|
-
- **v1.1.17** — Fix peerDependency on `libphonenumber-js`.
|
|
79
|
-
- **v1.1.18** — Adjust position of `sticky` header on `MatTable`.
|
|
80
|
-
- **v1.1.19** — Increase delay for phone control and to config.
|
|
81
|
-
- **v1.1.20** — Improve the appearance for the scrollbar.
|
|
82
|
-
- **v1.1.21** — Improve style for hovered disabled calendar date.
|
|
83
|
-
- **v1.1.22** — Added statuses for mat-chips.
|
|
84
|
-
- Added badges for menu items.
|
|
85
|
-
- **v1.1.23** — Update styling for map markers.
|
|
86
|
-
- **v1.1.24** — Fixed date range picker when reset value.
|
|
87
|
-
- **v1.1.25** — Fixed date range picker when choose one date only.
|
|
88
|
-
- **v1.1.26** — Implement dynamic titles for `EcabsDialogComponent`.
|
|
89
|
-
- **v1.1.27** — Added results for the dialog message.
|
|
90
|
-
- **v1.1.28** — Fixed issue related to the prev version.
|
|
91
|
-
- **v1.1.29** — Added handling manual updates data of date range picker.
|
|
92
|
-
- **v1.1.30** — Added blur event handling and support for special keys in `EcabsTimePickerComponent`.
|
|
93
|
-
- **v1.1.31** — Prevent hover state persistence on disabled buttons.
|
|
94
|
-
- **v1.1.32** — Return falsey value when no input is available in `DateTime` selector.
|
|
95
|
-
- **v1.1.33** — Return falsey value when no input is available in `DateTime` selector through keyboard action deletion.
|
|
96
|
-
- **v1.1.34** — Emit `selectionChange` event when selecting item from `EcabsSelectV2`.
|
|
97
|
-
- Add collapse styling for `EcabsLogo`.
|
|
98
|
-
- **v1.1.35** — Add `waypointType` input to `EcabsAutoComplete`.
|
|
99
|
-
- Add `nativeElement` handles to custom inputs.
|
|
100
|
-
- **v1.1.38** — Use native `matDatepickerToggleIcon` in `EcabsDateTimePicker`.
|
|
101
|
-
- **v1.1.39** — Added date adapter to public api.
|
|
102
|
-
- **v1.1.40** — `EcabsDateTimePicker`: Added support for preserving and returning `receivedValue` when there is no change in the input.
|
|
103
|
-
- **v1.1.41** — Added EcabsDialogConfirmationDeletionComponent.
|
|
104
|
-
- **v1.1.42** — Apply `width` and `height` properties directly to root `MatDialog` of `EcabsDialogConfirmComponent`.
|
|
105
|
-
- **v1.1.43** — Added disabling of Apply button for date range picker
|
|
106
|
-
- **v1.1.44** — Fixed issue Apply button is still active when only the DateFrom is selected
|
|
107
|
-
- **v1.1.45** — Added default validation of date range
|
|
108
|
-
- **v1.1.46** — Add `ViewChild` reference for `MatRadioGroup` and update event type in `EcabsRadioButtonListComponent`.
|
|
109
|
-
- **v1.1.47** — Add `Title` and `dynamic` content support to `EcabsEmptyPlaceholderComponent`.
|
|
110
|
-
- **v1.1.48** — Implement `EcabsPlaceAutocompleteV2Component` to support waypoints history, query change handling, and dropdown suggestions display.
|
|
111
|
-
- **v1.1.49** — Add support for `splitButtonsWidth` in `EcabsDialogConfirmComponent` and update button styling.`.
|
|
112
|
-
- **v1.1.50** — Add `Documentation` for `EcabsTableModule`.
|
|
113
|
-
- **v1.1.51** — Implement option of displaying dynamic content for `EcabsTableComponent` when empty.
|
|
114
|
-
- **v1.1.52** — Update styling overrides for Material nav-style tabs, including active state.
|
|
115
|
-
- **v1.1.53** — Introduce new gray color palette and update references and apply styling improvements.
|
|
116
|
-
- **v1.1.54** — Implement `EcabsButtonToggleComponent` with support for small, medium, and large sizes.
|
|
117
|
-
- **v1.1.55** — `EcabsButtonsV2Component`: Added version 2 of `EcabsButtonsComponent` with support for small, medium, and large sizes.
|
|
118
|
-
- **v1.1.56** — Implement `EcabsDateRangePickerComponentV2`.
|
|
119
|
-
- **v1.1.57** — Implement `EcabsChipGroup`and `EcabsAutocompleteChipGroup` components with demo.
|
|
120
|
-
- **v1.1.58** — Add `EcabsInputRangeComponent` with support for minimum and maximum values.
|
|
121
|
-
- **v1.1.59** — `EcabsCheckboxV2Component`: Implement version 2 of `EcabsCheckboxComponent`.
|
|
122
|
-
- **v1.1.60** — Migrate input mask library from `vanilla-text-mask` to `maskito`.
|
|
123
|
-
- **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
|
|
124
|
-
- **v1.1.61** — Added support for 12-hour time input for `maskito` library.
|
|
125
|
-
- **Affected components**: `EcabsDateTimePicker`, `EcabsTimepicker`, `EcabsDateTimeRangePicker`.
|
|
126
|
-
- **v1.1.62** — Add `EcabsTimeRangeInputV2Component`.,
|
|
127
|
-
- **v1.1.63** — Add `EcabsSegmentComponent`.
|
|
128
|
-
- Update `EcabsSelectV2` to be more robust when handling multiple selections.
|
|
129
|
-
- **v1.1.64** — Refactor `EcabsChipAutocomplete` logic, improve component styles/disabled states, and update button styles.
|
|
130
|
-
- **v1.1.65** — `EcabsInputRange`: Remove padding and background styling.
|
|
131
|
-
- **v1.1.66** — Suppress emission of an empty query on refocusing after selection of option from `EcabsChipAutocomplete`.
|
|
129
|
+
- **v1.0.78** — Upgrade `MatSelect` to `MDC`.
|
|
130
|
+
- **v1.0.77** — Upgrade `MatChips` to `MDC`.
|
|
131
|
+
- **v1.0.76** — Upgrade `EcabsInput` module to `MDC` styling.
|
|
132
|
+
- **v1.0.75** — Upgrade `EcabsButtons` module to `MDC` styling.
|
|
133
|
+
- **v1.0.18** — Fixed width of date time picker
|
|
134
|
+
- **v1.0.13** — Fixed emitEvent behaviour of checkbox
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS9tb2RlbHMvc2lkZWJhci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhck1lbnVJdGVtPFRFbnYgPSB1bmtub3duLCBUUm9sZSA9IHVua25vd24+IHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgdXJsPzogc3RyaW5nO1xyXG4gIGV4cGFuZD86IGJvb2xlYW47XHJcbiAgc3ViSXRlbXM/OiBTaWRlYmFyTWVudUl0ZW1bXTtcclxuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25WYWx1ZUVudW08c3RyaW5nPltdO1xyXG4gIGljb25SZXNvdXJjZT86IFNpZGViYXJJY29uUmVzb3VyY2U7XHJcbiAgYmFkZ2U/OiBzdHJpbmc7XHJcbiAgaXNWaXNpYmxlPzogKGNvbnRleHQ6IE1lbnVJdGVtVmlzaWJpbGl0eUNvbnRleHQ8VEVudiwgVFJvbGU+KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtVmlzaWJpbGl0eUNvbnRleHQ8VEVudiwgVFJvbGU+IHtcclxuICBlbnZpcm9ubWVudDogVEVudjtcclxuICByb2xlOiBUUm9sZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaWRlYmFySWNvblJlc291cmNlIHtcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGVybWlzc2lvblZhbHVlRW51bTxUIGV4dGVuZHMgc3RyaW5nPiB7XHJcbiAgdmFsdWVzOiBSZWNvcmQ8VCwgc3RyaW5nPjtcclxufVxyXG4iXX0=
|
|
@@ -3,21 +3,19 @@ import { NG_VALUE_ACCESSOR, NgControl, Validators, } from '@angular/forms';
|
|
|
3
3
|
import { format, isEqual, isValid } from 'date-fns';
|
|
4
4
|
import Holidays from 'date-holidays';
|
|
5
5
|
import { isEqual as lodashIsEqual } from 'lodash';
|
|
6
|
-
import { takeUntil } from 'rxjs';
|
|
7
6
|
import EcabsElementBaseComponent from '../base/element-base';
|
|
8
|
-
import { UnsubscribeService } from '../base/services/unsubscribe.service';
|
|
9
7
|
import { EcabsDateRangePickerHeaderComponentV2 } from './components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
11
10
|
import * as i1 from "../base/services/ecabs-date-picker-translations.service";
|
|
12
|
-
import * as i2 from "../base/
|
|
13
|
-
import * as i3 from "
|
|
14
|
-
import * as i4 from "@angular/
|
|
15
|
-
import * as i5 from "
|
|
16
|
-
import * as i6 from "../base/directives/date-mask.directive";
|
|
11
|
+
import * as i2 from "../base/element-wrapper/element-wrapper.component";
|
|
12
|
+
import * as i3 from "@angular/material/datepicker";
|
|
13
|
+
import * as i4 from "@angular/forms";
|
|
14
|
+
import * as i5 from "../base/directives/date-mask.directive";
|
|
17
15
|
export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
18
16
|
injector;
|
|
19
17
|
ecabsDatePickerHeaderService;
|
|
20
|
-
|
|
18
|
+
destroyRef;
|
|
21
19
|
minDate;
|
|
22
20
|
maxDate;
|
|
23
21
|
touchUi = false;
|
|
@@ -30,6 +28,7 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
|
30
28
|
excludeWeekends;
|
|
31
29
|
specificDates;
|
|
32
30
|
holidayOptions;
|
|
31
|
+
dateToOptional = false;
|
|
33
32
|
onblur = new EventEmitter();
|
|
34
33
|
val;
|
|
35
34
|
pickerTo;
|
|
@@ -64,28 +63,42 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
|
64
63
|
}
|
|
65
64
|
//eslint-disable-next-line
|
|
66
65
|
set dateFrom(val) {
|
|
67
|
-
if (this._dateFrom
|
|
66
|
+
if (this._dateFrom === val) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (val && isValid(new Date(val))) {
|
|
68
70
|
this._dateFrom = val;
|
|
69
71
|
this.minDateTo = new Date(val);
|
|
70
|
-
if (!this.dateTo) {
|
|
72
|
+
if (!this.dateTo && !this.dateToOptional) {
|
|
71
73
|
this.pickerTo?.open();
|
|
72
74
|
}
|
|
73
|
-
this.onApply();
|
|
74
75
|
}
|
|
76
|
+
else if (!val) {
|
|
77
|
+
this._dateFrom = val;
|
|
78
|
+
this.minDateTo = this.minDate;
|
|
79
|
+
}
|
|
80
|
+
this.onApply();
|
|
75
81
|
}
|
|
76
82
|
//eslint-disable-next-line
|
|
77
83
|
set dateTo(val) {
|
|
78
|
-
if (this._dateTo
|
|
84
|
+
if (this._dateTo === val) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (val && isValid(new Date(val))) {
|
|
79
88
|
this._dateTo = val;
|
|
80
89
|
this.maxDateFrom = new Date(val);
|
|
81
|
-
this.onApply();
|
|
82
90
|
}
|
|
91
|
+
else if (!val) {
|
|
92
|
+
this._dateTo = val;
|
|
93
|
+
this.maxDateFrom = this.maxDate;
|
|
94
|
+
}
|
|
95
|
+
this.onApply();
|
|
83
96
|
}
|
|
84
|
-
constructor(injector, ecabsDatePickerHeaderService,
|
|
97
|
+
constructor(injector, ecabsDatePickerHeaderService, destroyRef) {
|
|
85
98
|
super();
|
|
86
99
|
this.injector = injector;
|
|
87
100
|
this.ecabsDatePickerHeaderService = ecabsDatePickerHeaderService;
|
|
88
|
-
this.
|
|
101
|
+
this.destroyRef = destroyRef;
|
|
89
102
|
}
|
|
90
103
|
ngOnChanges(changes) {
|
|
91
104
|
const { minDate, maxDate } = changes;
|
|
@@ -101,7 +114,7 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
|
101
114
|
ngOnInit() {
|
|
102
115
|
this.ecabsDatePickerHeaderService
|
|
103
116
|
.getConfig()
|
|
104
|
-
.pipe(
|
|
117
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
105
118
|
.subscribe((config) => (this.translationConfig = config));
|
|
106
119
|
if (this.holidayOptions?.countryCode) {
|
|
107
120
|
this.holidayInstance = new Holidays(this.holidayOptions.countryCode.toUpperCase());
|
|
@@ -112,17 +125,15 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
|
112
125
|
if (ngControl) {
|
|
113
126
|
this.control = ngControl.control;
|
|
114
127
|
this.control.valueChanges
|
|
115
|
-
.pipe(
|
|
128
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
116
129
|
.subscribe(() => this.dateRangeValidator(this.control));
|
|
117
130
|
setTimeout(() => {
|
|
118
131
|
this.dateFrom = this.value.dateFrom;
|
|
119
132
|
this.dateTo = this.value.dateTo;
|
|
133
|
+
this.dateRangeValidator(this.control);
|
|
120
134
|
});
|
|
121
135
|
}
|
|
122
136
|
}
|
|
123
|
-
ngOnDestroy() {
|
|
124
|
-
this.unsubscribeService.destroy();
|
|
125
|
-
}
|
|
126
137
|
onChange = () => { };
|
|
127
138
|
onTouch = () => { };
|
|
128
139
|
writeValue(value) {
|
|
@@ -181,38 +192,37 @@ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
|
|
|
181
192
|
}
|
|
182
193
|
dateRangeValidator(control) {
|
|
183
194
|
const required = control?.hasValidator(Validators.required);
|
|
184
|
-
if (control.value) {
|
|
185
|
-
|
|
186
|
-
control.setErrors(null);
|
|
187
|
-
if (required &&
|
|
188
|
-
(!dateFrom || dateFrom?.length === 0) &&
|
|
189
|
-
(!dateTo || dateTo?.length === 0)) {
|
|
195
|
+
if (!control.value) {
|
|
196
|
+
if (required) {
|
|
190
197
|
control.setErrors({ required: true });
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
if (!dateFrom && dateTo) {
|
|
194
|
-
control.setErrors({ dateFromRangeRequired: true });
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (dateFrom && !dateTo) {
|
|
198
|
-
control.setErrors({ dateToRangeRequired: true });
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (new Date(dateFrom) > new Date(dateTo)) {
|
|
202
|
-
control.setErrors({ dateFromMoreThanDateTo: true });
|
|
203
|
-
return;
|
|
204
198
|
}
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const { dateFrom, dateTo } = control.value;
|
|
202
|
+
control.setErrors(null);
|
|
203
|
+
if (required &&
|
|
204
|
+
(!dateFrom || dateFrom?.length === 0) &&
|
|
205
|
+
(!dateTo || dateTo?.length === 0)) {
|
|
206
|
+
control.setErrors({ required: true });
|
|
207
|
+
}
|
|
208
|
+
else if (!dateFrom && dateTo) {
|
|
209
|
+
control.setErrors({ rangeFrom: true });
|
|
210
|
+
}
|
|
211
|
+
else if (dateFrom && !dateTo && !this.dateToOptional) {
|
|
212
|
+
control.setErrors({ rangeTo: true });
|
|
213
|
+
}
|
|
214
|
+
else if (dateFrom && dateTo && new Date(dateFrom) > new Date(dateTo)) {
|
|
215
|
+
control.setErrors({ rangeOrder: true });
|
|
205
216
|
}
|
|
206
217
|
}
|
|
207
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token:
|
|
208
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions" }, outputs: { onblur: "onblur" }, providers: [
|
|
218
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
219
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions", dateToOptional: "dateToOptional" }, outputs: { onblur: "onblur" }, providers: [
|
|
209
220
|
{
|
|
210
221
|
provide: NG_VALUE_ACCESSOR,
|
|
211
222
|
useExisting: EcabsDateRangePickerComponentV2,
|
|
212
223
|
multi: true,
|
|
213
224
|
},
|
|
214
|
-
|
|
215
|
-
], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }] });
|
|
225
|
+
], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }] });
|
|
216
226
|
}
|
|
217
227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, decorators: [{
|
|
218
228
|
type: Component,
|
|
@@ -222,9 +232,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
222
232
|
useExisting: EcabsDateRangePickerComponentV2,
|
|
223
233
|
multi: true,
|
|
224
234
|
},
|
|
225
|
-
UnsubscribeService,
|
|
226
235
|
], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
|
|
227
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type:
|
|
236
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type: i0.DestroyRef }]; }, propDecorators: { minDate: [{
|
|
228
237
|
type: Input
|
|
229
238
|
}], maxDate: [{
|
|
230
239
|
type: Input
|
|
@@ -248,10 +257,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
248
257
|
type: Input
|
|
249
258
|
}], holidayOptions: [{
|
|
250
259
|
type: Input
|
|
260
|
+
}], dateToOptional: [{
|
|
261
|
+
type: Input
|
|
251
262
|
}], onblur: [{
|
|
252
263
|
type: Output
|
|
253
264
|
}], pickerTo: [{
|
|
254
265
|
type: ViewChild,
|
|
255
266
|
args: ['pickerTo']
|
|
256
267
|
}] } });
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyx5QkFBeUIsTUFBTSxzQkFBc0IsQ0FBQztBQU03RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx5RkFBeUYsQ0FBQzs7Ozs7Ozs7QUFlaEosTUFBTSxPQUFPLCtCQUNYLFNBQVEseUJBQXlCO0lBdUZkO0lBQ0E7SUFDQTtJQXRGVixPQUFPLENBQU87SUFDZCxPQUFPLENBQU87SUFDZCxP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QUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFcEQsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO3dHQTVQVSwrQkFBK0I7NEZBQS9CLCtCQUErQixzZEFUL0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Qsa0JBQWtCO1NBQ25CLDRLQy9DSCx3eURBZ0RBOzs0RkRDYSwrQkFBK0I7a0JBYjNDLFNBQVM7K0JBQ0UsNEJBQTRCLGFBRzNCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsaUNBQWlDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCxrQkFBa0I7cUJBQ25COzJLQU1RLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBTWdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgZm9ybWF0LCBpc0VxdWFsLCBpc1ZhbGlkIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgSG9saWRheXMgZnJvbSAnZGF0ZS1ob2xpZGF5cyc7XHJcbmltcG9ydCB7IGlzRXF1YWwgYXMgbG9kYXNoSXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XHJcblxyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0RhdGVQaWNrZXJIb2xpZGF5T3B0aW9ucyxcclxuICBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnMsXHJcbn0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLm1vZGVscyc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS9zZXJ2aWNlcy91bnN1YnNjcmliZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMiB9IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXIvZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyLXYyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogRWNhYnNEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRWMixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgVW5zdWJzY3JpYmVTZXJ2aWNlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyXHJcbiAgZXh0ZW5kcyBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxyXG57XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIHRvdWNoVWkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5jZWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVuZERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvckxhYmVsID0gJ3RvJztcclxuICBASW5wdXQoKSBleGNsdWRlSG9saWRheXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhjbHVkZVdlZWtlbmRzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNwZWNpZmljRGF0ZXM6IERhdGVbXTtcclxuICBASW5wdXQoKSBob2xpZGF5T3B0aW9uczogRWNhYnNEYXRlUGlja2VySG9saWRheU9wdGlvbnM7XHJcblxyXG4gIEBPdXRwdXQoKSBvbmJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICB2YWw6IHtcclxuICAgIGRhdGVGcm9tOiBzdHJpbmc7XHJcbiAgICBkYXRlVG86IHN0cmluZztcclxuICB9O1xyXG5cclxuICBAVmlld0NoaWxkKCdwaWNrZXJUbycpIHBpY2tlclRvOiBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgaGVhZGVyID0gRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMjtcclxuICBfZGF0ZUZyb206IHN0cmluZztcclxuICBfZGF0ZVRvOiBzdHJpbmc7XHJcbiAgdHJhbnNsYXRpb25Db25maWc6IEVjYWJzRGF0ZVBpY2tlclRyYW5zbGF0aW9ucztcclxuICBtaW5EYXRlRnJvbT86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZUZyb20/OiBEYXRlID0gdW5kZWZpbmVkO1xyXG4gIG1pbkRhdGVUbz86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZVRvPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhbmVsQ2xhc3MgPSAnZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjInO1xyXG5cclxuICBwcml2YXRlIGhvbGlkYXlJbnN0YW5jZTogSG9saWRheXM7XHJcblxyXG4gIGdldCB2YWx1ZSgpOiB7XHJcbiAgICBkYXRlRnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZVRvOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0ZUZyb20oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlRnJvbTtcclxuICB9XHJcblxyXG4gIGdldCBkYXRlVG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlVG87XHJcbiAgfVxyXG5cclxuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gIHNldCB2YWx1ZSh2YWw6IHsgZGF0ZUZyb206IHN0cmluZzsgZGF0ZVRvOiBzdHJpbmcgfSkge1xyXG4gICAgaWYgKHRoaXMudmFsICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMuZGF0ZUZyb20gPSB2YWwuZGF0ZUZyb207XHJcbiAgICAgIHRoaXMuZGF0ZVRvID0gdmFsLmRhdGVUbztcclxuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVGcm9tKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fZGF0ZUZyb20gIT09IHZhbCAmJiBpc1ZhbGlkKG5ldyBEYXRlKHZhbCkpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVGcm9tID0gdmFsO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG5ldyBEYXRlKHZhbCk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0ZVRvKSB7XHJcbiAgICAgICAgdGhpcy5waWNrZXJUbz8ub3BlbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uQXBwbHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVUbyh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuX2RhdGVUbyAhPT0gdmFsICYmIGlzVmFsaWQobmV3IERhdGUodmFsKSkpIHtcclxuICAgICAgdGhpcy5fZGF0ZVRvID0gdmFsO1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gbmV3IERhdGUodmFsKTtcclxuICAgICAgdGhpcy5vbkFwcGx5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgaWYgKG1pbkRhdGU/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGVGcm9tID0gbWluRGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG1pbkRhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RGF0ZT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWF4RGF0ZUZyb20gPSBtYXhEYXRlPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMubWF4RGF0ZVRvID0gbWF4RGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2VcclxuICAgICAgLmdldENvbmZpZygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZykgPT4gKHRoaXMudHJhbnNsYXRpb25Db25maWcgPSBjb25maWcpKTtcclxuXHJcbiAgICBpZiAodGhpcy5ob2xpZGF5T3B0aW9ucz8uY291bnRyeUNvZGUpIHtcclxuICAgICAgdGhpcy5ob2xpZGF5SW5zdGFuY2UgPSBuZXcgSG9saWRheXMoXHJcbiAgICAgICAgdGhpcy5ob2xpZGF5T3B0aW9ucy5jb3VudHJ5Q29kZS50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaXB0aW9uKCkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRlUmFuZ2VWYWxpZGF0b3IodGhpcy5jb250cm9sKSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0ZUZyb20gPSB0aGlzLnZhbHVlLmRhdGVGcm9tO1xyXG4gICAgICAgIHRoaXMuZGF0ZVRvID0gdGhpcy52YWx1ZS5kYXRlVG87XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIGJsdXJDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbmJsdXIuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uQXBwbHkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHtcclxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20sXHJcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghbG9kYXNoSXNFcXVhbCh0aGlzLnZhbHVlLCBuZXdWYWx1ZSkpIHtcclxuICAgICAgdGhpcy52YWwgPSBuZXdWYWx1ZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XHJcbiAgICAgIHRoaXMub25Ub3VjaChuZXdWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IHtcclxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20sXHJcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRGF0ZVJhbmdlID0gKGRhdGU6IERhdGUpOiBib29sZWFuID0+IHtcclxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xyXG5cclxuICAgIGlmIChpc1ZhbGlkKG5ldyBEYXRlKGRhdGUpKSkge1xyXG4gICAgICBjb25zdCBkYXkgPSBkYXRlPy5nZXREYXkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVXZWVrZW5kcykge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBkYXkgIT09IDAgJiYgZGF5ICE9PSA2O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5leGNsdWRlSG9saWRheXMpIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5pc0RhdGVOb3RIb2xpZGF5KGRhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zcGVjaWZpY0RhdGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRlcyA9IHRoaXMuc3BlY2lmaWNEYXRlcztcclxuICAgICAgICBpZiAoc3BlY2lmaWNEYXRlcyAmJiBzcGVjaWZpY0RhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3BlY2lmaWNEYXRlcy5maW5kSW5kZXgoKHNwZWNpZmljRGF0ZSkgPT5cclxuICAgICAgICAgICAgaXNFcXVhbChkYXRlLCBzcGVjaWZpY0RhdGUpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBpbmRleCA9PT0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICBpc0RhdGVOb3RIb2xpZGF5KGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgY291bnRyeUNvZGUsIHRpbWVab25lT2Zmc2V0IH0gPSB0aGlzLmhvbGlkYXlPcHRpb25zID8/IHt9O1xyXG5cclxuICAgIGlmIChjb3VudHJ5Q29kZSAmJiB0aW1lWm9uZU9mZnNldCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaG9saWRheUluc3RhbmNlPy5pc0hvbGlkYXkoXHJcbiAgICAgICAgYCR7Zm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJyl9VDAwOjAwOjAwJHt0aW1lWm9uZU9mZnNldH1gLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgY29uc3QgcmVxdWlyZWQgPSBjb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvIH0gPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXF1aXJlZCAmJlxyXG4gICAgICAgICghZGF0ZUZyb20gfHwgZGF0ZUZyb20/Lmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAoIWRhdGVUbyB8fCBkYXRlVG8/Lmxlbmd0aCA9PT0gMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWRhdGVGcm9tICYmIGRhdGVUbykge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZGF0ZUZyb21SYW5nZVJlcXVpcmVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRlRnJvbSAmJiAhZGF0ZVRvKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBkYXRlVG9SYW5nZVJlcXVpcmVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXcgRGF0ZShkYXRlRnJvbSkgPiBuZXcgRGF0ZShkYXRlVG8pKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBkYXRlRnJvbU1vcmVUaGFuRGF0ZVRvOiB0cnVlIH0pO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGVjYWJzLWVsZW1lbnQtd3JhcHBlciBbZGF0YV09XCJnZXREYXRhKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9fcmFuZ2UtLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImJvcmRlci1ub25lIHctZnVsbFwiXHJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lICsgJ2RhdGVGcm9tJyB9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlRnJvbVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyID8/IHRyYW5zbGF0aW9uQ29uZmlnPy5zdGFydERhdGVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJGcm9tXCJcclxuICAgICAgICBbbWluXT1cIm1pbkRhdGVGcm9tXCJcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVGcm9tXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlUmFuZ2VcIlxyXG4gICAgICAgIGVjYWJzTWFza0RhdGVcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJGcm9tLm9wZW4oKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyRnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBweC0zIHRleHQtc21cIj57eyBzZXBhcmF0b3JMYWJlbCB9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImJvcmRlci1ub25lIHctZnVsbFwiXHJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lICsgJ2RhdGVUbycgfX1cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVRvXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyID8/IHRyYW5zbGF0aW9uQ29uZmlnPy5lbmREYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyVG9cIlxyXG4gICAgICAgIFttaW5dPVwibWluRGF0ZVRvXCJcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVUb1wiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRGF0ZVJhbmdlXCJcclxuICAgICAgICBlY2Fic01hc2tEYXRlXHJcbiAgICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcclxuICAgICAgICAoY2xpY2spPVwicGlja2VyVG8ub3BlbigpXCJcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXJUb1xyXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2VjYWJzLWVsZW1lbnQtd3JhcHBlcj5cclxuIl19
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFFWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxELE9BQU8seUJBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFNN0QsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0seUZBQXlGLENBQUM7QUFDaEosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFjaEUsTUFBTSxPQUFPLCtCQUNYLFNBQVEseUJBQXlCO0lBdUdkO0lBQ0E7SUFDQTtJQXRHVixPQUFPLENBQU87SUFDZCxPQUFPLENBQU87SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFdBQVcsQ0FBUztJQUNwQixV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QUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQU1nQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIE5nQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERhdGVSYW5nZVBpY2tlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBmb3JtYXQsIGlzRXF1YWwsIGlzVmFsaWQgfSBmcm9tICdkYXRlLWZucyc7XHJcbmltcG9ydCBIb2xpZGF5cyBmcm9tICdkYXRlLWhvbGlkYXlzJztcclxuaW1wb3J0IHsgaXNFcXVhbCBhcyBsb2Rhc2hJc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICBFY2Fic0RhdGVQaWNrZXJIb2xpZGF5T3B0aW9ucyxcclxuICBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnMsXHJcbn0gZnJvbSAnLi4vYmFzZS9tb2RlbHMvZWNhYnMtZGF0ZS1waWNrZXItdHJhbnNsYXRpb25zLm1vZGVscyc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMiB9IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXIvZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyLXYyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50VjJcclxuICBleHRlbmRzIEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uQ2hhbmdlc1xyXG57XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIHRvdWNoVWkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5jZWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVuZERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvckxhYmVsID0gJ3RvJztcclxuICBASW5wdXQoKSBleGNsdWRlSG9saWRheXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhjbHVkZVdlZWtlbmRzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNwZWNpZmljRGF0ZXM6IERhdGVbXTtcclxuICBASW5wdXQoKSBob2xpZGF5T3B0aW9uczogRWNhYnNEYXRlUGlja2VySG9saWRheU9wdGlvbnM7XHJcbiAgQElucHV0KCkgZGF0ZVRvT3B0aW9uYWwgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHZhbDoge1xyXG4gICAgZGF0ZUZyb206IHN0cmluZztcclxuICAgIGRhdGVUbzogc3RyaW5nO1xyXG4gIH07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlclRvJykgcGlja2VyVG86IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBoZWFkZXIgPSBFY2Fic0RhdGVSYW5nZVBpY2tlckhlYWRlckNvbXBvbmVudFYyO1xyXG4gIF9kYXRlRnJvbTogc3RyaW5nO1xyXG4gIF9kYXRlVG86IHN0cmluZztcclxuICB0cmFuc2xhdGlvbkNvbmZpZzogRWNhYnNEYXRlUGlja2VyVHJhbnNsYXRpb25zO1xyXG4gIG1pbkRhdGVGcm9tPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuICBtYXhEYXRlRnJvbT86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWluRGF0ZVRvPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuICBtYXhEYXRlVG8/OiBEYXRlID0gdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFuZWxDbGFzcyA9ICdlY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mic7XHJcblxyXG4gIHByaXZhdGUgaG9saWRheUluc3RhbmNlOiBIb2xpZGF5cztcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IHtcclxuICAgIGRhdGVGcm9tOiBzdHJpbmc7XHJcbiAgICBkYXRlVG86IHN0cmluZztcclxuICB9IHtcclxuICAgIHJldHVybiB0aGlzLnZhbDtcclxuICB9XHJcblxyXG4gIGdldCBkYXRlRnJvbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVGcm9tO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGVUbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVUbztcclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IHZhbHVlKHZhbDogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZyB9KSB7XHJcbiAgICBpZiAodGhpcy52YWwgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLnZhbCA9IHZhbDtcclxuICAgICAgdGhpcy5kYXRlRnJvbSA9IHZhbC5kYXRlRnJvbTtcclxuICAgICAgdGhpcy5kYXRlVG8gPSB2YWwuZGF0ZVRvO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcbiAgICAgIHRoaXMub25Ub3VjaCh2YWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICBzZXQgZGF0ZUZyb20odmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl9kYXRlRnJvbSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsICYmIGlzVmFsaWQobmV3IERhdGUodmFsKSkpIHtcclxuICAgICAgdGhpcy5fZGF0ZUZyb20gPSB2YWw7XHJcbiAgICAgIHRoaXMubWluRGF0ZVRvID0gbmV3IERhdGUodmFsKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRlVG8gJiYgIXRoaXMuZGF0ZVRvT3B0aW9uYWwpIHtcclxuICAgICAgICB0aGlzLnBpY2tlclRvPy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kYXRlRnJvbSA9IHZhbDtcclxuICAgICAgdGhpcy5taW5EYXRlVG8gPSB0aGlzLm1pbkRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkFwcGx5KCk7XHJcbiAgfVxyXG5cclxuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gIHNldCBkYXRlVG8odmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl9kYXRlVG8gPT09IHZhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCAmJiBpc1ZhbGlkKG5ldyBEYXRlKHZhbCkpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVUbyA9IHZhbDtcclxuICAgICAgdGhpcy5tYXhEYXRlRnJvbSA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICB9IGVsc2UgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGF0ZVRvID0gdmFsO1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25BcHBseSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZTogRWNhYnNEYXRlUGlja2VySGVhZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZixcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgaWYgKG1pbkRhdGU/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGVGcm9tID0gbWluRGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG1pbkRhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RGF0ZT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWF4RGF0ZUZyb20gPSBtYXhEYXRlPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMubWF4RGF0ZVRvID0gbWF4RGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2VcclxuICAgICAgLmdldENvbmZpZygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+ICh0aGlzLnRyYW5zbGF0aW9uQ29uZmlnID0gY29uZmlnKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaG9saWRheU9wdGlvbnM/LmNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHRoaXMuaG9saWRheUluc3RhbmNlID0gbmV3IEhvbGlkYXlzKFxyXG4gICAgICAgIHRoaXMuaG9saWRheU9wdGlvbnMuY291bnRyeUNvZGUudG9VcHBlckNhc2UoKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRhdGVSYW5nZVZhbGlkYXRvcih0aGlzLmNvbnRyb2wpKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRlRnJvbSA9IHRoaXMudmFsdWUuZGF0ZUZyb207XHJcbiAgICAgICAgdGhpcy5kYXRlVG8gPSB0aGlzLnZhbHVlLmRhdGVUbztcclxuICAgICAgICB0aGlzLmRhdGVSYW5nZVZhbGlkYXRvcih0aGlzLmNvbnRyb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgYmx1ckNoYW5nZShlKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uYmx1ci5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25BcHBseSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFsb2Rhc2hJc0VxdWFsKHRoaXMudmFsdWUsIG5ld1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnZhbCA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcclxuICAgICAgdGhpcy5vblRvdWNoKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJEYXRlUmFuZ2UgPSAoZGF0ZTogRGF0ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQobmV3IERhdGUoZGF0ZSkpKSB7XHJcbiAgICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZXhjbHVkZVdlZWtlbmRzKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGRheSAhPT0gMCAmJiBkYXkgIT09IDY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVIb2xpZGF5cykge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLmlzRGF0ZU5vdEhvbGlkYXkoZGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNwZWNpZmljRGF0ZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGVzID0gdGhpcy5zcGVjaWZpY0RhdGVzO1xyXG4gICAgICAgIGlmIChzcGVjaWZpY0RhdGVzICYmIHNwZWNpZmljRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzcGVjaWZpY0RhdGVzLmZpbmRJbmRleCgoc3BlY2lmaWNEYXRlKSA9PlxyXG4gICAgICAgICAgICBpc0VxdWFsKGRhdGUsIHNwZWNpZmljRGF0ZSksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGluZGV4ID09PSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIGlzRGF0ZU5vdEhvbGlkYXkoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeyBjb3VudHJ5Q29kZSwgdGltZVpvbmVPZmZzZXQgfSA9IHRoaXMuaG9saWRheU9wdGlvbnMgPz8ge307XHJcblxyXG4gICAgaWYgKGNvdW50cnlDb2RlICYmIHRpbWVab25lT2Zmc2V0KSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5ob2xpZGF5SW5zdGFuY2U/LmlzSG9saWRheShcclxuICAgICAgICBgJHtmb3JtYXQoZGF0ZSwgJ3l5eXktTU0tZGQnKX1UMDA6MDA6MDAke3RpbWVab25lT2Zmc2V0fWAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBkYXRlUmFuZ2VWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKSB7XHJcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gY29udHJvbC52YWx1ZTtcclxuICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVxdWlyZWQgJiZcclxuICAgICAgKCFkYXRlRnJvbSB8fCBkYXRlRnJvbT8ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAoIWRhdGVUbyB8fCBkYXRlVG8/Lmxlbmd0aCA9PT0gMClcclxuICAgICkge1xyXG4gICAgICBjb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmICghZGF0ZUZyb20gJiYgZGF0ZVRvKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgcmFuZ2VGcm9tOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChkYXRlRnJvbSAmJiAhZGF0ZVRvICYmICF0aGlzLmRhdGVUb09wdGlvbmFsKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgcmFuZ2VUbzogdHJ1ZSB9KTtcclxuICAgIH0gZWxzZSBpZiAoZGF0ZUZyb20gJiYgZGF0ZVRvICYmIG5ldyBEYXRlKGRhdGVGcm9tKSA+IG5ldyBEYXRlKGRhdGVUbykpIHtcclxuICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyByYW5nZU9yZGVyOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZS0td3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3JhbmdlXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLW5vbmUgdy1mdWxsXCJcclxuICAgICAgICBpZD1cInt7IG5hbWUgKyAnZGF0ZUZyb20nIH19XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGVGcm9tXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic3RhcnREYXRlUGxhY2Vob2xkZXIgPz8gdHJhbnNsYXRpb25Db25maWc/LnN0YXJ0RGF0ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlckZyb21cIlxyXG4gICAgICAgIFttaW5dPVwibWluRGF0ZUZyb21cIlxyXG4gICAgICAgIFttYXhdPVwibWF4RGF0ZUZyb21cIlxyXG4gICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckRhdGVSYW5nZVwiXHJcbiAgICAgICAgZWNhYnNNYXNrRGF0ZVxyXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInBpY2tlckZyb20ub3BlbigpXCJcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXJGcm9tXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIHB4LTMgdGV4dC1zbVwiPnt7IHNlcGFyYXRvckxhYmVsIH19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3JhbmdlXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyLW5vbmUgdy1mdWxsXCJcclxuICAgICAgICBpZD1cInt7IG5hbWUgKyAnZGF0ZVRvJyB9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlVG9cIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJlbmREYXRlUGxhY2Vob2xkZXIgPz8gdHJhbnNsYXRpb25Db25maWc/LmVuZERhdGVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJUb1wiXHJcbiAgICAgICAgW21pbl09XCJtaW5EYXRlVG9cIlxyXG4gICAgICAgIFttYXhdPVwibWF4RGF0ZVRvXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlUmFuZ2VcIlxyXG4gICAgICAgIGVjYWJzTWFza0RhdGVcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJUby5vcGVuKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlclRvXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZWNhYnMtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=
|