@dangl/angular-ava 0.1.1-fe--1-add-tree-p0091 → 1.0.0-beta0097
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 +181 -1
- package/esm2022/lib/ava-tree/tree/components/ava-tree/ava-tree.component.mjs +20 -5
- package/esm2022/lib/version.mjs +7 -7
- package/fesm2022/dangl-angular-ava.mjs +25 -10
- package/fesm2022/dangl-angular-ava.mjs.map +1 -1
- package/lib/ava-tree/tree/components/ava-tree/ava-tree.component.d.ts +15 -0
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -1 +1,181 @@
|
|
|
1
|
-
# Dangl.AngularAva
|
|
1
|
+
# Dangl.AngularAva
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@dangl/angular-ava)
|
|
4
|
+
|
|
5
|
+
`@dangl/angular-ava` is an UI library for Angular applications. It's used to render trees of AVA Projects. _AVA_ in German stands for _Ausschreibung, Vergabe & Abrechnung_ (_Tendering, awarding & billing_), they represent services and elements of construction projects.
|
|
6
|
+
|
|
7
|
+
[AVACloud by Dangl**IT** GmbH](https://www.dangl-it.com/products/avacloud-gaeb-saas/) is one way of creating such data structures.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
### Import the Module
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { AngularAvaModule } from '../../projects/angular-ava/src/lib/angular-ava.module';
|
|
15
|
+
|
|
16
|
+
@NgModule({
|
|
17
|
+
declarations: [AppComponent],
|
|
18
|
+
imports: [AngularAvaModule],
|
|
19
|
+
providers: [],
|
|
20
|
+
bootstrap: [AppComponent]
|
|
21
|
+
})
|
|
22
|
+
export class AppModule {}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Use the Component
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<ava-tree [project]="projectData" (selectClick)="selected($event, 0)">
|
|
29
|
+
</ava-tree>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`projectData` must be of type `ProjectDto`.
|
|
33
|
+
|
|
34
|
+
### Input Parameters
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
/**
|
|
38
|
+
* This is the main data element for the tree structure. You should supply a ProjectDto with
|
|
39
|
+
* exactly one service specification in it.
|
|
40
|
+
*/
|
|
41
|
+
@Input() project: ProjectDto | null = null;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Optionally, you can supply a map of expansion states for the tree. The keys should be the
|
|
45
|
+
* id properties of the elements in the tree, and the values should be true if the element is
|
|
46
|
+
* expanded, and false if it is collapsed.
|
|
47
|
+
*/
|
|
48
|
+
@Input() expansionState: { [id: string]: boolean } = {};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Optionally, you can supply the id of the node that should be selected in the tree initially.
|
|
52
|
+
*/
|
|
53
|
+
@Input() selectedNodeId: string | null = null;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Optional, defaults to 20px. If this is set, then the tree will be indented by the given value each level.
|
|
57
|
+
* This can be any valid CSS value for the padding-left property, such as 20px, 1em, or 5%.
|
|
58
|
+
*
|
|
59
|
+
*/
|
|
60
|
+
@Input() indent = '20px';
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Optional, you can supply a color to be used as the background color for the selected line. Defaults to the primary
|
|
64
|
+
* color from the Material theme, which is #00acc1.
|
|
65
|
+
*/
|
|
66
|
+
@Input() selectedColor: string | null = null;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* You can specify which view type to use for the tree. The default is ModeViewType.Tree, but you can also use
|
|
70
|
+
* ModeViewType.List or ModeViewType.Table.
|
|
71
|
+
*/
|
|
72
|
+
@Input() modeView: ModeViewType = ModeViewType.Tree;
|
|
73
|
+
|
|
74
|
+
/** Optional, defaults to true. If this is disabled, then the double click event for elements is not raised,
|
|
75
|
+
* and clicking on an elemt sends an immediate result since the component has not to wait and check if a double click event
|
|
76
|
+
* is fired.
|
|
77
|
+
*/
|
|
78
|
+
@Input() allowDblClick = true;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* If this is set to true, then the tree will be in selection mode, and the user can select elements
|
|
82
|
+
* by clicking on them. The selected elements will be emitted in the selectedElementsChanged event.
|
|
83
|
+
*/
|
|
84
|
+
@Input() isSelectionMode = false;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* You can optionally supply a list of elements that should be selected initially. This is only used if
|
|
88
|
+
* isSelectionMode is true.
|
|
89
|
+
*/
|
|
90
|
+
@Input() initiallySelectedElements: SelectedElement[] | null = null;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* You can supply a map of strings to be used for the text in the tree. This allows you to translate
|
|
94
|
+
* the text in the tree to other languages.
|
|
95
|
+
* {
|
|
96
|
+
* textSearch: string,
|
|
97
|
+
* textNothing: string,
|
|
98
|
+
* textNothingFiltered: string,
|
|
99
|
+
* textAll: string,
|
|
100
|
+
* tooltipAllOpen: string,
|
|
101
|
+
* tooltipAllClose: string,
|
|
102
|
+
* tooltipAllAdd:string,
|
|
103
|
+
* tooltipAllRemove: string,
|
|
104
|
+
* }
|
|
105
|
+
*/
|
|
106
|
+
@Input() set textWords(words: ITextWords | null)
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Defaults to true. If this is enabled, then navigating in the tree with the keyboard only works
|
|
110
|
+
* if the mouse is over the tree area. This limitation is useful if you have multiple trees or other components
|
|
111
|
+
* that might be using keyboard input.
|
|
112
|
+
*/
|
|
113
|
+
@Input() mouseAwareKeyboardControl = true;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* With this parameter, you can configure which keys will be listenend to to switch the tree elements,
|
|
117
|
+
* and also to disable the functionality of the keys */
|
|
118
|
+
@Input() set customKeyboardOperationConfig(config: IKeyboardOperationConfig) {
|
|
119
|
+
this.keyboardOperationService.mergeConfigOperation(config);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* You can supply custom filters that are processed when the filter input is changed. Default filters are used
|
|
124
|
+
* that check for short text and item number matches, and you can either add custom filters or replace the default ones.
|
|
125
|
+
*/
|
|
126
|
+
@Input() listFilterFunc = DEFAULT_FILTERS;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Optional. For table views, this allows you to add custom columns to the table.
|
|
130
|
+
* addTableColumns: Array of objects
|
|
131
|
+
* {
|
|
132
|
+
* name: string, // name of column
|
|
133
|
+
* title: string, // showed title of column
|
|
134
|
+
* align?: string, // optional alight: left(default) / center / right
|
|
135
|
+
* numberFormat?: string // optional format of number value, example: '1.2-2'
|
|
136
|
+
* }
|
|
137
|
+
*/
|
|
138
|
+
@Input() addTableColumns: TableColumnType[] = [];
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* This allows you to supply a list of functions that can be used to change the appearance of elements.
|
|
142
|
+
* They objects contain a predicate function that is evaluated, along with an option to configure the
|
|
143
|
+
* appearance of the element.
|
|
144
|
+
* functionView: Array of objects
|
|
145
|
+
* {
|
|
146
|
+
* name: string, // name of view part: you can add/remove it when it need
|
|
147
|
+
* func: (element: any, result?: any) => boolean, // this filter function calculate condition to change view
|
|
148
|
+
* view: {
|
|
149
|
+
* iconName?: string, // changed name of icon
|
|
150
|
+
* iconColor?: string, // changed color of icon
|
|
151
|
+
* textBold?: string, // changed weight of text
|
|
152
|
+
* textColor?: string // changed color of text
|
|
153
|
+
* }
|
|
154
|
+
* }
|
|
155
|
+
*/
|
|
156
|
+
@Input() functionView: IFunctionViewLine[] | null = null;
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Output Parameters
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
/**
|
|
163
|
+
* This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
|
|
164
|
+
*/
|
|
165
|
+
@Output() selectClick = new EventEmitter<IElementDto | null>();
|
|
166
|
+
/**
|
|
167
|
+
* This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
|
|
168
|
+
*/
|
|
169
|
+
@Output() selectDblClick = new EventEmitter<IElementDto>();
|
|
170
|
+
/**
|
|
171
|
+
* This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
|
|
172
|
+
*/
|
|
173
|
+
@Output() contextMenuEvent = new EventEmitter<ContextMenuDataType>();
|
|
174
|
+
/**
|
|
175
|
+
* This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
|
|
176
|
+
* Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
|
|
177
|
+
* Typcial use cases for this include e.g. selecting multiple elements within a service specification without
|
|
178
|
+
* actually focussing them, e.g. for further processing.
|
|
179
|
+
*/
|
|
180
|
+
@Output() selectedElementsChanged = new EventEmitter<SelectedElement[]>();
|
|
181
|
+
```
|
|
@@ -143,10 +143,25 @@ export class AvaTreeComponent {
|
|
|
143
143
|
* }
|
|
144
144
|
*/
|
|
145
145
|
this.functionView = null;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.
|
|
146
|
+
/**
|
|
147
|
+
* This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
|
|
148
|
+
*/
|
|
149
|
+
this.selectClick = new EventEmitter();
|
|
150
|
+
/**
|
|
151
|
+
* This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
|
|
152
|
+
*/
|
|
153
|
+
this.selectDblClick = new EventEmitter();
|
|
154
|
+
/**
|
|
155
|
+
* This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
|
|
156
|
+
*/
|
|
157
|
+
this.contextMenuEvent = new EventEmitter();
|
|
158
|
+
/**
|
|
159
|
+
* This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
|
|
160
|
+
* Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
|
|
161
|
+
* Typcial use cases for this include e.g. selecting multiple elements within a service specification without
|
|
162
|
+
* actually focussing them, e.g. for further processing.
|
|
163
|
+
*/
|
|
164
|
+
this.selectedElementsChanged = new EventEmitter();
|
|
150
165
|
this.selectedElement = null;
|
|
151
166
|
this.isListenKeyboard = false;
|
|
152
167
|
this.isEmiteSelectedElements = false;
|
|
@@ -409,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
409
424
|
type: ViewChild,
|
|
410
425
|
args: ['avaTreeFilterInput']
|
|
411
426
|
}] } });
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUlMLFlBQVksRUFLYixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQTRCLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRGLE1BQU0sT0FBTyxnQkFBZ0I7SUF3RDNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFD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RyxjQUFjO3NCQUF0QixLQUFLO2dCQVlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBa0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ3NCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNFLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNNLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBERUZBVUxUX0ZJTFRFUlMsIERFRkFVTFRfVEVYVF9XT1JEUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJVGV4dFdvcmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRUZXh0V29yZHMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnVEYXRhVHlwZSxcbiAgSUVsZW1lbnREdG8sXG4gIElGdW5jdGlvblZpZXdMaW5lLFxuICBNb2RlVmlld1R5cGUsXG4gIFByb2plY3REdG8sXG4gIFNlbGVjdGVkRWxlbWVudCxcbiAgU2VydmljZVNwZWNpZmljYXRpb25EdG8sXG4gIFRhYmxlQ29sdW1uVHlwZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3RpbmdFbGVtZW50c1R5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3RpbmcubW9kZWwnO1xuaW1wb3J0IHsgRXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwYW5kLXBhcmVudC1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IEZsYXRFbGVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbGF0LWVsZW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUtleWJvYXJkT3BlcmF0aW9uQ29uZmlnLCBLZXlib2FyZE9wZXJhdGlvblNlcnZpY2UsIEtleWJvYXJkT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleWJvYXJkLW9wZXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdEVsZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0LWVsZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUcmVlTm9kZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmVlLW5vZGUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdmEtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmEtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZsYXRFbGVtZW50c1NlcnZpY2UsIFNlbGVjdEVsZW1lbnRTZXJ2aWNlLCBUcmVlTm9kZVNlbGVjdGlvblNlcnZpY2UsIEV4cGFuZFBhcmVudEdyb3VwU2VydmljZSwgS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBdmFUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGRhdGEgZWxlbWVudCBmb3IgdGhlIHRyZWUgc3RydWN0dXJlLiBZb3Ugc2hvdWxkIHN1cHBseSBhIFByb2plY3REdG8gd2l0aFxuICAgKiBleGFjdGx5IG9uZSBzZXJ2aWNlIHNwZWNpZmljYXRpb24gaW4gaXQuXG4gICAqL1xuICBASW5wdXQoKSBwcm9qZWN0OiBQcm9qZWN0RHRvIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIGV4cGFuc2lvbiBzdGF0ZXMgZm9yIHRoZSB0cmVlLiBUaGUga2V5cyBzaG91bGQgYmUgdGhlXG4gICAqIGlkIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSB0cmVlLCBhbmQgdGhlIHZhbHVlcyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpc1xuICAgKiBleHBhbmRlZCwgYW5kIGZhbHNlIGlmIGl0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIEBJbnB1dCgpIGV4cGFuc2lvblN0YXRlOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IHRoZSBpZCBvZiB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZCBpbiB0aGUgdHJlZSBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZE5vZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBkZWZhdWx0cyB0byAyMHB4LiBJZiB0aGlzIGlzIHNldCwgdGhlbiB0aGUgdHJlZSB3aWxsIGJlIGluZGVudGVkIGJ5IHRoZSBnaXZlbiB2YWx1ZSBlYWNoIGxldmVsLlxuICAgKiBUaGlzIGNhbiBiZSBhbnkgdmFsaWQgQ1NTIHZhbHVlIGZvciB0aGUgcGFkZGluZy1sZWZ0IHByb3BlcnR5LCBzdWNoIGFzIDIwcHgsIDFlbSwgb3IgNSUuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBpbmRlbnQgPSAnMjBweCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLCB5b3UgY2FuIHN1cHBseSBhIGNvbG9yIHRvIGJlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzZWxlY3RlZCBsaW5lLiBEZWZhdWx0cyB0byB0aGUgcHJpbWFyeVxuICAgKiBjb2xvciBmcm9tIHRoZSBNYXRlcmlhbCB0aGVtZSwgd2hpY2ggaXMgIzAwYWNjMS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29sb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgd2hpY2ggdmlldyB0eXBlIHRvIHVzZSBmb3IgdGhlIHRyZWUuIFRoZSBkZWZhdWx0IGlzIE1vZGVWaWV3VHlwZS5UcmVlLCBidXQgeW91IGNhbiBhbHNvIHVzZVxuICAgKiBNb2RlVmlld1R5cGUuTGlzdCBvciBNb2RlVmlld1R5cGUuVGFibGUuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlVmlldzogTW9kZVZpZXdUeXBlID0gTW9kZVZpZXdUeXBlLlRyZWU7XG5cbiAgLyoqIE9wdGlvbmFsLCBkZWZhdWx0cyB0byB0cnVlLiBJZiB0aGlzIGlzIGRpc2FibGVkLCB0aGVuIHRoZSBkb3VibGUgY2xpY2sgZXZlbnQgZm9yIGVsZW1lbnRzIGlzIG5vdCByYWlzZWQsXG4gICAqIGFuZCBjbGlja2luZyBvbiBhbiBlbGVtdCBzZW5kcyBhbiBpbW1lZGlhdGUgcmVzdWx0IHNpbmNlIHRoZSBjb21wb25lbnQgaGFzIG5vdCB0byB3YWl0IGFuZCBjaGVjayBpZiBhIGRvdWJsZSBjbGljayBldmVudFxuICAgKiBpcyBmaXJlZC5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93RGJsQ2xpY2sgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGVuIHRoZSB0cmVlIHdpbGwgYmUgaW4gc2VsZWN0aW9uIG1vZGUsIGFuZCB0aGUgdXNlciBjYW4gc2VsZWN0IGVsZW1lbnRzXG4gICAqIGJ5IGNsaWNraW5nIG9uIHRoZW0uIFRoZSBzZWxlY3RlZCBlbGVtZW50cyB3aWxsIGJlIGVtaXR0ZWQgaW4gdGhlIHNlbGVjdGVkRWxlbWVudHNDaGFuZ2VkIGV2ZW50LlxuICAgKi9cbiAgQElucHV0KCkgaXNTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgYSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGluaXRpYWxseS4gVGhpcyBpcyBvbmx5IHVzZWQgaWZcbiAgICogaXNTZWxlY3Rpb25Nb2RlIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzOiBTZWxlY3RlZEVsZW1lbnRbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHN1cHBseSBhIG1hcCBvZiBzdHJpbmdzIHRvIGJlIHVzZWQgZm9yIHRoZSB0ZXh0IGluIHRoZSB0cmVlLiBUaGlzIGFsbG93cyB5b3UgdG8gdHJhbnNsYXRlXG4gICAqIHRoZSB0ZXh0IGluIHRoZSB0cmVlIHRvIG90aGVyIGxhbmd1YWdlcy5cbiAgICoge1xuICAgKiAgIHRleHRTZWFyY2g6IHN0cmluZyxcbiAgICogICB0ZXh0Tm90aGluZzogc3RyaW5nLFxuICAgKiAgIHRleHROb3RoaW5nRmlsdGVyZWQ6IHN0cmluZyxcbiAgICogICB0ZXh0QWxsOiBzdHJpbmcsXG4gICAqICAgdG9vbHRpcEFsbE9wZW46IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsQ2xvc2U6IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsQWRkOnN0cmluZyxcbiAgICogICB0b29sdGlwQWxsUmVtb3ZlOiBzdHJpbmcsXG4gICAqIH1cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0ZXh0V29yZHMod29yZHM6IElUZXh0V29yZHMgfCBudWxsKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi50aGlzLnRleHRXb3JkcywgLi4ud29yZHMgfTtcbiAgfSAvLyBhbGxvdyB0byB0cmFuc2xhdGUgYWxsIHRleHRzIHRvIG90aGVyIGxhbmd1YWdlXG4gIGdldCB0ZXh0V29yZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRXb3JkcztcbiAgfVxuICBwcml2YXRlIF90ZXh0V29yZHM6IElUZXh0V29yZHMgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS4gSWYgdGhpcyBpcyBlbmFibGVkLCB0aGVuIG5hdmlnYXRpbmcgaW4gdGhlIHRyZWUgd2l0aCB0aGUga2V5Ym9hcmQgb25seSB3b3Jrc1xuICAgKiBpZiB0aGUgbW91c2UgaXMgb3ZlciB0aGUgdHJlZSBhcmVhLiBUaGlzIGxpbWl0YXRpb24gaXMgdXNlZnVsIGlmIHlvdSBoYXZlIG11bHRpcGxlIHRyZWVzIG9yIG90aGVyIGNvbXBvbmVudHNcbiAgICogdGhhdCBtaWdodCBiZSB1c2luZyBrZXlib2FyZCBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIG1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoaXMgcGFyYW1ldGVyLCB5b3UgY2FuIGNvbmZpZ3VyZSB3aGljaCBrZXlzIHdpbGwgYmUgbGlzdGVuZW5kIHRvIHRvIHN3aXRjaCB0aGUgdHJlZSBlbGVtZW50cyxcbiAgICogYW5kIGFsc28gdG8gZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUga2V5cyAqL1xuICBASW5wdXQoKSBzZXQgY3VzdG9tS2V5Ym9hcmRPcGVyYXRpb25Db25maWcoY29uZmlnOiBJS2V5Ym9hcmRPcGVyYXRpb25Db25maWcpIHtcbiAgICB0aGlzLmtleWJvYXJkT3BlcmF0aW9uU2VydmljZS5tZXJnZUNvbmZpZ09wZXJhdGlvbihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGN1c3RvbSBmaWx0ZXJzIHRoYXQgYXJlIHByb2Nlc3NlZCB3aGVuIHRoZSBmaWx0ZXIgaW5wdXQgaXMgY2hhbmdlZC4gRGVmYXVsdCBmaWx0ZXJzIGFyZSB1c2VkXG4gICAqIHRoYXQgY2hlY2sgZm9yIHNob3J0IHRleHQgYW5kIGl0ZW0gbnVtYmVyIG1hdGNoZXMsIGFuZCB5b3UgY2FuIGVpdGhlciBhZGQgY3VzdG9tIGZpbHRlcnMgb3IgcmVwbGFjZSB0aGUgZGVmYXVsdCBvbmVzLlxuICAgKi9cbiAgQElucHV0KCkgbGlzdEZpbHRlckZ1bmMgPSBERUZBVUxUX0ZJTFRFUlM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBGb3IgdGFibGUgdmlld3MsIHRoaXMgYWxsb3dzIHlvdSB0byBhZGQgY3VzdG9tIGNvbHVtbnMgdG8gdGhlIHRhYmxlLlxuICAgKiBhZGRUYWJsZUNvbHVtbnM6IEFycmF5IG9mIG9iamVjdHNcbiAgICoge1xuICAgKiAgIG5hbWU6IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSBvZiBjb2x1bW5cbiAgICogICB0aXRsZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3dlZCB0aXRsZSBvZiBjb2x1bW5cbiAgICogICBhbGlnbj86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGFsaWdodDogbGVmdChkZWZhdWx0KSAvIGNlbnRlciAvIHJpZ2h0XG4gICAqICAgbnVtYmVyRm9ybWF0Pzogc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25hbCBmb3JtYXQgb2YgbnVtYmVyIHZhbHVlLCBleGFtcGxlOiAnMS4yLTInXG4gICAqIH1cbiAgICovXG4gIEBJbnB1dCgpIGFkZFRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5UeXBlW10gPSBbXTtcblxuICAvKipcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHN1cHBseSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIGVsZW1lbnRzLlxuICAgKiBUaGV5IG9iamVjdHMgY29udGFpbiBhIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCwgYWxvbmcgd2l0aCBhbiBvcHRpb24gdG8gY29uZmlndXJlIHRoZVxuICAgKiBhcHBlYXJhbmNlIG9mIHRoZSBlbGVtZW50LlxuICAgKiAgIGZ1bmN0aW9uVmlldzogQXJyYXkgb2Ygb2JqZWN0c1xuICAgKiAgIHtcbiAgICogICAgIG5hbWU6IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgdmlldyBwYXJ0OiB5b3UgY2FuIGFkZC9yZW1vdmUgaXQgd2hlbiBpdCBuZWVkXG4gICAqICAgICBmdW5jOiAoZWxlbWVudDogYW55LCByZXN1bHQ/OiBhbnkpID0+IGJvb2xlYW4sICAvLyB0aGlzIGZpbHRlciBmdW5jdGlvbiBjYWxjdWxhdGUgY29uZGl0aW9uIHRvIGNoYW5nZSB2aWV3XG4gICAqICAgICB2aWV3OiB7XG4gICAqICAgICAgIGljb25OYW1lPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIG5hbWUgb2YgaWNvblxuICAgKiAgICAgICBpY29uQ29sb3I/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlZCBjb2xvciBvZiBpY29uXG4gICAqICAgICAgIHRleHRCb2xkPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIHdlaWdodCBvZiB0ZXh0XG4gICAqICAgICAgIHRleHRDb2xvcj86IHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIHRleHRcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqL1xuICBASW5wdXQoKSBmdW5jdGlvblZpZXc6IElGdW5jdGlvblZpZXdMaW5lW10gfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgc2VsZWN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvIHwgbnVsbD4oKTsgLy8gZXZlbnQgYWZ0ZXIgZWxlbWVudCBzZWxlY3RlZCBieSBjbGlja1xuICBAT3V0cHV0KCkgc2VsZWN0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvPigpOyAvLyBldmVudCBhZnRlciBlbGVtZW50IHNlbGVjdGVkIGJ5IGRvdWJsZSBjbGlja1xuICBAT3V0cHV0KCkgY29udGV4dE1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29udGV4dE1lbnVEYXRhVHlwZT4oKTsgLy8gZXZlbnQgYWZ0ZXIgZWxlbWVudCBjYWxsIGNvbnRleHQgbWVudSBieSByaWdodCBidXR0b24gY2xpY2tcbiAgQE91dHB1dCgpIHNlbGVjdGVkRWxlbWVudHNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RlZEVsZW1lbnRbXT4oKTsgLy8gZXZlbnQgYWZ0ZXIgY2hhbmdlZCBzZWxlY3RpbmcgaW4gc2VsZWN0aW5nIG1vZGVcbiAgQFZpZXdDaGlsZCgnYXZhVHJlZVdyYXBwZXInKSBhdmFUcmVlV3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdhdmFNYWluV3JhcHBlcicpIGF2YU1haW5XcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2F2YVRyZWVGaWx0ZXJJbnB1dCcpIGF2YVRyZWVGaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgc2VydmljZVNwZWNpZmljYXRpb24hOiBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0bztcbiAgaXNMaXN0ZW5LZXlib2FyZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YTogU2VsZWN0aW5nRWxlbWVudHNUeXBlW10gPSBbXTtcbiAgZmxhdEVsZW1lbnRzOiBJRWxlbWVudER0b1tdIHwgbnVsbCA9IG51bGw7XG4gIHByZXNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgZmlsdGVySW5wdXQgPSAnJztcbiAgbGlzdE1vZGVWaWV3VHlwZSA9IE1vZGVWaWV3VHlwZTtcbiAgcHJpdmF0ZSBmaWx0ZXIgPSAnJztcbiAgcHJpdmF0ZSAkZmlsdGVyID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgZmlsdGVyZWRFbGVtZW50TGlzdDogSUVsZW1lbnREdG9bXSA9IFtdO1xuICBwcml2YXRlICRkZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIHByaXZhdGUgZmxhdEVsZW1lbnRzU2VydmljZTogRmxhdEVsZW1lbnRzU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgc2VsZWN0RWxlbWVudFNlcnZpY2U6IFNlbGVjdEVsZW1lbnRTZXJ2aWNlLFxuICAgIEBTZWxmKCkgcHJpdmF0ZSB0cmVlTm9kZVNlbGVjdGlvblNlcnZpY2U6IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgZXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlOiBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UsXG4gICAgQFNlbGYoKSBwcml2YXRlIGtleWJvYXJkT3BlcmF0aW9uU2VydmljZTogS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRFMgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2UucHJlc2VsZWN0ZWRFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLnByZXNlbGVjdGVkRWxlbWVudCA9IGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENsaWNrRWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGU7XG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50U2VydmljZS5zZWxlY3REYmxDbGlja0VsZW1lbnQucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5zZWxlY3REYmxDbGljay5lbWl0KGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENvbnRleHRNZW51RWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmNvbnRleHRNZW51RXZlbnQuZW1pdChlKSk7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZsYXRFbGVtZW50c0R0by5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cyA9IGU7XG4gICAgICB0aGlzLmdldEZpbHRlcmVkTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMjUwKSkuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZExpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5saXN0RmlsdGVyRnVuYyA9IHRoaXMubGlzdEZpbHRlckZ1bmM7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZ1bmN0aW9uVmlldyA9IHRoaXMuZnVuY3Rpb25WaWV3O1xuXG4gICAgaWYgKGNoYW5nZXNbJ3Byb2plY3QnXSAmJiB0aGlzLnByb2plY3Q/LnNlcnZpY2VTcGVjaWZpY2F0aW9ucz8uWzBdKSB7XG4gICAgICB0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uID0gdGhpcy5wcm9qZWN0LnNlcnZpY2VTcGVjaWZpY2F0aW9uc1swXTtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5zZXRFbGVtZW50c0R0byh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YSA9IHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmxvYWRTZWxlY3RpbmdFbGVtZW50cyh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uLmVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UudHJlZU5vZGVTZWxlY3RpbmcucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RpbmdUcmVlID0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0VHJlZVJvb3QodGhpcy5zZWxlY3RpbmdFbGVtZW50c1RyZWVEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZC5lbWl0KHNlbGVjdGluZ1RyZWUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXNbJ3NlbGVjdGVkTm9kZUlkJ10gJiYgdGhpcy5wcm9qZWN0KSB8fCBjaGFuZ2VzWydwcm9qZWN0J10pIHtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5nZXRPbmVFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZUlkKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNldENsaWNrRWxlbWVudChlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlICYmIChjaGFuZ2VzWydpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzJ10gfHwgY2hhbmdlc1sncHJvamVjdCddKSkge1xuICAgICAgdGhpcy5mb3JtU2VsZWN0aW5nTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJGRlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdXNlT3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMaXN0ZW5LZXlib2FyZCkge1xuICAgICAgdGhpcy5pc0xpc3RlbktleWJvYXJkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXZhVHJlZUZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3VzZU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsS2V5Ym9hcmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKCF0aGlzLm1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgfHwgdGhpcy5pc0xpc3RlbktleWJvYXJkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnByZXNlbGVjdGVkRWxlbWVudCB8fCB0aGlzLnNlbGVjdGVkRWxlbWVudDtcblxuICAgICAgICBjb25zdCB7IG9wZXJhdGlvbiwgbmV4dEVsZW1lbnQgfSA9IHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5RXZlbnQsIGVsZW1lbnQpIHx8IHsgbmV4dEVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlU2VsZWN0ZWRQb3NpdGlvblVwOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgJy5zZWxlY3QnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVTZWxlY3RlZFBvc2l0aW9uRG93bjpcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsICcuc2VsZWN0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlQ2hvc2VuUG9zaXRpb25Eb3duOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgbmV4dEVsZW1lbnQ/LmlkID09PSB0aGlzLnNlbGVjdGVkRWxlbWVudD8uaWQgPyAnLnNlbGVjdCcgOiAnLmNob29zZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXlib2FyZE9wZXJhdGlvblR5cGUuTW92ZUNob3NlblBvc2l0aW9uVXA6XG4gICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50KG5leHRFbGVtZW50LCBuZXh0RWxlbWVudD8uaWQgPT09IHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5pZCA/ICcuc2VsZWN0JyA6ICcuY2hvb3NlJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsLCBuYW1lUXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRyZWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cHMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTGluZShuYW1lUXVlcnkpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbExpbmUobmFtZVF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG93ZWRFbGVtZW50ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKG5hbWVRdWVyeSkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXNob3dlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFJlY3QgPSBzaG93ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChcbiAgICAgIGNoaWxkUmVjdC5ib3R0b20gPiBwYXJlbnRSZWN0LmJvdHRvbSB8fFxuICAgICAgY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wIHx8XG4gICAgICAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlICYmIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KVxuICAgICkge1xuICAgICAgc2hvd2VkRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiAwIH0pO1xuICAgICAgaWYgKHRoaXMubW9kZVZpZXcgPT09IE1vZGVWaWV3VHlwZS5UYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ycmVjdFNjcm9sbFRhYmxlTGluZShzaG93ZWRFbGVtZW50LCBwYXJlbnRSZWN0KSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0U2Nyb2xsVGFibGVMaW5lKHNob3dlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRSZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRSZWN0ID0gc2hvd2VkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wICsgMjQpIHtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gMjQ7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQ6IElFbGVtZW50RHRvKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cFNlcnZpY2UuZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQsIHRoaXMuZmxhdEVsZW1lbnRzLCB0aGlzLmV4cGFuc2lvblN0YXRlKTtcbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyhpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmV4cGFuc2lvblN0YXRlKS5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiBkZWxldGUgdGhpcy5leHBhbnNpb25TdGF0ZVtpZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50VHlwZURpc2NyaW1pbmF0b3IgPT09ICdTZXJ2aWNlU3BlY2lmaWNhdGlvbkdyb3VwRHRvJykge1xuICAgICAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdGVbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1TZWxlY3RpbmdMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cykge1xuICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0RmxhdFNlbGVjdGVkTGlzdElkKHRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmZvckVhY2goKGlkLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlU2VsZWN0aW5nKHRydWUsIGlkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RPckRlc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlQWxsKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsYXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEVsZW1lbnRMaXN0ID0gdGhpcy5mbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuY2hlY2tGaWx0ZXJWYWx1ZShpdGVtLCB0aGlzLmZpbHRlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmF2YU1haW5XcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdXNlT3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5hdmFNYWluV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb3VzZU92ZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4kZGVzdHJveSksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxLZXlib2FyZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1haW4td3JhcHBlclwiXG4gICNhdmFNYWluV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb250cm9sXCJcbiAgICAjY29udHJvbFxuICA+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29udHJvbC1maWx0ZXJcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgdGV4dFdvcmRzPy50ZXh0U2VhcmNoIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVySW5wdXRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgI2F2YVRyZWVGaWx0ZXJJbnB1dFxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1pY29uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbE9wZW4gfHwgJydcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1iYWNrZ3JvdW5kXCI+bGF5ZXJzPC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItaWNvblwiPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUFsbEVsZW1lbnRzRXhwYW5zaW9uU3RhdHVzKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbENsb3NlIHx8ICcnXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItYmFja2dyb3VuZFwiPmxheWVyczwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxheWVyLWljb25cIj5yZW1vdmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2VsZWN0aW9uTW9kZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JEZXNlbGVjdEFsbCh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbEFkZCB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RPckRlc2VsZWN0QWxsKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbFJlbW92ZSB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCInY2FsYygxMDAlIC0gJyArIGNvbnRyb2wub2Zmc2V0SGVpZ2h0ICsgJ3B4KSdcIlxuICAgIGNsYXNzPVwiYXZhLXRyZWUtd3JhcHBlclwiXG4gICAgI2F2YVRyZWVXcmFwcGVyXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxhdEVsZW1lbnRzPy5sZW5ndGg7IGVsc2Ugbm90aGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRWxlbWVudExpc3Q/Lmxlbmd0aDsgZWxzZSBub3RoaW5nRmlsdGVyZWRcIj5cbiAgICAgICAgPGF2YS10cmVlLXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiAhYXZhVHJlZUZpbHRlcklucHV0LnZhbHVlXCJcbiAgICAgICAgICBbc2VydmljZVNwZWNpZmljYXRpb25dPVwic2VydmljZVNwZWNpZmljYXRpb25cIlxuICAgICAgICAgIFtpbmRlbnRdPVwiaW5kZW50XCJcbiAgICAgICAgICBbZXhwYW5zaW9uU3RhdGVdPVwiZXhwYW5zaW9uU3RhdGVcIlxuICAgICAgICAgIFtpc1NlbGVjdGlvbk1vZGVdPVwiaXNTZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10cmVlLXN0cnVjdHVyZT5cbiAgICAgICAgPGF2YS1saXN0LXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuTGlzdCB8fCAobW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiBhdmFUcmVlRmlsdGVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICBbZmlsdGVyZWRFbGVtZW50TGlzdF09XCJmaWx0ZXJlZEVsZW1lbnRMaXN0XCJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgW3NlbGVjdGVkQ29sb3JdPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgICAgICAgW2FsbG93RGJsQ2xpY2tdPVwiYWxsb3dEYmxDbGlja1wiXG4gICAgICAgID5cbiAgICAgICAgPC9hdmEtbGlzdC1zdHJ1Y3R1cmU+XG4gICAgICAgIDxhdmEtdGFibGUtc3RydWN0dXJlXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UYWJsZVwiXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXG4gICAgICAgICAgW2lzU2VsZWN0aW9uTW9kZV09XCJpc1NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgIFthZGRUYWJsZUNvbHVtbnNdPVwiYWRkVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZz5cbiAge3sgdGV4dFdvcmRzPy50ZXh0Tm90aGluZyB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZ0ZpbHRlcmVkPlxuICB7eyB0ZXh0V29yZHM/LnRleHROb3RoaW5nRmlsdGVyZWQgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvYXZhLXRyZWUvYXZhLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUtMLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUlMLFlBQVksRUFLYixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQTRCLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRGLE1BQU0sT0FBTyxnQkFBZ0I7SUF3RDNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFD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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBWUcsZUFBZTtzQkFBdkIsS0FBSztnQkFrQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFLSSxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVFHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0UsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERFRkFVTFRfRklMVEVSUywgREVGQVVMVF9URVhUX1dPUkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IElUZXh0V29yZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdFRleHRXb3Jkcyc7XG5pbXBvcnQge1xuICBDb250ZXh0TWVudURhdGFUeXBlLFxuICBJRWxlbWVudER0byxcbiAgSUZ1bmN0aW9uVmlld0xpbmUsXG4gIE1vZGVWaWV3VHlwZSxcbiAgUHJvamVjdER0byxcbiAgU2VsZWN0ZWRFbGVtZW50LFxuICBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0byxcbiAgVGFibGVDb2x1bW5UeXBlXG59IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IFNlbGVjdGluZ0VsZW1lbnRzVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGluZy5tb2RlbCc7XG5pbXBvcnQgeyBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBhbmQtcGFyZW50LWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxhdEVsZW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZsYXQtZWxlbWVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBJS2V5Ym9hcmRPcGVyYXRpb25Db25maWcsIEtleWJvYXJkT3BlcmF0aW9uU2VydmljZSwgS2V5Ym9hcmRPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2V5Ym9hcmQtb3BlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0RWxlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3QtZWxlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyZWUtbm9kZS1zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F2YS10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRmxhdEVsZW1lbnRzU2VydmljZSwgU2VsZWN0RWxlbWVudFNlcnZpY2UsIFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSwgRXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlLCBLZXlib2FyZE9wZXJhdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEF2YVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIG1haW4gZGF0YSBlbGVtZW50IGZvciB0aGUgdHJlZSBzdHJ1Y3R1cmUuIFlvdSBzaG91bGQgc3VwcGx5IGEgUHJvamVjdER0byB3aXRoXG4gICAqIGV4YWN0bHkgb25lIHNlcnZpY2Ugc3BlY2lmaWNhdGlvbiBpbiBpdC5cbiAgICovXG4gIEBJbnB1dCgpIHByb2plY3Q6IFByb2plY3REdG8gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSwgeW91IGNhbiBzdXBwbHkgYSBtYXAgb2YgZXhwYW5zaW9uIHN0YXRlcyBmb3IgdGhlIHRyZWUuIFRoZSBrZXlzIHNob3VsZCBiZSB0aGVcbiAgICogaWQgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHRyZWUsIGFuZCB0aGUgdmFsdWVzIHNob3VsZCBiZSB0cnVlIGlmIHRoZSBlbGVtZW50IGlzXG4gICAqIGV4cGFuZGVkLCBhbmQgZmFsc2UgaWYgaXQgaXMgY29sbGFwc2VkLlxuICAgKi9cbiAgQElucHV0KCkgZXhwYW5zaW9uU3RhdGU6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSwgeW91IGNhbiBzdXBwbHkgdGhlIGlkIG9mIHRoZSBub2RlIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGluIHRoZSB0cmVlIGluaXRpYWxseS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkTm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9uYWwsIGRlZmF1bHRzIHRvIDIwcHguIElmIHRoaXMgaXMgc2V0LCB0aGVuIHRoZSB0cmVlIHdpbGwgYmUgaW5kZW50ZWQgYnkgdGhlIGdpdmVuIHZhbHVlIGVhY2ggbGV2ZWwuXG4gICAqIFRoaXMgY2FuIGJlIGFueSB2YWxpZCBDU1MgdmFsdWUgZm9yIHRoZSBwYWRkaW5nLWxlZnQgcHJvcGVydHksIHN1Y2ggYXMgMjBweCwgMWVtLCBvciA1JS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGluZGVudCA9ICcyMHB4JztcblxuICAvKipcbiAgICogT3B0aW9uYWwsIHlvdSBjYW4gc3VwcGx5IGEgY29sb3IgdG8gYmUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIGxpbmUuIERlZmF1bHRzIHRvIHRoZSBwcmltYXJ5XG4gICAqIGNvbG9yIGZyb20gdGhlIE1hdGVyaWFsIHRoZW1lLCB3aGljaCBpcyAjMDBhY2MxLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRDb2xvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB3aGljaCB2aWV3IHR5cGUgdG8gdXNlIGZvciB0aGUgdHJlZS4gVGhlIGRlZmF1bHQgaXMgTW9kZVZpZXdUeXBlLlRyZWUsIGJ1dCB5b3UgY2FuIGFsc28gdXNlXG4gICAqIE1vZGVWaWV3VHlwZS5MaXN0IG9yIE1vZGVWaWV3VHlwZS5UYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIG1vZGVWaWV3OiBNb2RlVmlld1R5cGUgPSBNb2RlVmlld1R5cGUuVHJlZTtcblxuICAvKiogT3B0aW9uYWwsIGRlZmF1bHRzIHRvIHRydWUuIElmIHRoaXMgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIGRvdWJsZSBjbGljayBldmVudCBmb3IgZWxlbWVudHMgaXMgbm90IHJhaXNlZCxcbiAgICogYW5kIGNsaWNraW5nIG9uIGFuIGVsZW10IHNlbmRzIGFuIGltbWVkaWF0ZSByZXN1bHQgc2luY2UgdGhlIGNvbXBvbmVudCBoYXMgbm90IHRvIHdhaXQgYW5kIGNoZWNrIGlmIGEgZG91YmxlIGNsaWNrIGV2ZW50XG4gICAqIGlzIGZpcmVkLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dEYmxDbGljayA9IHRydWU7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIHRyZWUgd2lsbCBiZSBpbiBzZWxlY3Rpb24gbW9kZSwgYW5kIHRoZSB1c2VyIGNhbiBzZWxlY3QgZWxlbWVudHNcbiAgICogYnkgY2xpY2tpbmcgb24gdGhlbS4gVGhlIHNlbGVjdGVkIGVsZW1lbnRzIHdpbGwgYmUgZW1pdHRlZCBpbiB0aGUgc2VsZWN0ZWRFbGVtZW50c0NoYW5nZWQgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBpc1NlbGVjdGlvbk1vZGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN1cHBseSBhIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgaW5pdGlhbGx5LiBUaGlzIGlzIG9ubHkgdXNlZCBpZlxuICAgKiBpc1NlbGVjdGlvbk1vZGUgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxseVNlbGVjdGVkRWxlbWVudHM6IFNlbGVjdGVkRWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgdGV4dFNlYXJjaDogc3RyaW5nLFxuICAgKiAgIHRleHROb3RoaW5nOiBzdHJpbmcsXG4gICAqICAgdGV4dE5vdGhpbmdGaWx0ZXJlZDogc3RyaW5nLFxuICAgKiAgIHRleHRBbGw6IHN0cmluZyxcbiAgICogICB0b29sdGlwQWxsT3Blbjogc3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxDbG9zZTogc3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxBZGQ6c3RyaW5nLFxuICAgKiAgIHRvb2x0aXBBbGxSZW1vdmU6IHN0cmluZyxcbiAgICogfVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHRleHRXb3Jkcyh3b3JkczogSVRleHRXb3JkcyB8IG51bGwpIHtcbiAgICB0aGlzLl90ZXh0V29yZHMgPSB7IC4uLnRoaXMudGV4dFdvcmRzLCAuLi53b3JkcyB9O1xuICB9IC8vIGFsbG93IHRvIHRyYW5zbGF0ZSBhbGwgdGV4dHMgdG8gb3RoZXIgbGFuZ3VhZ2VcbiAgZ2V0IHRleHRXb3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dFdvcmRzO1xuICB9XG4gIHByaXZhdGUgX3RleHRXb3JkczogSVRleHRXb3JkcyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gbmF2aWdhdGluZyBpbiB0aGUgdHJlZSB3aXRoIHRoZSBrZXlib2FyZCBvbmx5IHdvcmtzXG4gICAqIGlmIHRoZSBtb3VzZSBpcyBvdmVyIHRoZSB0cmVlIGFyZWEuIFRoaXMgbGltaXRhdGlvbiBpcyB1c2VmdWwgaWYgeW91IGhhdmUgbXVsdGlwbGUgdHJlZXMgb3Igb3RoZXIgY29tcG9uZW50c1xuICAgKiB0aGF0IG1pZ2h0IGJlIHVzaW5nIGtleWJvYXJkIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdpdGggdGhpcyBwYXJhbWV0ZXIsIHlvdSBjYW4gY29uZmlndXJlIHdoaWNoIGtleXMgd2lsbCBiZSBsaXN0ZW5lbmQgdG8gdG8gc3dpdGNoIHRoZSB0cmVlIGVsZW1lbnRzLFxuICAgKiBhbmQgYWxzbyB0byBkaXNhYmxlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBrZXlzICovXG4gIEBJbnB1dCgpIHNldCBjdXN0b21LZXlib2FyZE9wZXJhdGlvbkNvbmZpZyhjb25maWc6IElLZXlib2FyZE9wZXJhdGlvbkNvbmZpZykge1xuICAgIHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLm1lcmdlQ29uZmlnT3BlcmF0aW9uKGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBzdXBwbHkgY3VzdG9tIGZpbHRlcnMgdGhhdCBhcmUgcHJvY2Vzc2VkIHdoZW4gdGhlIGZpbHRlciBpbnB1dCBpcyBjaGFuZ2VkLiBEZWZhdWx0IGZpbHRlcnMgYXJlIHVzZWRcbiAgICogdGhhdCBjaGVjayBmb3Igc2hvcnQgdGV4dCBhbmQgaXRlbSBudW1iZXIgbWF0Y2hlcywgYW5kIHlvdSBjYW4gZWl0aGVyIGFkZCBjdXN0b20gZmlsdGVycyBvciByZXBsYWNlIHRoZSBkZWZhdWx0IG9uZXMuXG4gICAqL1xuICBASW5wdXQoKSBsaXN0RmlsdGVyRnVuYyA9IERFRkFVTFRfRklMVEVSUztcblxuICAvKipcbiAgICogT3B0aW9uYWwuIEZvciB0YWJsZSB2aWV3cywgdGhpcyBhbGxvd3MgeW91IHRvIGFkZCBjdXN0b20gY29sdW1ucyB0byB0aGUgdGFibGUuXG4gICAqIGFkZFRhYmxlQ29sdW1uczogQXJyYXkgb2Ygb2JqZWN0c1xuICAgKiB7XG4gICAqICAgbmFtZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIGNvbHVtblxuICAgKiAgIHRpdGxlOiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvd2VkIHRpdGxlIG9mIGNvbHVtblxuICAgKiAgIGFsaWduPzogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgYWxpZ2h0OiBsZWZ0KGRlZmF1bHQpIC8gY2VudGVyIC8gcmlnaHRcbiAgICogICBudW1iZXJGb3JtYXQ/OiBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIGZvcm1hdCBvZiBudW1iZXIgdmFsdWUsIGV4YW1wbGU6ICcxLjItMidcbiAgICogfVxuICAgKi9cbiAgQElucHV0KCkgYWRkVGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtblR5cGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gc3VwcGx5IGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGFwcGVhcmFuY2Ugb2YgZWxlbWVudHMuXG4gICAqIFRoZXkgb2JqZWN0cyBjb250YWluIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgaXMgZXZhbHVhdGVkLCBhbG9uZyB3aXRoIGFuIG9wdGlvbiB0byBjb25maWd1cmUgdGhlXG4gICAqIGFwcGVhcmFuY2Ugb2YgdGhlIGVsZW1lbnQuXG4gICAqICAgZnVuY3Rpb25WaWV3OiBBcnJheSBvZiBvYmplY3RzXG4gICAqICAge1xuICAgKiAgICAgbmFtZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSBvZiB2aWV3IHBhcnQ6IHlvdSBjYW4gYWRkL3JlbW92ZSBpdCB3aGVuIGl0IG5lZWRcbiAgICogICAgIGZ1bmM6IChlbGVtZW50OiBhbnksIHJlc3VsdD86IGFueSkgPT4gYm9vbGVhbiwgIC8vIHRoaXMgZmlsdGVyIGZ1bmN0aW9uIGNhbGN1bGF0ZSBjb25kaXRpb24gdG8gY2hhbmdlIHZpZXdcbiAgICogICAgIHZpZXc6IHtcbiAgICogICAgICAgaWNvbk5hbWU/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgbmFtZSBvZiBpY29uXG4gICAqICAgICAgIGljb25Db2xvcj86IHN0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGNvbG9yIG9mIGljb25cbiAgICogICAgICAgdGV4dEJvbGQ/OiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgd2VpZ2h0IG9mIHRleHRcbiAgICogICAgICAgdGV4dENvbG9yPzogc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgY29sb3Igb2YgdGV4dFxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICovXG4gIEBJbnB1dCgpIGZ1bmN0aW9uVmlldzogSUZ1bmN0aW9uVmlld0xpbmVbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGFzIHRoZSBldmVudCB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUVsZW1lbnREdG8gfCBudWxsPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGRvdWJsZSBjbGlja2luZyBvbiBpdC4gVGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgZW1pdHRlZCBhcyB0aGUgZXZlbnQgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElFbGVtZW50RHRvPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IHJpZ2h0IGNsaWNraW5nIG9uIGl0LiBUaGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGFzIHRoZSBldmVudCB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb250ZXh0TWVudURhdGFUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgaW4gdGhlIHRyZWUgYXJlIGNoYW5nZWQuIFRoZSBzZWxlY3RlZCBlbGVtZW50cyBhcmUgZW1pdHRlZCBhcyB0aGUgZXZlbnQgdmFsdWUuXG4gICAqIFNlbGVjdGVkIGVsZW1lbnRzIGFyZSBlbGVtZW50cyB3aG9zZSBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhbmQgYXJlIGRpZmZlcmVudCB0aGFuIGVsZW1lbnRzIHRoYXQgYXJlIGluIGFuIGFjdGl2ZSBzZWxlY3Rpb24gc3RhdGUuXG4gICAqIFR5cGNpYWwgdXNlIGNhc2VzIGZvciB0aGlzIGluY2x1ZGUgZS5nLiBzZWxlY3RpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aGluIGEgc2VydmljZSBzcGVjaWZpY2F0aW9uIHdpdGhvdXRcbiAgICogYWN0dWFsbHkgZm9jdXNzaW5nIHRoZW0sIGUuZy4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0ZWRFbGVtZW50W10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnYXZhVHJlZVdyYXBwZXInKSBhdmFUcmVlV3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdhdmFNYWluV3JhcHBlcicpIGF2YU1haW5XcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2F2YVRyZWVGaWx0ZXJJbnB1dCcpIGF2YVRyZWVGaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgc2VydmljZVNwZWNpZmljYXRpb24hOiBTZXJ2aWNlU3BlY2lmaWNhdGlvbkR0bztcbiAgaXNMaXN0ZW5LZXlib2FyZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRW1pdGVTZWxlY3RlZEVsZW1lbnRzID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YTogU2VsZWN0aW5nRWxlbWVudHNUeXBlW10gPSBbXTtcbiAgZmxhdEVsZW1lbnRzOiBJRWxlbWVudER0b1tdIHwgbnVsbCA9IG51bGw7XG4gIHByZXNlbGVjdGVkRWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsID0gbnVsbDtcbiAgZmlsdGVySW5wdXQgPSAnJztcbiAgbGlzdE1vZGVWaWV3VHlwZSA9IE1vZGVWaWV3VHlwZTtcbiAgcHJpdmF0ZSBmaWx0ZXIgPSAnJztcbiAgcHJpdmF0ZSAkZmlsdGVyID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgZmlsdGVyZWRFbGVtZW50TGlzdDogSUVsZW1lbnREdG9bXSA9IFtdO1xuICBwcml2YXRlICRkZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIHByaXZhdGUgZmxhdEVsZW1lbnRzU2VydmljZTogRmxhdEVsZW1lbnRzU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgc2VsZWN0RWxlbWVudFNlcnZpY2U6IFNlbGVjdEVsZW1lbnRTZXJ2aWNlLFxuICAgIEBTZWxmKCkgcHJpdmF0ZSB0cmVlTm9kZVNlbGVjdGlvblNlcnZpY2U6IFRyZWVOb2RlU2VsZWN0aW9uU2VydmljZSxcbiAgICBAU2VsZigpIHByaXZhdGUgZXhwYW5kUGFyZW50R3JvdXBTZXJ2aWNlOiBFeHBhbmRQYXJlbnRHcm91cFNlcnZpY2UsXG4gICAgQFNlbGYoKSBwcml2YXRlIGtleWJvYXJkT3BlcmF0aW9uU2VydmljZTogS2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRFMgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudFNlcnZpY2UucHJlc2VsZWN0ZWRFbGVtZW50LnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+ICh0aGlzLnByZXNlbGVjdGVkRWxlbWVudCA9IGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENsaWNrRWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGU7XG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50U2VydmljZS5zZWxlY3REYmxDbGlja0VsZW1lbnQucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5zZWxlY3REYmxDbGljay5lbWl0KGUpKTtcbiAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNlbGVjdENvbnRleHRNZW51RWxlbWVudC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmNvbnRleHRNZW51RXZlbnQuZW1pdChlKSk7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZsYXRFbGVtZW50c0R0by5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cyA9IGU7XG4gICAgICB0aGlzLmdldEZpbHRlcmVkTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMjUwKSkuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZExpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5saXN0RmlsdGVyRnVuYyA9IHRoaXMubGlzdEZpbHRlckZ1bmM7XG4gICAgdGhpcy5mbGF0RWxlbWVudHNTZXJ2aWNlLmZ1bmN0aW9uVmlldyA9IHRoaXMuZnVuY3Rpb25WaWV3O1xuXG4gICAgaWYgKGNoYW5nZXNbJ3Byb2plY3QnXSAmJiB0aGlzLnByb2plY3Q/LnNlcnZpY2VTcGVjaWZpY2F0aW9ucz8uWzBdKSB7XG4gICAgICB0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uID0gdGhpcy5wcm9qZWN0LnNlcnZpY2VTcGVjaWZpY2F0aW9uc1swXTtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5zZXRFbGVtZW50c0R0byh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW5nRWxlbWVudHNUcmVlRGF0YSA9IHRoaXMudHJlZU5vZGVTZWxlY3Rpb25TZXJ2aWNlLmxvYWRTZWxlY3RpbmdFbGVtZW50cyh0aGlzLnNlcnZpY2VTcGVjaWZpY2F0aW9uLmVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UudHJlZU5vZGVTZWxlY3RpbmcucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RpbmdUcmVlID0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0VHJlZVJvb3QodGhpcy5zZWxlY3RpbmdFbGVtZW50c1RyZWVEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzQ2hhbmdlZC5lbWl0KHNlbGVjdGluZ1RyZWUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXNbJ3NlbGVjdGVkTm9kZUlkJ10gJiYgdGhpcy5wcm9qZWN0KSB8fCBjaGFuZ2VzWydwcm9qZWN0J10pIHtcbiAgICAgIHRoaXMuZmxhdEVsZW1lbnRzU2VydmljZS5nZXRPbmVFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZUlkKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnRTZXJ2aWNlLnNldENsaWNrRWxlbWVudChlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlICYmIChjaGFuZ2VzWydpbml0aWFsbHlTZWxlY3RlZEVsZW1lbnRzJ10gfHwgY2hhbmdlc1sncHJvamVjdCddKSkge1xuICAgICAgdGhpcy5mb3JtU2VsZWN0aW5nTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJGRlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdXNlT3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMaXN0ZW5LZXlib2FyZCkge1xuICAgICAgdGhpcy5pc0xpc3RlbktleWJvYXJkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXZhVHJlZUZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3VzZU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsS2V5Ym9hcmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKCF0aGlzLm1vdXNlQXdhcmVLZXlib2FyZENvbnRyb2wgfHwgdGhpcy5pc0xpc3RlbktleWJvYXJkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnByZXNlbGVjdGVkRWxlbWVudCB8fCB0aGlzLnNlbGVjdGVkRWxlbWVudDtcblxuICAgICAgICBjb25zdCB7IG9wZXJhdGlvbiwgbmV4dEVsZW1lbnQgfSA9IHRoaXMua2V5Ym9hcmRPcGVyYXRpb25TZXJ2aWNlLmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5RXZlbnQsIGVsZW1lbnQpIHx8IHsgbmV4dEVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlU2VsZWN0ZWRQb3NpdGlvblVwOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgJy5zZWxlY3QnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5Ym9hcmRPcGVyYXRpb25UeXBlLk1vdmVTZWxlY3RlZFBvc2l0aW9uRG93bjpcbiAgICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnQobmV4dEVsZW1lbnQsICcuc2VsZWN0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleWJvYXJkT3BlcmF0aW9uVHlwZS5Nb3ZlQ2hvc2VuUG9zaXRpb25Eb3duOlxuICAgICAgICAgICAgdGhpcy5zaG93RWxlbWVudChuZXh0RWxlbWVudCwgbmV4dEVsZW1lbnQ/LmlkID09PSB0aGlzLnNlbGVjdGVkRWxlbWVudD8uaWQgPyAnLnNlbGVjdCcgOiAnLmNob29zZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXlib2FyZE9wZXJhdGlvblR5cGUuTW92ZUNob3NlblBvc2l0aW9uVXA6XG4gICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50KG5leHRFbGVtZW50LCBuZXh0RWxlbWVudD8uaWQgPT09IHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5pZCA/ICcuc2VsZWN0JyA6ICcuY2hvb3NlJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnREdG8gfCBudWxsLCBuYW1lUXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRyZWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cHMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTGluZShuYW1lUXVlcnkpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbExpbmUobmFtZVF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG93ZWRFbGVtZW50ID0gdGhpcy5hdmFUcmVlV3JhcHBlcj8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKG5hbWVRdWVyeSkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXNob3dlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFJlY3QgPSBzaG93ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChcbiAgICAgIGNoaWxkUmVjdC5ib3R0b20gPiBwYXJlbnRSZWN0LmJvdHRvbSB8fFxuICAgICAgY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wIHx8XG4gICAgICAodGhpcy5tb2RlVmlldyA9PT0gTW9kZVZpZXdUeXBlLlRhYmxlICYmIGNoaWxkUmVjdC50b3AgPCBwYXJlbnRSZWN0LnRvcCArIDI0KVxuICAgICkge1xuICAgICAgc2hvd2VkRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyBsZWZ0OiAwIH0pO1xuICAgICAgaWYgKHRoaXMubW9kZVZpZXcgPT09IE1vZGVWaWV3VHlwZS5UYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ycmVjdFNjcm9sbFRhYmxlTGluZShzaG93ZWRFbGVtZW50LCBwYXJlbnRSZWN0KSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0U2Nyb2xsVGFibGVMaW5lKHNob3dlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRSZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRSZWN0ID0gc2hvd2VkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoY2hpbGRSZWN0LnRvcCA8IHBhcmVudFJlY3QudG9wICsgMjQpIHtcbiAgICAgIHRoaXMuYXZhVHJlZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gMjQ7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQ6IElFbGVtZW50RHRvKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRQYXJlbnRHcm91cFNlcnZpY2UuZXhwYW5kUGFyZW50R3JvdXBzKGVsZW1lbnQsIHRoaXMuZmxhdEVsZW1lbnRzLCB0aGlzLmV4cGFuc2lvblN0YXRlKTtcbiAgfVxuXG4gIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyhpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmV4cGFuc2lvblN0YXRlKS5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiBkZWxldGUgdGhpcy5leHBhbnNpb25TdGF0ZVtpZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsYXRFbGVtZW50cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50VHlwZURpc2NyaW1pbmF0b3IgPT09ICdTZXJ2aWNlU3BlY2lmaWNhdGlvbkdyb3VwRHRvJykge1xuICAgICAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdGVbaXRlbS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1TZWxlY3RpbmdMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFbWl0ZVNlbGVjdGVkRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cykge1xuICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZ2V0RmxhdFNlbGVjdGVkTGlzdElkKHRoaXMuaW5pdGlhbGx5U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmZvckVhY2goKGlkLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlU2VsZWN0aW5nKHRydWUsIGlkKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuZmxhdFNlbGVjdGVkTGlzdElkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5pc0VtaXRlU2VsZWN0ZWRFbGVtZW50cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RPckRlc2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50cmVlTm9kZVNlbGVjdGlvblNlcnZpY2UuY2hhbmdlQWxsKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRMaXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZsYXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbGVtZW50TGlzdCA9IHRoaXMuZmxhdEVsZW1lbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEVsZW1lbnRMaXN0ID0gdGhpcy5mbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiB0aGlzLmZsYXRFbGVtZW50c1NlcnZpY2UuY2hlY2tGaWx0ZXJWYWx1ZShpdGVtLCB0aGlzLmZpbHRlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmF2YU1haW5XcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdXNlT3V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5hdmFNYWluV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb3VzZU92ZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4kZGVzdHJveSksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubW91c2VBd2FyZUtleWJvYXJkQ29udHJvbCB8fCB0aGlzLmlzTGlzdGVuS2V5Ym9hcmQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxLZXlib2FyZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1haW4td3JhcHBlclwiXG4gICNhdmFNYWluV3JhcHBlclxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb250cm9sXCJcbiAgICAjY29udHJvbFxuICA+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29udHJvbC1maWx0ZXJcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgdGV4dFdvcmRzPy50ZXh0U2VhcmNoIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVySW5wdXRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgI2F2YVRyZWVGaWx0ZXJJbnB1dFxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UcmVlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1pY29uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VBbGxFbGVtZW50c0V4cGFuc2lvblN0YXR1cyh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbE9wZW4gfHwgJydcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsYXllci1iYWNrZ3JvdW5kXCI+bGF5ZXJzPC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItaWNvblwiPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJjb250cm9sLWljb25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUFsbEVsZW1lbnRzRXhwYW5zaW9uU3RhdHVzKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbENsb3NlIHx8ICcnXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGF5ZXItYmFja2dyb3VuZFwiPmxheWVyczwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxheWVyLWljb25cIj5yZW1vdmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2VsZWN0aW9uTW9kZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JEZXNlbGVjdEFsbCh0cnVlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbEFkZCB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RPckRlc2VsZWN0QWxsKGZhbHNlKVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRleHRXb3Jkcz8udG9vbHRpcEFsbFJlbW92ZSB8fCAnJ1wiXG4gICAgICAgIGNsYXNzPVwiY29udHJvbC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgdGV4dFdvcmRzPy50ZXh0QWxsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCInY2FsYygxMDAlIC0gJyArIGNvbnRyb2wub2Zmc2V0SGVpZ2h0ICsgJ3B4KSdcIlxuICAgIGNsYXNzPVwiYXZhLXRyZWUtd3JhcHBlclwiXG4gICAgI2F2YVRyZWVXcmFwcGVyXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxhdEVsZW1lbnRzPy5sZW5ndGg7IGVsc2Ugbm90aGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkRWxlbWVudExpc3Q/Lmxlbmd0aDsgZWxzZSBub3RoaW5nRmlsdGVyZWRcIj5cbiAgICAgICAgPGF2YS10cmVlLXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiAhYXZhVHJlZUZpbHRlcklucHV0LnZhbHVlXCJcbiAgICAgICAgICBbc2VydmljZVNwZWNpZmljYXRpb25dPVwic2VydmljZVNwZWNpZmljYXRpb25cIlxuICAgICAgICAgIFtpbmRlbnRdPVwiaW5kZW50XCJcbiAgICAgICAgICBbZXhwYW5zaW9uU3RhdGVdPVwiZXhwYW5zaW9uU3RhdGVcIlxuICAgICAgICAgIFtpc1NlbGVjdGlvbk1vZGVdPVwiaXNTZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10cmVlLXN0cnVjdHVyZT5cbiAgICAgICAgPGF2YS1saXN0LXN0cnVjdHVyZVxuICAgICAgICAgICpuZ0lmPVwibW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuTGlzdCB8fCAobW9kZVZpZXcgPT09IGxpc3RNb2RlVmlld1R5cGUuVHJlZSAmJiBhdmFUcmVlRmlsdGVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICBbZmlsdGVyZWRFbGVtZW50TGlzdF09XCJmaWx0ZXJlZEVsZW1lbnRMaXN0XCJcbiAgICAgICAgICBbaXNTZWxlY3Rpb25Nb2RlXT1cImlzU2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgW3NlbGVjdGVkQ29sb3JdPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgICAgICAgW2FsbG93RGJsQ2xpY2tdPVwiYWxsb3dEYmxDbGlja1wiXG4gICAgICAgID5cbiAgICAgICAgPC9hdmEtbGlzdC1zdHJ1Y3R1cmU+XG4gICAgICAgIDxhdmEtdGFibGUtc3RydWN0dXJlXG4gICAgICAgICAgKm5nSWY9XCJtb2RlVmlldyA9PT0gbGlzdE1vZGVWaWV3VHlwZS5UYWJsZVwiXG4gICAgICAgICAgW2ZpbHRlcmVkRWxlbWVudExpc3RdPVwiZmlsdGVyZWRFbGVtZW50TGlzdFwiXG4gICAgICAgICAgW2lzU2VsZWN0aW9uTW9kZV09XCJpc1NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgIFthZGRUYWJsZUNvbHVtbnNdPVwiYWRkVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbc2VsZWN0ZWRDb2xvcl09XCJzZWxlY3RlZENvbG9yXCJcbiAgICAgICAgICBbYWxsb3dEYmxDbGlja109XCJhbGxvd0RibENsaWNrXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F2YS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZz5cbiAge3sgdGV4dFdvcmRzPy50ZXh0Tm90aGluZyB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm90aGluZ0ZpbHRlcmVkPlxuICB7eyB0ZXh0V29yZHM/LnRleHROb3RoaW5nRmlsdGVyZWQgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// This file is automatically generated as part of the build process
|
|
2
2
|
export const version = {
|
|
3
|
-
version: "0.
|
|
4
|
-
commitInfo: "Branch.
|
|
5
|
-
commitDate: "2024-02-
|
|
6
|
-
commitHash: "
|
|
7
|
-
informationalVersion: "0.
|
|
8
|
-
buildDateUtc: new Date(Date.UTC(2024, 1,
|
|
3
|
+
version: "1.0.0-beta0097",
|
|
4
|
+
commitInfo: "Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
5
|
+
commitDate: "2024-02-18",
|
|
6
|
+
commitHash: "399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
7
|
+
informationalVersion: "1.0.0-beta.97+Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
8
|
+
buildDateUtc: new Date(Date.UTC(2024, 1, 18, 12, 55, 26))
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRUFBb0U7QUFFcEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsVUFBVSxFQUFFLDZEQUE2RDtJQUN6RSxVQUFVLEVBQUUsWUFBWTtJQUN4QixVQUFVLEVBQUUsMENBQTBDO0lBQ3RELG9CQUFvQixFQUFFLDJFQUEyRTtJQUNqRyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBcIjEuMC4wLWJldGEwMDk3XCIsXG4gICAgY29tbWl0SW5mbzogXCJCcmFuY2guZGV2ZWxvcC5TaGEuMzk5ZTE0YjI1MmQzMjk1NWY2OWZiZTU3MzFmMGRjN2RiMTJlMDNjNVwiLFxuICAgIGNvbW1pdERhdGU6IFwiMjAyNC0wMi0xOFwiLFxuICAgIGNvbW1pdEhhc2g6IFwiMzk5ZTE0YjI1MmQzMjk1NWY2OWZiZTU3MzFmMGRjN2RiMTJlMDNjNVwiLFxuICAgIGluZm9ybWF0aW9uYWxWZXJzaW9uOiBcIjEuMC4wLWJldGEuOTcrQnJhbmNoLmRldmVsb3AuU2hhLjM5OWUxNGIyNTJkMzI5NTVmNjlmYmU1NzMxZjBkYzdkYjEyZTAzYzVcIixcbiAgICBidWlsZERhdGVVdGM6IG5ldyBEYXRlKERhdGUuVVRDKDIwMjQsIDEsIDE4LCAxMiwgNTUsIDI2KSlcbn1cbiJdfQ==
|
|
@@ -1217,10 +1217,25 @@ class AvaTreeComponent {
|
|
|
1217
1217
|
* }
|
|
1218
1218
|
*/
|
|
1219
1219
|
this.functionView = null;
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
this.
|
|
1220
|
+
/**
|
|
1221
|
+
* This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.
|
|
1222
|
+
*/
|
|
1223
|
+
this.selectClick = new EventEmitter();
|
|
1224
|
+
/**
|
|
1225
|
+
* This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.
|
|
1226
|
+
*/
|
|
1227
|
+
this.selectDblClick = new EventEmitter();
|
|
1228
|
+
/**
|
|
1229
|
+
* This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.
|
|
1230
|
+
*/
|
|
1231
|
+
this.contextMenuEvent = new EventEmitter();
|
|
1232
|
+
/**
|
|
1233
|
+
* This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.
|
|
1234
|
+
* Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.
|
|
1235
|
+
* Typcial use cases for this include e.g. selecting multiple elements within a service specification without
|
|
1236
|
+
* actually focussing them, e.g. for further processing.
|
|
1237
|
+
*/
|
|
1238
|
+
this.selectedElementsChanged = new EventEmitter();
|
|
1224
1239
|
this.selectedElement = null;
|
|
1225
1240
|
this.isListenKeyboard = false;
|
|
1226
1241
|
this.isEmiteSelectedElements = false;
|
|
@@ -1554,12 +1569,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
1554
1569
|
|
|
1555
1570
|
// This file is automatically generated as part of the build process
|
|
1556
1571
|
const version = {
|
|
1557
|
-
version: "0.
|
|
1558
|
-
commitInfo: "Branch.
|
|
1559
|
-
commitDate: "2024-02-
|
|
1560
|
-
commitHash: "
|
|
1561
|
-
informationalVersion: "0.
|
|
1562
|
-
buildDateUtc: new Date(Date.UTC(2024, 1,
|
|
1572
|
+
version: "1.0.0-beta0097",
|
|
1573
|
+
commitInfo: "Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
1574
|
+
commitDate: "2024-02-18",
|
|
1575
|
+
commitHash: "399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
1576
|
+
informationalVersion: "1.0.0-beta.97+Branch.develop.Sha.399e14b252d32955f69fbe5731f0dc7db12e03c5",
|
|
1577
|
+
buildDateUtc: new Date(Date.UTC(2024, 1, 18, 12, 55, 26))
|
|
1563
1578
|
};
|
|
1564
1579
|
|
|
1565
1580
|
/*
|