@alfresco/adf-process-services-cloud 8.1.0-15902121227 → 8.1.0-15972188736

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.
Files changed (172) hide show
  1. package/fesm2022/adf-process-services-cloud.mjs +386 -392
  2. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  3. package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
  4. package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
  5. package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
  6. package/package.json +4 -6
  7. package/esm2022/adf-process-services-cloud.mjs +0 -5
  8. package/esm2022/lib/app/app-list-cloud.module.mjs +0 -20
  9. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +0 -67
  10. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +0 -126
  11. package/esm2022/lib/app/models/application-instance.model.mjs +0 -24
  12. package/esm2022/lib/app/public-api.mjs +0 -22
  13. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +0 -97
  14. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +0 -164
  15. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +0 -97
  16. package/esm2022/lib/common/index.mjs +0 -18
  17. package/esm2022/lib/common/interface/environment.interface.mjs +0 -18
  18. package/esm2022/lib/common/interface/index.mjs +0 -18
  19. package/esm2022/lib/common/interface/public-api.mjs +0 -18
  20. package/esm2022/lib/common/public-api.mjs +0 -19
  21. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +0 -57
  22. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +0 -31
  23. package/esm2022/lib/form/components/form-cloud.component.mjs +0 -416
  24. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +0 -54
  25. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +0 -36
  26. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +0 -250
  27. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +0 -137
  28. package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +0 -107
  29. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +0 -121
  30. package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +0 -122
  31. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +0 -190
  32. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +0 -86
  33. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +0 -80
  34. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +0 -464
  35. package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +0 -29
  36. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +0 -47
  37. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +0 -83
  38. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +0 -92
  39. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +0 -81
  40. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +0 -54
  41. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +0 -86
  42. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +0 -117
  43. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +0 -188
  44. package/esm2022/lib/form/form-cloud.module.mjs +0 -103
  45. package/esm2022/lib/form/models/form-cloud-representation.model.mjs +0 -48
  46. package/esm2022/lib/form/models/task-variable-cloud.model.mjs +0 -28
  47. package/esm2022/lib/form/public-api.mjs +0 -44
  48. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +0 -120
  49. package/esm2022/lib/form/services/display-mode.service.mjs +0 -146
  50. package/esm2022/lib/form/services/form-cloud.service.interface.mjs +0 -18
  51. package/esm2022/lib/form/services/form-cloud.service.mjs +0 -201
  52. package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +0 -18
  53. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +0 -51
  54. package/esm2022/lib/form/services/form-utils.service.mjs +0 -37
  55. package/esm2022/lib/form/services/process-cloud-content.service.mjs +0 -71
  56. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +0 -52
  57. package/esm2022/lib/group/components/group-cloud.component.mjs +0 -424
  58. package/esm2022/lib/group/group-cloud.module.mjs +0 -33
  59. package/esm2022/lib/group/models/identity-group.model.mjs +0 -18
  60. package/esm2022/lib/group/public-api.mjs +0 -21
  61. package/esm2022/lib/group/services/identity-group.service.mjs +0 -89
  62. package/esm2022/lib/models/application-version.model.mjs +0 -21
  63. package/esm2022/lib/models/constant-values.type.mjs +0 -18
  64. package/esm2022/lib/models/data-column-custom-data.mjs +0 -18
  65. package/esm2022/lib/models/date-cloud-filter.model.mjs +0 -31
  66. package/esm2022/lib/models/date-format-cloud.model.mjs +0 -18
  67. package/esm2022/lib/models/engine-event-cloud.model.mjs +0 -18
  68. package/esm2022/lib/models/filter-cloud-model.mjs +0 -128
  69. package/esm2022/lib/models/process-definition-cloud.model.mjs +0 -32
  70. package/esm2022/lib/models/process-instance-variable.model.mjs +0 -18
  71. package/esm2022/lib/models/process-variable-filter.model.mjs +0 -18
  72. package/esm2022/lib/models/task-cloud.model.mjs +0 -23
  73. package/esm2022/lib/models/task-list-sorting.model.mjs +0 -40
  74. package/esm2022/lib/models/variable-definition.mjs +0 -18
  75. package/esm2022/lib/people/components/people-cloud.component.mjs +0 -499
  76. package/esm2022/lib/people/models/identity-user.model.mjs +0 -18
  77. package/esm2022/lib/people/people-cloud.module.mjs +0 -33
  78. package/esm2022/lib/people/public-api.mjs +0 -21
  79. package/esm2022/lib/people/services/identity-user.service.mjs +0 -119
  80. package/esm2022/lib/process/process-cloud.module.mjs +0 -40
  81. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +0 -802
  82. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +0 -59
  83. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +0 -293
  84. package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +0 -170
  85. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +0 -44
  86. package/esm2022/lib/process/process-filters/public-api.mjs +0 -23
  87. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +0 -408
  88. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +0 -137
  89. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +0 -33
  90. package/esm2022/lib/process/process-header/public-api.mjs +0 -19
  91. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +0 -594
  92. package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +0 -31
  93. package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +0 -18
  94. package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +0 -24
  95. package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +0 -37
  96. package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +0 -107
  97. package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +0 -40
  98. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +0 -45
  99. package/esm2022/lib/process/process-list/public-api.mjs +0 -25
  100. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +0 -253
  101. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +0 -109
  102. package/esm2022/lib/process/public-api.mjs +0 -23
  103. package/esm2022/lib/process/services/process-cloud.service.mjs +0 -105
  104. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +0 -481
  105. package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +0 -18
  106. package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +0 -26
  107. package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +0 -26
  108. package/esm2022/lib/process/start-process/public-api.mjs +0 -21
  109. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +0 -125
  110. package/esm2022/lib/process-services-cloud.module.mjs +0 -91
  111. package/esm2022/lib/rich-text-editor/editorjs-config.mjs +0 -101
  112. package/esm2022/lib/rich-text-editor/index.mjs +0 -18
  113. package/esm2022/lib/rich-text-editor/public-api.mjs +0 -19
  114. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +0 -80
  115. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +0 -33
  116. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +0 -186
  117. package/esm2022/lib/screen/models/screen-cloud.model.mjs +0 -18
  118. package/esm2022/lib/screen/public-api.mjs +0 -18
  119. package/esm2022/lib/services/base-cloud.service.mjs +0 -83
  120. package/esm2022/lib/services/cloud-token.service.mjs +0 -23
  121. package/esm2022/lib/services/form-fields.interfaces.mjs +0 -55
  122. package/esm2022/lib/services/local-preference-cloud.service.mjs +0 -122
  123. package/esm2022/lib/services/notification-cloud.service.mjs +0 -45
  124. package/esm2022/lib/services/preference-cloud.interface.mjs +0 -18
  125. package/esm2022/lib/services/public-api.mjs +0 -28
  126. package/esm2022/lib/services/screen-rendering.service.mjs +0 -30
  127. package/esm2022/lib/services/task-list-cloud.service.interface.mjs +0 -18
  128. package/esm2022/lib/services/user-preference-cloud.service.mjs +0 -105
  129. package/esm2022/lib/services/variable-mapper.sevice.mjs +0 -77
  130. package/esm2022/lib/services/web-socket.service.mjs +0 -146
  131. package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +0 -32
  132. package/esm2022/lib/task/models/task-details-cloud.model.mjs +0 -26
  133. package/esm2022/lib/task/models/task.model.mjs +0 -23
  134. package/esm2022/lib/task/public-api.mjs +0 -26
  135. package/esm2022/lib/task/services/task-cloud.service.mjs +0 -272
  136. package/esm2022/lib/task/task-cloud.module.mjs +0 -45
  137. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +0 -59
  138. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +0 -467
  139. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +0 -206
  140. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +0 -318
  141. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +0 -147
  142. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +0 -143
  143. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +0 -73
  144. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +0 -256
  145. package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +0 -207
  146. package/esm2022/lib/task/task-filters/public-api.mjs +0 -27
  147. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +0 -283
  148. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +0 -392
  149. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +0 -56
  150. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +0 -214
  151. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +0 -89
  152. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +0 -284
  153. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +0 -101
  154. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +0 -87
  155. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +0 -79
  156. package/esm2022/lib/task/task-form/public-api.mjs +0 -21
  157. package/esm2022/lib/task/task-form/task-form.module.mjs +0 -36
  158. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +0 -280
  159. package/esm2022/lib/task/task-header/public-api.mjs +0 -19
  160. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +0 -33
  161. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +0 -331
  162. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +0 -116
  163. package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +0 -31
  164. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +0 -390
  165. package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +0 -18
  166. package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +0 -18
  167. package/esm2022/lib/task/task-list/public-api.mjs +0 -23
  168. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +0 -115
  169. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +0 -178
  170. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +0 -57
  171. package/esm2022/lib/types.mjs +0 -18
  172. package/esm2022/public-api.mjs +0 -40
@@ -1,464 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { AppConfigService, ErrorMessageModel, ErrorWidgetComponent, FormFieldEvent, FormFieldTypes, FormService, SelectFilterInputComponent, WidgetComponent } from '@alfresco/adf-core';
18
- import { AsyncPipe, NgFor, NgIf } from '@angular/common';
19
- import { Component, DestroyRef, inject, ViewEncapsulation } from '@angular/core';
20
- import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
21
- import { MatFormFieldModule } from '@angular/material/form-field';
22
- import { MatSelectModule } from '@angular/material/select';
23
- import { TranslateModule } from '@ngx-translate/core';
24
- import { BehaviorSubject } from 'rxjs';
25
- import { filter, map } from 'rxjs/operators';
26
- import { FormCloudService } from '../../../services/form-cloud.service';
27
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
28
- import { FormUtilsService } from '../../../services/form-utils.service';
29
- import { defaultValueValidator } from './validators';
30
- import * as i0 from "@angular/core";
31
- import * as i1 from "@angular/forms";
32
- import * as i2 from "@angular/material/form-field";
33
- import * as i3 from "@angular/material/select";
34
- import * as i4 from "@angular/material/core";
35
- import * as i5 from "@ngx-translate/core";
36
- export const DEFAULT_OPTION = {
37
- id: 'empty',
38
- name: 'Choose one...'
39
- };
40
- export const HIDE_FILTER_LIMIT = 5;
41
- /* eslint-disable @angular-eslint/component-selector */
42
- export class DropdownCloudWidgetComponent extends WidgetComponent {
43
- constructor() {
44
- super(...arguments);
45
- this.formService = inject(FormService);
46
- this.formCloudService = inject(FormCloudService);
47
- this.appConfig = inject(AppConfigService);
48
- this.formUtilsService = inject(FormUtilsService);
49
- this.destroyRef = inject(DestroyRef);
50
- this.typeId = 'DropdownCloudWidgetComponent';
51
- this.showInputFilter = false;
52
- this.isRestApiFailed = false;
53
- this.variableOptionsFailed = false;
54
- this.previewState = false;
55
- this.dropdownControl = new FormControl(undefined);
56
- this.list$ = new BehaviorSubject([]);
57
- this.filter$ = new BehaviorSubject('');
58
- this.defaultVariableOptionId = 'id';
59
- this.defaultVariableOptionLabel = 'name';
60
- this.defaultVariableOptionPath = 'data';
61
- }
62
- get showRequiredMessage() {
63
- return this.dropdownControl.touched && this.dropdownControl.errors?.required && !this.isRestApiFailed && !this.variableOptionsFailed;
64
- }
65
- get isReadOnlyType() {
66
- return this.field.type === 'readonly';
67
- }
68
- get isLinkedWidget() {
69
- return !!this.linkedWidgetId;
70
- }
71
- get linkedWidgetId() {
72
- return this.field?.rule?.ruleOn;
73
- }
74
- get isReadOnlyForm() {
75
- return !!this.field?.form?.readOnly;
76
- }
77
- get hasRestUrl() {
78
- return !!this.field?.restUrl;
79
- }
80
- get isValidRestConfig() {
81
- return this.isRestOptionType && this.hasRestUrl;
82
- }
83
- get isRestOptionType() {
84
- return this.field?.optionType === 'rest';
85
- }
86
- get isVariableOptionType() {
87
- return this.field?.optionType === 'variable';
88
- }
89
- ngOnInit() {
90
- this.setupDropdown();
91
- this.formService.onFormVariableChanged.subscribe(({ field }) => {
92
- if (field.id === this.field.id) {
93
- this.setupDropdown();
94
- }
95
- });
96
- }
97
- updateReactiveFormControl() {
98
- this.updateFormControlState();
99
- this.handleErrors();
100
- }
101
- compareDropdownValues(opt1, opt2) {
102
- if (!opt1 || !opt2) {
103
- return false;
104
- }
105
- if (typeof opt1 === 'string' && typeof opt2 === 'object') {
106
- return opt1 === opt2.id || opt1 === opt2.name;
107
- }
108
- if (typeof opt1 === 'object' && typeof opt2 === 'string') {
109
- return opt1.id === opt2 || opt1.name === opt2;
110
- }
111
- if (typeof opt1 === 'object' && typeof opt2 === 'object') {
112
- return opt1.id === opt2.id || opt1.name === opt2.name;
113
- }
114
- return opt1 === opt2;
115
- }
116
- selectionChangedForField(field) {
117
- const formFieldValueChangedEvent = new FormFieldEvent(field.form, field);
118
- this.formService.formFieldValueChanged.next(formFieldValueChangedEvent);
119
- this.onFieldChanged(field);
120
- }
121
- setupDropdown() {
122
- this.setPreviewState();
123
- this.checkFieldOptionsSource();
124
- this.updateOptions();
125
- this.setFormControlValue();
126
- this.updateFormControlState();
127
- this.subscribeToInputChanges();
128
- this.initFilter();
129
- this.handleErrors();
130
- }
131
- subscribeToInputChanges() {
132
- this.dropdownControl.valueChanges
133
- .pipe(filter(() => !!this.field), takeUntilDestroyed(this.destroyRef))
134
- .subscribe((value) => {
135
- this.setOptionValue(value, this.field);
136
- this.handleErrors();
137
- this.selectionChangedForField(this.field);
138
- });
139
- }
140
- setFormControlValue() {
141
- if (Array.isArray(this.field.value)) {
142
- this.dropdownControl.setValue(this.field?.value, { emitEvent: false });
143
- }
144
- else if (this.field?.value && typeof this.field?.value === 'object') {
145
- this.dropdownControl.setValue({ id: this.field?.value.id, name: this.field?.value.name }, { emitEvent: false });
146
- }
147
- else if (this.field.value === null) {
148
- this.dropdownControl.setValue(this.field?.value, { emitEvent: false });
149
- }
150
- else {
151
- this.dropdownControl.setValue({ id: this.field?.value, name: '' }, { emitEvent: false });
152
- }
153
- }
154
- updateFormControlState() {
155
- this.updateDropdownValidationRules();
156
- this.updateDropdownReadonlyRules();
157
- this.dropdownControl.updateValueAndValidity({ emitEvent: false });
158
- }
159
- updateDropdownValidationRules() {
160
- this.dropdownControl.setValidators([]);
161
- if (!this.field?.isVisible) {
162
- return;
163
- }
164
- if (this.isRequired()) {
165
- this.dropdownControl.addValidators([Validators.required]);
166
- if (this.field.hasEmptyValue) {
167
- this.dropdownControl.addValidators([defaultValueValidator(this.field)]);
168
- }
169
- }
170
- }
171
- updateDropdownReadonlyRules() {
172
- if (this.field?.readOnly || this.readOnly) {
173
- this.dropdownControl.disable({ emitEvent: false });
174
- }
175
- else {
176
- this.dropdownControl.enable({ emitEvent: false });
177
- }
178
- }
179
- handleErrors() {
180
- if (this.dropdownControl.valid) {
181
- this.field.validationSummary = new ErrorMessageModel('');
182
- this.field.markAsValid();
183
- return;
184
- }
185
- if (this.dropdownControl.invalid && this.dropdownControl.errors.required) {
186
- this.field.validationSummary = new ErrorMessageModel({ message: 'FORM.FIELD.REQUIRED' });
187
- this.field.markAsInvalid();
188
- }
189
- }
190
- initFilter() {
191
- this.filter$
192
- .pipe(filter((search) => search !== undefined), map((search) => search ? this.field.options.filter(({ name }) => name.toLowerCase().includes(search.toLowerCase())) : this.field.options), takeUntilDestroyed(this.destroyRef))
193
- .subscribe((result) => this.list$.next(result));
194
- }
195
- checkFieldOptionsSource() {
196
- switch (true) {
197
- case this.isReadOnlyForm:
198
- break;
199
- case this.isValidRestConfig && !this.isLinkedWidget:
200
- this.persistFieldOptionsFromRestApi();
201
- break;
202
- case this.isLinkedWidget:
203
- this.loadFieldOptionsForLinkedWidget();
204
- break;
205
- case this.isVariableOptionType:
206
- this.persistFieldOptionsFromVariable();
207
- break;
208
- default:
209
- break;
210
- }
211
- }
212
- persistFieldOptionsFromVariable() {
213
- const optionsPath = this.field?.variableConfig?.optionsPath ?? this.defaultVariableOptionPath;
214
- const variableName = this.field?.variableConfig?.variableName;
215
- const processVariables = this.field?.form?.processVariables;
216
- const formVariables = this.field?.form?.variables;
217
- const dropdownOptions = this.getOptionsFromVariable(processVariables, formVariables, variableName);
218
- if (dropdownOptions) {
219
- const formVariableOptions = this.getOptionsFromPath(dropdownOptions, optionsPath);
220
- this.updateOptions(formVariableOptions);
221
- this.resetInvalidValue();
222
- this.field.updateForm();
223
- }
224
- else {
225
- this.handleError(`${variableName} not found`);
226
- this.resetOptions();
227
- this.variableOptionsFailed = true;
228
- }
229
- }
230
- getOptionsFromPath(data, path) {
231
- const optionsId = this.field?.variableConfig?.optionsId ?? this.defaultVariableOptionId;
232
- const optionsLabel = this.field?.variableConfig?.optionsLabel ?? this.defaultVariableOptionLabel;
233
- const properties = path.split('.');
234
- const currentProperty = properties.shift();
235
- if (!Object.prototype.hasOwnProperty.call(data, currentProperty)) {
236
- this.handleError(`${currentProperty} not found in ${JSON.stringify(data)}`);
237
- this.variableOptionsFailed = true;
238
- return [];
239
- }
240
- const nestedData = data[currentProperty];
241
- if (Array.isArray(nestedData)) {
242
- return this.getOptionsFromArray(nestedData, optionsId, optionsLabel);
243
- }
244
- return this.getOptionsFromPath(nestedData, properties.join('.'));
245
- }
246
- getOptionsFromArray(nestedData, id, label) {
247
- const options = nestedData.map((item) => this.createOption(item, id, label));
248
- const hasInvalidOption = options.some((option) => !option);
249
- if (hasInvalidOption) {
250
- this.variableOptionsFailed = true;
251
- return [];
252
- }
253
- this.variableOptionsFailed = false;
254
- return options;
255
- }
256
- createOption(item, id, label) {
257
- const option = {
258
- id: item[id],
259
- name: item[label]
260
- };
261
- if (!option.id || !option.name) {
262
- this.handleError(`'id' or 'label' is not properly defined`);
263
- return undefined;
264
- }
265
- return option;
266
- }
267
- getOptionsFromVariable(processVariables, formVariables, variableName) {
268
- const processVariableDropdownOptions = this.getVariableValueByName(processVariables, variableName);
269
- const formVariableDropdownOptions = this.getVariableValueByName(formVariables, variableName);
270
- return processVariableDropdownOptions ?? formVariableDropdownOptions;
271
- }
272
- getVariableValueByName(variables, variableName) {
273
- return variables?.find((variable) => variable?.name === `variables.${variableName}` || variable?.name === variableName)
274
- ?.value;
275
- }
276
- persistFieldOptionsFromRestApi() {
277
- if (this.isValidRestConfig) {
278
- this.resetRestApiErrorMessage();
279
- const bodyParam = this.buildBodyParam();
280
- this.formCloudService
281
- .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
282
- .pipe(takeUntilDestroyed(this.destroyRef))
283
- .subscribe({
284
- next: (result) => {
285
- this.resetRestApiErrorMessage();
286
- this.updateOptions(result);
287
- this.field.updateForm();
288
- this.resetInvalidValue();
289
- },
290
- error: (err) => {
291
- this.resetRestApiOptions();
292
- this.handleError(err);
293
- }
294
- });
295
- }
296
- }
297
- buildBodyParam() {
298
- const bodyParam = Object.assign({});
299
- if (this.isLinkedWidget) {
300
- const parentWidgetValue = this.getParentWidgetValue();
301
- const parentWidgetId = this.linkedWidgetId;
302
- bodyParam[parentWidgetId] = parentWidgetValue;
303
- }
304
- return this.formUtilsService.getRestUrlVariablesMap(this.field.form, this.field.restUrl, bodyParam);
305
- }
306
- loadFieldOptionsForLinkedWidget() {
307
- const parentWidgetValue = this.getParentWidgetValue();
308
- this.parentValueChanged(parentWidgetValue);
309
- this.formService.formFieldValueChanged
310
- .pipe(filter((event) => this.isFormFieldEventOfTypeDropdown(event) && this.isParentFormFieldEvent(event)), takeUntilDestroyed(this.destroyRef))
311
- .subscribe((event) => {
312
- const valueOfParentWidget = event.field.value;
313
- this.parentValueChanged(valueOfParentWidget);
314
- });
315
- }
316
- getParentWidgetValue() {
317
- const parentWidgetId = this.linkedWidgetId;
318
- const parentWidget = this.getFormFieldById(parentWidgetId);
319
- return parentWidget?.value;
320
- }
321
- parentValueChanged(value) {
322
- if (value && !this.isNoneValueSelected(value)) {
323
- this.isValidRestConfig ? this.persistFieldOptionsFromRestApi() : this.persistFieldOptionsFromManualList(value);
324
- }
325
- else if (this.isNoneValueSelected(value)) {
326
- this.resetRestApiErrorMessage();
327
- this.resetOptions();
328
- this.resetInvalidValue();
329
- }
330
- else {
331
- this.updateOptions([]);
332
- this.resetInvalidValue();
333
- }
334
- }
335
- isNoneValueSelected(value) {
336
- return value === undefined;
337
- }
338
- getFormFieldById(fieldId) {
339
- return this.field.form.getFormFields().filter((field) => field.id === fieldId)[0];
340
- }
341
- persistFieldOptionsFromManualList(value) {
342
- if (this.hasRuleEntries()) {
343
- const rulesEntries = this.field.rule.entries;
344
- rulesEntries.forEach((ruleEntry) => {
345
- if (ruleEntry.key === value) {
346
- this.updateOptions(ruleEntry.options);
347
- this.resetInvalidValue();
348
- this.field.updateForm();
349
- }
350
- });
351
- }
352
- }
353
- resetInvalidValue() {
354
- if (!this.isValidValue()) {
355
- this.resetValue();
356
- }
357
- }
358
- resetValue() {
359
- this.field.value = '';
360
- this.selectionChangedForField(this.field);
361
- this.updateOptions();
362
- this.field.updateForm();
363
- }
364
- isValidValue() {
365
- return this.field.value && this.isSelectedValueInOptions();
366
- }
367
- isSelectedValueInOptions() {
368
- if (Array.isArray(this.field.value)) {
369
- const optionIdList = [...this.field.options].map((option) => option.id);
370
- const fieldValueIds = this.field.value.map((valueOption) => valueOption.id);
371
- return fieldValueIds.every((valueOptionId) => optionIdList.includes(valueOptionId));
372
- }
373
- else {
374
- if (this.field?.value && typeof this.field?.value === 'object') {
375
- return [...this.field.options].map((option) => option.id).includes(this.field.value.id);
376
- }
377
- else {
378
- return [...this.field.options].map((option) => option.id).includes(this.field.value);
379
- }
380
- }
381
- }
382
- hasRuleEntries() {
383
- return !!this.field.rule.entries.length;
384
- }
385
- resetOptions() {
386
- this.updateOptions([]);
387
- }
388
- isParentFormFieldEvent(event) {
389
- return event.field.id === this.linkedWidgetId;
390
- }
391
- isFormFieldEventOfTypeDropdown(event) {
392
- return event.field.type === FormFieldTypes.DROPDOWN;
393
- }
394
- setOptionValue(option, field) {
395
- if (Array.isArray(option) || field.hasMultipleValues) {
396
- field.value = option;
397
- return;
398
- }
399
- let optionValue = '';
400
- if (option.id === DEFAULT_OPTION.id) {
401
- optionValue = undefined;
402
- }
403
- else if (option.name !== field.value) {
404
- optionValue = option.id;
405
- }
406
- else {
407
- optionValue = option.name;
408
- }
409
- field.value = optionValue;
410
- }
411
- setPreviewState() {
412
- this.previewState = this.formCloudService.getPreviewState();
413
- }
414
- handleError(error) {
415
- if (!this.previewState) {
416
- this.widgetError.emit(error);
417
- }
418
- }
419
- updateOptions(options) {
420
- if (!this.field) {
421
- return;
422
- }
423
- if (options) {
424
- this.field.options = options;
425
- }
426
- this.list$.next(this.field.options);
427
- this.showInputFilter = this.field.options.length > this.appConfig.get('form.dropDownFilterLimit', HIDE_FILTER_LIMIT);
428
- }
429
- resetRestApiErrorMessage() {
430
- this.isRestApiFailed = false;
431
- this.restApiHostName = '';
432
- }
433
- resetRestApiOptions() {
434
- this.updateOptions([]);
435
- this.resetValue();
436
- this.isRestApiFailed = true;
437
- this.restApiHostName = this.getRestUrlHostName();
438
- }
439
- getRestUrlHostName() {
440
- try {
441
- return new URL(this.field?.restUrl).hostname;
442
- }
443
- catch {
444
- return this.field?.restUrl;
445
- }
446
- }
447
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownCloudWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
448
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DropdownCloudWidgetComponent, isStandalone: true, selector: "dropdown-cloud-widget", usesInheritance: true, ngImport: i0, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"dropdownControl.invalid && dropdownControl.touched\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div *ngIf=\"field.leftLabels\">\n <label class=\"adf-label adf-left-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field class=\"adf-form-field-input\">\n @if ( (field.name || this.field?.required) && !field.leftLabels) { <mat-label class=\"adf-label\" [attr.for]=\"field.id\">{{ field.name | translate }}</mat-label> }\n <mat-select\n class=\"adf-select\"\n [formControl]=\"dropdownControl\"\n [id]=\"field.id\"\n [compareWith]=\"compareDropdownValues\"\n [title]=\"field.tooltip\"\n panelClass=\"adf-select-filter\"\n [multiple]=\"field.hasMultipleValues\"\n [disabled]=\"field.readOnly\"\n [required]=\"field.required \"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\" />\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"opt\" [id]=\"opt.id\">{{opt.name}}</mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"adf-error-messages-container\" *ngIf=\"!previewState && !field.readOnly\">\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n />\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}.adf-dropdown-widget .mat-mdc-select-arrow-wrapper{height:auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "component", type: SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }], encapsulation: i0.ViewEncapsulation.None }); }
449
- }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownCloudWidgetComponent, decorators: [{
451
- type: Component,
452
- args: [{ selector: 'dropdown-cloud-widget', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
453
- NgIf,
454
- NgFor,
455
- AsyncPipe,
456
- ReactiveFormsModule,
457
- MatFormFieldModule,
458
- MatSelectModule,
459
- ErrorWidgetComponent,
460
- TranslateModule,
461
- SelectFilterInputComponent
462
- ], template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"dropdownControl.invalid && dropdownControl.touched\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div *ngIf=\"field.leftLabels\">\n <label class=\"adf-label adf-left-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field class=\"adf-form-field-input\">\n @if ( (field.name || this.field?.required) && !field.leftLabels) { <mat-label class=\"adf-label\" [attr.for]=\"field.id\">{{ field.name | translate }}</mat-label> }\n <mat-select\n class=\"adf-select\"\n [formControl]=\"dropdownControl\"\n [id]=\"field.id\"\n [compareWith]=\"compareDropdownValues\"\n [title]=\"field.tooltip\"\n panelClass=\"adf-select-filter\"\n [multiple]=\"field.hasMultipleValues\"\n [disabled]=\"field.readOnly\"\n [required]=\"field.required \"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\" />\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"opt\" [id]=\"opt.id\">{{opt.name}}</mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"adf-error-messages-container\" *ngIf=\"!previewState && !field.readOnly\">\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n />\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}.adf-dropdown-widget .mat-mdc-select-arrow-wrapper{height:auto}\n"] }]
463
- }] });
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY2xvdWQud2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL2NvbXBvbmVudHMvd2lkZ2V0cy9kcm9wZG93bi9kcm9wZG93bi1jbG91ZC53aWRnZXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy93aWRnZXRzL2Ryb3Bkb3duL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixjQUFjLEVBR2QsY0FBYyxFQUNkLFdBQVcsRUFHWCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFB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MFNBQ2xCLGVBQWUsb3JCQUNmLG9CQUFvQix1RkFDcEIsZUFBZSw0RkFDZiwwQkFBMEI7OzRGQUdyQiw0QkFBNEI7a0JBbEJ4QyxTQUFTOytCQUNJLHVCQUF1QixpQkFHbEIsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixLQUFLO3dCQUNMLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLDBCQUEwQjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBFcnJvck1lc3NhZ2VNb2RlbCxcbiAgICBFcnJvcldpZGdldENvbXBvbmVudCxcbiAgICBGb3JtRmllbGRFdmVudCxcbiAgICBGb3JtRmllbGRNb2RlbCxcbiAgICBGb3JtRmllbGRPcHRpb24sXG4gICAgRm9ybUZpZWxkVHlwZXMsXG4gICAgRm9ybVNlcnZpY2UsXG4gICAgUmVhY3RpdmVGb3JtV2lkZ2V0LFxuICAgIFJ1bGVFbnRyeSxcbiAgICBTZWxlY3RGaWx0ZXJJbnB1dENvbXBvbmVudCxcbiAgICBXaWRnZXRDb21wb25lbnRcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFza1ZhcmlhYmxlQ2xvdWQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFzay12YXJpYWJsZS1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1VdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLXV0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVmYXVsdFZhbHVlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU9OID0ge1xuICAgIGlkOiAnZW1wdHknLFxuICAgIG5hbWU6ICdDaG9vc2Ugb25lLi4uJ1xufTtcbmV4cG9ydCBjb25zdCBISURFX0ZJTFRFUl9MSU1JVCA9IDU7XG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkcm9wZG93bi1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1jbG91ZC53aWRnZXQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24tY2xvdWQud2lkZ2V0LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgRXJyb3JXaWRnZXRDb21wb25lbnQsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgU2VsZWN0RmlsdGVySW5wdXRDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ2xvdWRXaWRnZXRDb21wb25lbnQgZXh0ZW5kcyBXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFJlYWN0aXZlRm9ybVdpZGdldCB7XG4gICAgcHVibGljIGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1DbG91ZFNlcnZpY2UgPSBpbmplY3QoRm9ybUNsb3VkU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWcgPSBpbmplY3QoQXBwQ29uZmlnU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtVXRpbHNTZXJ2aWNlID0gaW5qZWN0KEZvcm1VdGlsc1NlcnZpY2UpO1xuICAgIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHR5cGVJZCA9ICdEcm9wZG93bkNsb3VkV2lkZ2V0Q29tcG9uZW50JztcbiAgICBzaG93SW5wdXRGaWx0ZXIgPSBmYWxzZTtcbiAgICBpc1Jlc3RBcGlGYWlsZWQgPSBmYWxzZTtcbiAgICB2YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSBmYWxzZTtcbiAgICBwcmV2aWV3U3RhdGUgPSBmYWxzZTtcbiAgICByZXN0QXBpSG9zdE5hbWU6IHN0cmluZztcbiAgICBkcm9wZG93bkNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Rm9ybUZpZWxkT3B0aW9uIHwgRm9ybUZpZWxkT3B0aW9uW10+KHVuZGVmaW5lZCk7XG5cbiAgICBsaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUZpZWxkT3B0aW9uW10+KFtdKTtcbiAgICBmaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhcmlhYmxlT3B0aW9uSWQgPSAnaWQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhcmlhYmxlT3B0aW9uTGFiZWwgPSAnbmFtZSc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFyaWFibGVPcHRpb25QYXRoID0gJ2RhdGEnO1xuXG4gICAgZ2V0IHNob3dSZXF1aXJlZE1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duQ29udHJvbC50b3VjaGVkICYmIHRoaXMuZHJvcGRvd25Db250cm9sLmVycm9ycz8ucmVxdWlyZWQgJiYgIXRoaXMuaXNSZXN0QXBpRmFpbGVkICYmICF0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZDtcbiAgICB9XG5cbiAgICBnZXQgaXNSZWFkT25seVR5cGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnR5cGUgPT09ICdyZWFkb25seSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNMaW5rZWRXaWRnZXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlua2VkV2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGlua2VkV2lkZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnJ1bGU/LnJ1bGVPbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1JlYWRPbmx5Rm9ybSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZD8uZm9ybT8ucmVhZE9ubHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaGFzUmVzdFVybCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZD8ucmVzdFVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1ZhbGlkUmVzdENvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZXN0T3B0aW9uVHlwZSAmJiB0aGlzLmhhc1Jlc3RVcmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNSZXN0T3B0aW9uVHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/Lm9wdGlvblR5cGUgPT09ICdyZXN0JztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1ZhcmlhYmxlT3B0aW9uVHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/Lm9wdGlvblR5cGUgPT09ICd2YXJpYWJsZSc7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0dXBEcm9wZG93bigpO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2Uub25Gb3JtVmFyaWFibGVDaGFuZ2VkLnN1YnNjcmliZSgoeyBmaWVsZCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaWQgPT09IHRoaXMuZmllbGQuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmVhY3RpdmVGb3JtQ29udHJvbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbFN0YXRlKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgY29tcGFyZURyb3Bkb3duVmFsdWVzKG9wdDE6IEZvcm1GaWVsZE9wdGlvbiB8IHN0cmluZywgb3B0MjogRm9ybUZpZWxkT3B0aW9uIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghb3B0MSB8fCAhb3B0Mikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHQxID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0MiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHQxID09PSBvcHQyLmlkIHx8IG9wdDEgPT09IG9wdDIubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0MSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdDIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0MS5pZCA9PT0gb3B0MiB8fCBvcHQxLm5hbWUgPT09IG9wdDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdDEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHQyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdDEuaWQgPT09IG9wdDIuaWQgfHwgb3B0MS5uYW1lID09PSBvcHQyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0MSA9PT0gb3B0MjtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZFZhbHVlQ2hhbmdlZEV2ZW50ID0gbmV3IEZvcm1GaWVsZEV2ZW50KGZpZWxkLmZvcm0sIGZpZWxkKTtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5mb3JtRmllbGRWYWx1ZUNoYW5nZWQubmV4dChmb3JtRmllbGRWYWx1ZUNoYW5nZWRFdmVudCk7XG4gICAgICAgIHRoaXMub25GaWVsZENoYW5nZWQoZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBEcm9wZG93bigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQcmV2aWV3U3RhdGUoKTtcblxuICAgICAgICB0aGlzLmNoZWNrRmllbGRPcHRpb25zU291cmNlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuXG4gICAgICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0lucHV0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmluaXRGaWx0ZXIoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvSW5wdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuZmllbGQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWUodmFsdWUsIHRoaXMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQodGhpcy5maWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpZWxkPy52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQ/LnZhbHVlICYmIHR5cGVvZiB0aGlzLmZpZWxkPy52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnNldFZhbHVlKHsgaWQ6IHRoaXMuZmllbGQ/LnZhbHVlLmlkLCBuYW1lOiB0aGlzLmZpZWxkPy52YWx1ZS5uYW1lIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpZWxkPy52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRyb2wuc2V0VmFsdWUoeyBpZDogdGhpcy5maWVsZD8udmFsdWUsIG5hbWU6ICcnIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybUNvbnRyb2xTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVEcm9wZG93blZhbGlkYXRpb25SdWxlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZURyb3Bkb3duUmVhZG9ubHlSdWxlcygpO1xuICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duVmFsaWRhdGlvblJ1bGVzKCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtdKTtcblxuICAgICAgICBpZiAoIXRoaXMuZmllbGQ/LmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5hZGRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5oYXNFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRyb2wuYWRkVmFsaWRhdG9ycyhbZGVmYXVsdFZhbHVlVmFsaWRhdG9yKHRoaXMuZmllbGQpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duUmVhZG9ubHlSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQ/LnJlYWRPbmx5IHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93bkNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudmFsaWRhdGlvblN1bW1hcnkgPSBuZXcgRXJyb3JNZXNzYWdlTW9kZWwoJycpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5tYXJrQXNWYWxpZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25Db250cm9sLmludmFsaWQgJiYgdGhpcy5kcm9wZG93bkNvbnRyb2wuZXJyb3JzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnZhbGlkYXRpb25TdW1tYXJ5ID0gbmV3IEVycm9yTWVzc2FnZU1vZGVsKHsgbWVzc2FnZTogJ0ZPUk0uRklFTEQuUkVRVUlSRUQnIH0pO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5tYXJrQXNJbnZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRGaWx0ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzZWFyY2gpID0+IHNlYXJjaCAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBtYXAoKHNlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoID8gdGhpcy5maWVsZC5vcHRpb25zLmZpbHRlcigoeyBuYW1lIH0pID0+IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpIDogdGhpcy5maWVsZC5vcHRpb25zXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB0aGlzLmxpc3QkLm5leHQocmVzdWx0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0ZpZWxkT3B0aW9uc1NvdXJjZSgpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNSZWFkT25seUZvcm06XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNWYWxpZFJlc3RDb25maWcgJiYgIXRoaXMuaXNMaW5rZWRXaWRnZXQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbVJlc3RBcGkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0aGlzLmlzTGlua2VkV2lkZ2V0OlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEZpZWxkT3B0aW9uc0ZvckxpbmtlZFdpZGdldCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNWYXJpYWJsZU9wdGlvblR5cGU6XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbVZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tVmFyaWFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/Lm9wdGlvbnNQYXRoID8/IHRoaXMuZGVmYXVsdFZhcmlhYmxlT3B0aW9uUGF0aDtcbiAgICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/LnZhcmlhYmxlTmFtZTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1ZhcmlhYmxlcyA9IHRoaXMuZmllbGQ/LmZvcm0/LnByb2Nlc3NWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGZvcm1WYXJpYWJsZXMgPSB0aGlzLmZpZWxkPy5mb3JtPy52YXJpYWJsZXM7XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd25PcHRpb25zID0gdGhpcy5nZXRPcHRpb25zRnJvbVZhcmlhYmxlKHByb2Nlc3NWYXJpYWJsZXMsIGZvcm1WYXJpYWJsZXMsIHZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgaWYgKGRyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhcmlhYmxlT3B0aW9uczogRm9ybUZpZWxkT3B0aW9uW10gPSB0aGlzLmdldE9wdGlvbnNGcm9tUGF0aChkcm9wZG93bk9wdGlvbnMsIG9wdGlvbnNQYXRoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyhmb3JtVmFyaWFibGVPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudXBkYXRlRm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihgJHt2YXJpYWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVPcHRpb25zRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uc0Zyb21QYXRoKGRhdGE6IGFueSwgcGF0aDogc3RyaW5nKTogRm9ybUZpZWxkT3B0aW9uW10ge1xuICAgICAgICBjb25zdCBvcHRpb25zSWQgPSB0aGlzLmZpZWxkPy52YXJpYWJsZUNvbmZpZz8ub3B0aW9uc0lkID8/IHRoaXMuZGVmYXVsdFZhcmlhYmxlT3B0aW9uSWQ7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNMYWJlbCA9IHRoaXMuZmllbGQ/LnZhcmlhYmxlQ29uZmlnPy5vcHRpb25zTGFiZWwgPz8gdGhpcy5kZWZhdWx0VmFyaWFibGVPcHRpb25MYWJlbDtcblxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0aWVzLnNoaWZ0KCk7XG5cbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgY3VycmVudFByb3BlcnR5KSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihgJHtjdXJyZW50UHJvcGVydHl9IG5vdCBmb3VuZCBpbiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmVzdGVkRGF0YSA9IGRhdGFbY3VycmVudFByb3BlcnR5XTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWREYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uc0Zyb21BcnJheShuZXN0ZWREYXRhLCBvcHRpb25zSWQsIG9wdGlvbnNMYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25zRnJvbVBhdGgobmVzdGVkRGF0YSwgcHJvcGVydGllcy5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uc0Zyb21BcnJheShuZXN0ZWREYXRhOiBhbnlbXSwgaWQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IEZvcm1GaWVsZE9wdGlvbltdIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG5lc3RlZERhdGEubWFwKChpdGVtKSA9PiB0aGlzLmNyZWF0ZU9wdGlvbihpdGVtLCBpZCwgbGFiZWwpKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZE9wdGlvbiA9IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiAhb3B0aW9uKTtcblxuICAgICAgICBpZiAoaGFzSW52YWxpZE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPcHRpb24oaXRlbTogYW55LCBpZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogRm9ybUZpZWxkT3B0aW9uIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uOiBGb3JtRmllbGRPcHRpb24gPSB7XG4gICAgICAgICAgICBpZDogaXRlbVtpZF0sXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2xhYmVsXVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghb3B0aW9uLmlkIHx8ICFvcHRpb24ubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihgJ2lkJyBvciAnbGFiZWwnIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wdGlvbnNGcm9tVmFyaWFibGUoXG4gICAgICAgIHByb2Nlc3NWYXJpYWJsZXM6IFRhc2tWYXJpYWJsZUNsb3VkW10sXG4gICAgICAgIGZvcm1WYXJpYWJsZXM6IFRhc2tWYXJpYWJsZUNsb3VkW10sXG4gICAgICAgIHZhcmlhYmxlTmFtZTogc3RyaW5nXG4gICAgKTogVGFza1ZhcmlhYmxlQ2xvdWQge1xuICAgICAgICBjb25zdCBwcm9jZXNzVmFyaWFibGVEcm9wZG93bk9wdGlvbnM6IFRhc2tWYXJpYWJsZUNsb3VkID0gdGhpcy5nZXRWYXJpYWJsZVZhbHVlQnlOYW1lKHByb2Nlc3NWYXJpYWJsZXMsIHZhcmlhYmxlTmFtZSk7XG4gICAgICAgIGNvbnN0IGZvcm1WYXJpYWJsZURyb3Bkb3duT3B0aW9uczogVGFza1ZhcmlhYmxlQ2xvdWQgPSB0aGlzLmdldFZhcmlhYmxlVmFsdWVCeU5hbWUoZm9ybVZhcmlhYmxlcywgdmFyaWFibGVOYW1lKTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlRHJvcGRvd25PcHRpb25zID8/IGZvcm1WYXJpYWJsZURyb3Bkb3duT3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhcmlhYmxlVmFsdWVCeU5hbWUodmFyaWFibGVzOiBUYXNrVmFyaWFibGVDbG91ZFtdLCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZXM/LmZpbmQoKHZhcmlhYmxlOiBUYXNrVmFyaWFibGVDbG91ZCkgPT4gdmFyaWFibGU/Lm5hbWUgPT09IGB2YXJpYWJsZXMuJHt2YXJpYWJsZU5hbWV9YCB8fCB2YXJpYWJsZT8ubmFtZSA9PT0gdmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tUmVzdEFwaSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZFJlc3RDb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpRXJyb3JNZXNzYWdlKCk7XG4gICAgICAgICAgICBjb25zdCBib2R5UGFyYW0gPSB0aGlzLmJ1aWxkQm9keVBhcmFtKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0UmVzdFdpZGdldERhdGEodGhpcy5maWVsZC5mb3JtLmlkLCB0aGlzLmZpZWxkLmlkLCBib2R5UGFyYW0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IEZvcm1GaWVsZE9wdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UmVzdEFwaUVycm9yTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQm9keVBhcmFtKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGJvZHlQYXJhbSA9IE9iamVjdC5hc3NpZ24oe30pO1xuICAgICAgICBpZiAodGhpcy5pc0xpbmtlZFdpZGdldCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50V2lkZ2V0VmFsdWUgPSB0aGlzLmdldFBhcmVudFdpZGdldFZhbHVlKCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXRJZCA9IHRoaXMubGlua2VkV2lkZ2V0SWQ7XG4gICAgICAgICAgICBib2R5UGFyYW1bcGFyZW50V2lkZ2V0SWRdID0gcGFyZW50V2lkZ2V0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtVXRpbHNTZXJ2aWNlLmdldFJlc3RVcmxWYXJpYWJsZXNNYXAodGhpcy5maWVsZC5mb3JtLCB0aGlzLmZpZWxkLnJlc3RVcmwsIGJvZHlQYXJhbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRmllbGRPcHRpb25zRm9yTGlua2VkV2lkZ2V0KCkge1xuICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXRWYWx1ZSA9IHRoaXMuZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5wYXJlbnRWYWx1ZUNoYW5nZWQocGFyZW50V2lkZ2V0VmFsdWUpO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUZpZWxkVmFsdWVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBGb3JtRmllbGRFdmVudCkgPT4gdGhpcy5pc0Zvcm1GaWVsZEV2ZW50T2ZUeXBlRHJvcGRvd24oZXZlbnQpICYmIHRoaXMuaXNQYXJlbnRGb3JtRmllbGRFdmVudChldmVudCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRm9ybUZpZWxkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZU9mUGFyZW50V2lkZ2V0ID0gZXZlbnQuZmllbGQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRWYWx1ZUNoYW5nZWQodmFsdWVPZlBhcmVudFdpZGdldCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudFdpZGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhcmVudFdpZGdldElkID0gdGhpcy5saW5rZWRXaWRnZXRJZDtcbiAgICAgICAgY29uc3QgcGFyZW50V2lkZ2V0ID0gdGhpcy5nZXRGb3JtRmllbGRCeUlkKHBhcmVudFdpZGdldElkKTtcbiAgICAgICAgcmV0dXJuIHBhcmVudFdpZGdldD8udmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJlbnRWYWx1ZUNoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUgJiYgIXRoaXMuaXNOb25lVmFsdWVTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJlc3RDb25maWcgPyB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tUmVzdEFwaSgpIDogdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbU1hbnVhbExpc3QodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOb25lVmFsdWVTZWxlY3RlZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpRXJyb3JNZXNzYWdlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKFtdKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOb25lVmFsdWVTZWxlY3RlZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUZpZWxkQnlJZChmaWVsZElkKTogRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5mb3JtLmdldEZvcm1GaWVsZHMoKS5maWx0ZXIoKGZpZWxkOiBGb3JtRmllbGRNb2RlbCkgPT4gZmllbGQuaWQgPT09IGZpZWxkSWQpWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21NYW51YWxMaXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUnVsZUVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXNFbnRyaWVzID0gdGhpcy5maWVsZC5ydWxlLmVudHJpZXM7XG4gICAgICAgICAgICBydWxlc0VudHJpZXMuZm9yRWFjaCgocnVsZUVudHJ5OiBSdWxlRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZUVudHJ5LmtleSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKHJ1bGVFbnRyeS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbnZhbGlkVmFsdWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0VmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZmllbGQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQodGhpcy5maWVsZCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQudmFsdWUgJiYgdGhpcy5pc1NlbGVjdGVkVmFsdWVJbk9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2VsZWN0ZWRWYWx1ZUluT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5maWVsZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkTGlzdCA9IFsuLi50aGlzLmZpZWxkLm9wdGlvbnNdLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uaWQpO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZUlkcyA9IHRoaXMuZmllbGQudmFsdWUubWFwKCh2YWx1ZU9wdGlvbikgPT4gdmFsdWVPcHRpb24uaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWVJZHMuZXZlcnkoKHZhbHVlT3B0aW9uSWQpID0+IG9wdGlvbklkTGlzdC5pbmNsdWRlcyh2YWx1ZU9wdGlvbklkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZD8udmFsdWUgJiYgdHlwZW9mIHRoaXMuZmllbGQ/LnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4udGhpcy5maWVsZC5vcHRpb25zXS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmlkKS5pbmNsdWRlcyh0aGlzLmZpZWxkLnZhbHVlLmlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpZWxkLm9wdGlvbnNdLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uaWQpLmluY2x1ZGVzKHRoaXMuZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNSdWxlRW50cmllcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZC5ydWxlLmVudHJpZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRPcHRpb25zKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQYXJlbnRGb3JtRmllbGRFdmVudChldmVudDogRm9ybUZpZWxkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmZpZWxkLmlkID09PSB0aGlzLmxpbmtlZFdpZGdldElkO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGb3JtRmllbGRFdmVudE9mVHlwZURyb3Bkb3duKGV2ZW50OiBGb3JtRmllbGRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQuZmllbGQudHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuRFJPUERPV047XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcHRpb25WYWx1ZShvcHRpb246IEZvcm1GaWVsZE9wdGlvbiB8IEZvcm1GaWVsZE9wdGlvbltdLCBmaWVsZDogRm9ybUZpZWxkTW9kZWwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSB8fCBmaWVsZC5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBvcHRpb247XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3B0aW9uVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgICAgICBpZiAob3B0aW9uLmlkID09PSBERUZBVUxUX09QVElPTi5pZCkge1xuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm5hbWUgIT09IGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9IG9wdGlvbi5pZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZC52YWx1ZSA9IG9wdGlvblZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJldmlld1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdTdGF0ZSA9IHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyhvcHRpb25zPzogRm9ybUZpZWxkT3B0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5maWVsZC5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdCQubmV4dCh0aGlzLmZpZWxkLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnNob3dJbnB1dEZpbHRlciA9IHRoaXMuZmllbGQub3B0aW9ucy5sZW5ndGggPiB0aGlzLmFwcENvbmZpZy5nZXQ8bnVtYmVyPignZm9ybS5kcm9wRG93bkZpbHRlckxpbWl0JywgSElERV9GSUxURVJfTElNSVQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRSZXN0QXBpRXJyb3JNZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUmVzdEFwaUZhaWxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc3RBcGlIb3N0TmFtZSA9ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRSZXN0QXBpT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKFtdKTtcbiAgICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgICAgIHRoaXMuaXNSZXN0QXBpRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXN0QXBpSG9zdE5hbWUgPSB0aGlzLmdldFJlc3RVcmxIb3N0TmFtZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzdFVybEhvc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVSTCh0aGlzLmZpZWxkPy5yZXN0VXJsKS5ob3N0bmFtZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ucmVzdFVybDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFkZi1kcm9wZG93bi13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiXG4gICAgW2NsYXNzLmFkZi1pbnZhbGlkXT1cImRyb3Bkb3duQ29udHJvbC5pbnZhbGlkICYmIGRyb3Bkb3duQ29udHJvbC50b3VjaGVkXCJcbiAgICBbY2xhc3MuYWRmLXJlYWRvbmx5XT1cImZpZWxkLnJlYWRPbmx5XCJcbiAgICBbY2xhc3MuYWRmLWxlZnQtbGFiZWwtaW5wdXQtY29udGFpbmVyXT1cImZpZWxkLmxlZnRMYWJlbHNcIlxuPlxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5sZWZ0TGFiZWxzXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbCBhZGYtbGVmdC1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPlxuICAgICAgICAgICAge3sgZmllbGQubmFtZSB8IHRyYW5zbGF0ZSB9fTxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgW3N0eWxlLnZpc2liaWxpdHldPVwiaXNSZXF1aXJlZCgpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1mb3JtLWZpZWxkLWlucHV0XCI+XG4gICAgICAgICAgICBAaWYgKCAoZmllbGQubmFtZSB8fCB0aGlzLmZpZWxkPy5yZXF1aXJlZCkgJiYgIWZpZWxkLmxlZnRMYWJlbHMpIHsgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj57eyBmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+IH1cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZHJvcGRvd25Db250cm9sXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxuICAgICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWVsZC50b29sdGlwXCJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYWRmLXNlbGVjdC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmaWVsZC5oYXNNdWx0aXBsZVZhbHVlc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWQgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YWRmLXNlbGVjdC1maWx0ZXItaW5wdXQgKm5nSWY9XCJzaG93SW5wdXRGaWx0ZXJcIiAoY2hhbmdlKT1cImZpbHRlciQubmV4dCgkZXZlbnQpXCIgLz5cblxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgbGlzdCQgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRcIiBbaWRdPVwib3B0LmlkXCI+e3tvcHQubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGlkPVwicmVhZG9ubHlPcHRpb25cIiAqbmdJZj1cImlzUmVhZE9ubHlUeXBlXCIgW3ZhbHVlXT1cImZpZWxkLnZhbHVlXCI+e3tmaWVsZC52YWx1ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLW1lc3NhZ2VzLWNvbnRhaW5lclwiICpuZ0lmPVwiIXByZXZpZXdTdGF0ZSAmJiAhZmllbGQucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxlcnJvci13aWRnZXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kcm9wZG93bi1yZXF1aXJlZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dSZXF1aXJlZE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3sgJ0ZPUk0uRklFTEQuUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZXJyb3Itd2lkZ2V0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZHJvcGRvd24tZmFpbGVkLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNSZXN0QXBpRmFpbGVkXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlJFU1RfQVBJX0ZBSUxFRCcgfCB0cmFuc2xhdGU6IHsgaG9zdG5hbWU6IHJlc3RBcGlIb3N0TmFtZSB9IH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZXJyb3Itd2lkZ2V0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZHJvcGRvd24tZmFpbGVkLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidmFyaWFibGVPcHRpb25zRmFpbGVkXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlZBUklBQkxFX0RST1BET1dOX09QVElPTlNfRkFJTEVEJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,29 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { DEFAULT_OPTION } from './dropdown-cloud.widget';
18
- export const defaultValueValidator = (filed) => (control) => {
19
- const optionsWithNoDefaultValue = filed.options.filter((dropdownOption) => {
20
- const isDefaultValue = dropdownOption.id === DEFAULT_OPTION.id;
21
- return !isDefaultValue;
22
- });
23
- const isSomeOptionSelected = optionsWithNoDefaultValue.some((dropdownOption) => {
24
- const isOptionSelected = dropdownOption.id === control.value?.id;
25
- return isOptionSelected;
26
- });
27
- return isSomeOptionSelected ? null : { required: true };
28
- };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvZHJvcGRvd24vdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQzlCLENBQUMsS0FBcUIsRUFBZSxFQUFFLENBQ3ZDLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtJQUNsRCxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7UUFDdEUsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBRS9ELE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLG9CQUFvQixHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUVqRSxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvcm1GaWVsZE1vZGVsIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBERUZBVUxUX09QVElPTiB9IGZyb20gJy4vZHJvcGRvd24tY2xvdWQud2lkZ2V0JztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWx1ZVZhbGlkYXRvciA9XG4gICAgKGZpbGVkOiBGb3JtRmllbGRNb2RlbCk6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1dpdGhOb0RlZmF1bHRWYWx1ZSA9IGZpbGVkLm9wdGlvbnMuZmlsdGVyKChkcm9wZG93bk9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0VmFsdWUgPSBkcm9wZG93bk9wdGlvbi5pZCA9PT0gREVGQVVMVF9PUFRJT04uaWQ7XG5cbiAgICAgICAgICAgIHJldHVybiAhaXNEZWZhdWx0VmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlzU29tZU9wdGlvblNlbGVjdGVkID0gb3B0aW9uc1dpdGhOb0RlZmF1bHRWYWx1ZS5zb21lKChkcm9wZG93bk9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25TZWxlY3RlZCA9IGRyb3Bkb3duT3B0aW9uLmlkID09PSBjb250cm9sLnZhbHVlPy5pZDtcblxuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uU2VsZWN0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpc1NvbWVPcHRpb25TZWxlY3RlZCA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgfTtcbiJdfQ==