@simpleangularcontrols/sac-common 10.0.0-rc.12 → 10.0.0-rc.13
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/bundles/simpleangularcontrols-sac-common.umd.js +356 -408
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basemodelcontrol.d.ts +4 -8
- package/controls/contextmenu/contextmenu.d.ts +26 -19
- package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
- package/controls/contextmenu/contextmenuitem.d.ts +5 -0
- package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
- package/controls/treeview/treeview.d.ts +87 -121
- package/esm2015/common/basemodelcontrol.js +28 -24
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +22 -23
- package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
- package/esm2015/controls/treeview/treeview.js +232 -247
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/public_api.js +4 -5
- package/esm2015/services/sac-icon.service.js +25 -1
- package/fesm2015/simpleangularcontrols-sac-common.js +343 -389
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacIconService.d.ts +16 -0
- package/interfaces/treeviewaction.interface.d.ts +4 -0
- package/package.json +1 -1
- package/public_api.d.ts +3 -4
- package/services/sac-icon.service.d.ts +33 -1
- package/simpleangularcontrols-sac-common-10.0.0-rc.13.tgz +0 -0
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/ngtreeitemaction.ngfactory.js +0 -7
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/esm2015/controls/treeview/treeviewchild.ngfactory.js +0 -7
- package/simpleangularcontrols-sac-common-10.0.0-rc.12.tgz +0 -0
- /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
- /package/{controls/treeview/treeviewchild.ngfactory.d.ts → interfaces/treeviewaction.interface.ngfactory.d.ts} +0 -0
|
@@ -1,322 +1,307 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SacBaseModelControl } from '../../common/basemodelcontrol';
|
|
2
|
+
import { Validation } from '../../validation';
|
|
3
|
+
import { SacFormLayoutCommon } from '../layout/formlayout';
|
|
4
|
+
import { Directive, EventEmitter, Host, Injector, Input, Output, TemplateRef } from '@angular/core';
|
|
2
5
|
/**
|
|
3
6
|
* Basis Komponente für SacTreeView
|
|
4
7
|
*/
|
|
5
|
-
export class
|
|
6
|
-
|
|
8
|
+
export class SacTreeviewCommon extends SacBaseModelControl {
|
|
9
|
+
// #endregion Properties
|
|
10
|
+
// #region Constructors
|
|
11
|
+
/**
|
|
12
|
+
* Constructor
|
|
13
|
+
* @param injector Service Injector
|
|
14
|
+
*/
|
|
15
|
+
constructor(formlayout, injector) {
|
|
16
|
+
super(formlayout, injector);
|
|
17
|
+
// #region Properties
|
|
7
18
|
/**
|
|
8
|
-
*
|
|
19
|
+
* Event when Action is clicked on Node. An object of the type 'TreeviewAction' is returned. In the default case, 'action' in this object is always the value 'default'. The value can be changed via the 'templateaction'.
|
|
9
20
|
*/
|
|
10
|
-
this.
|
|
21
|
+
this.actionclicked = new EventEmitter();
|
|
11
22
|
/**
|
|
12
|
-
*
|
|
23
|
+
* Property on the data object that contains the children of the structure element. Must be an array of objects. The default value is 'children'
|
|
13
24
|
*/
|
|
14
|
-
this.
|
|
25
|
+
this.attrchildren = 'children';
|
|
15
26
|
/**
|
|
16
|
-
*
|
|
27
|
+
* Defines the property on the 'data' object with which the actions for a node can be deactivated. A 'disabled' property is used by default.
|
|
17
28
|
*/
|
|
18
|
-
this.
|
|
29
|
+
this.attrdisableaction = 'disabled';
|
|
19
30
|
/**
|
|
20
|
-
*
|
|
31
|
+
* Property on the 'data' object that stores the expanded state. Property must be of type boolean. Default is 'expanded'
|
|
21
32
|
*/
|
|
22
|
-
this.
|
|
33
|
+
this.attrexanded = 'expanded';
|
|
23
34
|
/**
|
|
24
|
-
*
|
|
35
|
+
* Property for saving the HoverState on the field. If the property is not present on the node, it is automatically created and removed again. The value can usually be left at the default value unless there is a conflict with a property on the node that is required for other purposes.
|
|
25
36
|
*/
|
|
26
|
-
this.
|
|
37
|
+
this.attrhoverstate = 'hoverstate';
|
|
27
38
|
/**
|
|
28
|
-
*
|
|
39
|
+
* Property on 'data' object, which contains the icon for the node. By default, the property is not set, which hides the icon in the node.
|
|
29
40
|
*/
|
|
30
|
-
this.
|
|
41
|
+
this.attricon = null;
|
|
31
42
|
/**
|
|
32
|
-
*
|
|
33
|
-
* is false).
|
|
43
|
+
* property on the 'data' object contains an ID of the node. The default is 'id'. If the property is set to NULL, the selectedId event is no longer triggered.
|
|
34
44
|
*/
|
|
35
|
-
this.
|
|
45
|
+
this.attrid = 'id';
|
|
36
46
|
/**
|
|
37
|
-
*
|
|
47
|
+
* Property on 'data' object, which contains the label for the node. Default is 'label'
|
|
38
48
|
*/
|
|
39
|
-
this.
|
|
49
|
+
this.attrlabel = 'label';
|
|
40
50
|
/**
|
|
41
|
-
*
|
|
51
|
+
* Property on 'data' object, which defines whether the node is selected or not. It should be ensured that only 1 node has the value for Selected set to true. Default is 'selected'.
|
|
42
52
|
*/
|
|
43
|
-
this.
|
|
53
|
+
this.attrselected = 'selected';
|
|
44
54
|
/**
|
|
45
|
-
*
|
|
55
|
+
* Event when a node is collapsed. Returns the node element as a parameter
|
|
46
56
|
*/
|
|
47
|
-
this.
|
|
57
|
+
this.collabsed = new EventEmitter();
|
|
48
58
|
/**
|
|
49
|
-
*
|
|
59
|
+
* The property contains an array of nodes. The data must already map the tree via child properties.
|
|
50
60
|
*/
|
|
51
|
-
this.
|
|
61
|
+
this.data = [];
|
|
52
62
|
/**
|
|
53
|
-
*
|
|
63
|
+
* Activates the 'expand' and 'collabse' event even if a node has no children. This is helpful if node elements are to be reloaded at runtime.
|
|
54
64
|
*/
|
|
55
|
-
this.
|
|
65
|
+
this.enableasynchload = false;
|
|
56
66
|
/**
|
|
57
|
-
*
|
|
67
|
+
* Activates Ellipsis on the node labels
|
|
58
68
|
*/
|
|
59
|
-
this.
|
|
69
|
+
this.enableellipsis = true;
|
|
60
70
|
/**
|
|
61
|
-
*
|
|
71
|
+
* Event when a node is expanded. Returns the node element as a parameter
|
|
62
72
|
*/
|
|
63
|
-
this.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
this.expanded = new EventEmitter();
|
|
74
|
+
/**
|
|
75
|
+
* Defines whether an icon for the expanded/collapsed status should be displayed.
|
|
76
|
+
*/
|
|
77
|
+
this.expandedstate = true;
|
|
78
|
+
/**
|
|
79
|
+
* A node must be selected
|
|
80
|
+
*/
|
|
81
|
+
this.isrequired = false;
|
|
82
|
+
/**
|
|
83
|
+
* Name of the TreeView control
|
|
84
|
+
*/
|
|
85
|
+
this.name = '';
|
|
86
|
+
/**
|
|
87
|
+
* Event when a node is selected. Returns the id attribute as a parameter. The event is not triggered if 'attrid' is not set.
|
|
88
|
+
*/
|
|
89
|
+
this.selected = new EventEmitter();
|
|
90
|
+
/**
|
|
91
|
+
* Event when a node is selected. Returns the node element as a parameter.
|
|
92
|
+
*/
|
|
93
|
+
this.selectednode = new EventEmitter();
|
|
94
|
+
/**
|
|
95
|
+
* Resource Key für Validation Message Required bei Control
|
|
96
|
+
*/
|
|
97
|
+
this.validationmessagerequired = this.validationKeyService.ValidationErrorRequired;
|
|
98
|
+
/**
|
|
99
|
+
* Resource Key für Validation Message Required in Validation Summary
|
|
100
|
+
*/
|
|
101
|
+
this.validationmessagesummaryrequired = this.validationKeyService.ValidationErrorSummaryRequired;
|
|
70
102
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this._data = value;
|
|
76
|
-
this.nodes = value;
|
|
77
|
-
// this.nodes.forEach(node => node["typeId"] = "13")
|
|
78
|
-
this.LoadTree();
|
|
79
|
-
if (this._collapseAll !== undefined) {
|
|
80
|
-
this.collapseAllNode(this._collapseAll);
|
|
81
|
-
}
|
|
103
|
+
// #endregion Constructors
|
|
104
|
+
// #region Public Getters And Setters
|
|
105
|
+
get iconAction() {
|
|
106
|
+
return this.iconService.TreeviewNodeActionIcon;
|
|
82
107
|
}
|
|
83
108
|
/**
|
|
84
|
-
*
|
|
109
|
+
* CSS icon for folders in tree there are collabsed
|
|
110
|
+
* @returns css class with icon
|
|
85
111
|
*/
|
|
86
|
-
|
|
87
|
-
this.
|
|
112
|
+
get iconFolderCollabsed() {
|
|
113
|
+
return this.iconService.TreeviewNodeClosedIcon;
|
|
88
114
|
}
|
|
89
115
|
/**
|
|
90
|
-
*
|
|
116
|
+
* CSS icon class for folders without subfolders
|
|
117
|
+
* @returns css class with icon
|
|
91
118
|
*/
|
|
92
|
-
get
|
|
93
|
-
return this.
|
|
119
|
+
get iconFolderEmpty() {
|
|
120
|
+
return this.iconService.TreeviewNodeEmptyIcon;
|
|
94
121
|
}
|
|
95
122
|
/**
|
|
96
|
-
*
|
|
123
|
+
* CSS icon for folders in tree there are expanded
|
|
124
|
+
* @returns css class with icon
|
|
97
125
|
*/
|
|
98
|
-
|
|
99
|
-
this.
|
|
126
|
+
get iconFolderOpen() {
|
|
127
|
+
return this.iconService.TreeviewNodeOpenIcon;
|
|
100
128
|
}
|
|
129
|
+
// #endregion Public Getters And Setters
|
|
130
|
+
// #region Public Methods
|
|
101
131
|
/**
|
|
102
|
-
*
|
|
132
|
+
* Creates an array of a certain size. Is required for a For in the UI, as Angular does not support counting loops
|
|
133
|
+
* @param size Size of the array
|
|
134
|
+
* @returns Array
|
|
103
135
|
*/
|
|
104
|
-
|
|
105
|
-
return
|
|
136
|
+
count(size) {
|
|
137
|
+
return new Array(size);
|
|
106
138
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
*/
|
|
111
|
-
set collapseall(value) {
|
|
112
|
-
this._collapseAll = value;
|
|
113
|
-
if (this.nodes && this.nodes.length && this.nodes.length > 0) {
|
|
114
|
-
this.collapseAllNode(this._collapseAll);
|
|
139
|
+
getChildren(node) {
|
|
140
|
+
if (!node || !this.attrchildren) {
|
|
141
|
+
return [];
|
|
115
142
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
* Getter für das collapse property. Ergibt boolean Wert, ob die Items collapsed/expand sind.
|
|
122
|
-
*/
|
|
123
|
-
get collapseall() {
|
|
124
|
-
return this._collapseAll;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Select or deselect all nodes.
|
|
128
|
-
*/
|
|
129
|
-
set selectall(value) {
|
|
130
|
-
this._selectAll = value;
|
|
131
|
-
this._recursiveEdit(this.nodes, this.childrenAttr, this.selectAttr, value);
|
|
132
|
-
this._recursiveEdit(this.nodes, this.childrenAttr, this.inDeterminateAttr, false);
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Input property - setter. Deffiniert das ID des selektierten Item(node)
|
|
136
|
-
*/
|
|
137
|
-
set selectedid(v) {
|
|
138
|
-
this.selectedNode = this.findNode(this.nodes, v, this.idAttr);
|
|
139
|
-
// if (this.selectedNode) {
|
|
140
|
-
// this.selectedIdEmitter.emit(this.selectedNode[this.idAttr]);
|
|
141
|
-
// this.selectedTextEmitter.emit(this.selectedNode[this.textAttr]);
|
|
142
|
-
// }
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Getter. Ergibt das ID des selektierten Item(node)
|
|
146
|
-
*/
|
|
147
|
-
get selectedId() {
|
|
148
|
-
return this.selectedNode ? this.selectedNode[this.idAttr] : null;
|
|
143
|
+
let children = node[this.attrchildren];
|
|
144
|
+
if (!Array.isArray(children)) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
return children;
|
|
149
148
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
149
|
+
getStringField(node, fieldname) {
|
|
150
|
+
if (!node) {
|
|
151
|
+
return '';
|
|
152
|
+
}
|
|
153
|
+
if (!fieldname) {
|
|
154
|
+
return node;
|
|
155
|
+
}
|
|
156
|
+
let value = node[fieldname];
|
|
157
|
+
if (!value) {
|
|
158
|
+
return '';
|
|
158
159
|
}
|
|
160
|
+
return value;
|
|
159
161
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
*/
|
|
163
|
-
get selectedNode() {
|
|
164
|
-
return this._selectedNode;
|
|
162
|
+
hasChildren(node) {
|
|
163
|
+
return this.getChildren(node).length > 0;
|
|
165
164
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (this.selectedId)
|
|
173
|
-
this.openSelectedNode(this.nodes);
|
|
165
|
+
isDisabledState(node) {
|
|
166
|
+
if (!node || !this.attrdisableaction) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
let value = node[this.attrdisableaction];
|
|
170
|
+
return value === true || value === 'true';
|
|
174
171
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
*/
|
|
179
|
-
openSelectedNode(data) {
|
|
180
|
-
let result = false;
|
|
181
|
-
for (let i = 0; i < data.length; i++) {
|
|
182
|
-
if (data[i][this.childrenAttr].length &&
|
|
183
|
-
data[i][this.idAttr] != this.selectedId)
|
|
184
|
-
result = this.openSelectedNode(data[i][this.childrenAttr]);
|
|
185
|
-
if (result || data[i][this.idAttr] == this.selectedId) {
|
|
186
|
-
data[i][this.collapseAttr] = false;
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
172
|
+
isExpandedState(node) {
|
|
173
|
+
if (!node || !this.attrexanded) {
|
|
174
|
+
return false;
|
|
189
175
|
}
|
|
190
|
-
|
|
176
|
+
let value = node[this.attrexanded];
|
|
177
|
+
return value === true || value === 'true';
|
|
191
178
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// If data is flat, prepare data with recursive function.
|
|
199
|
-
this.nodes = this.prepareData ? this._getPreparedData(cloned) : this._data;
|
|
179
|
+
isHoverState(node) {
|
|
180
|
+
if (!node || !this.attrhoverstate) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
let value = node[this.attrhoverstate];
|
|
184
|
+
return value === true || value === 'true';
|
|
200
185
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
onCollapseClick(node) {
|
|
205
|
-
if (node[this.childrenAttr].length) {
|
|
206
|
-
node[this.collapseAttr] = !node[this.collapseAttr];
|
|
186
|
+
isSelectedState(node) {
|
|
187
|
+
if (!node || !this.attrselected) {
|
|
188
|
+
return false;
|
|
207
189
|
}
|
|
190
|
+
let value = node[this.attrselected];
|
|
191
|
+
return value === true || value === 'true';
|
|
208
192
|
}
|
|
209
193
|
/**
|
|
210
|
-
*
|
|
194
|
+
* Method is called by clicking an action
|
|
195
|
+
* @param action action and node
|
|
211
196
|
*/
|
|
212
|
-
|
|
213
|
-
this.
|
|
214
|
-
this.selecteditem.emit(this.selectedNode);
|
|
215
|
-
// this.cd.detectChanges();
|
|
197
|
+
onActionClicked(action) {
|
|
198
|
+
this.actionclicked.emit(action);
|
|
216
199
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
200
|
+
onNodeClicked(node) {
|
|
201
|
+
if (this.isDisabledState(node) || this.isSelectedState(node)) {
|
|
202
|
+
this.invertExpandedState(node);
|
|
203
|
+
}
|
|
204
|
+
this.setSelectedState(node);
|
|
222
205
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
function collapseAllHIdden(node, collapseAttr, command, childrenAttr) {
|
|
233
|
-
node[collapseAttr] = command;
|
|
234
|
-
node.children.forEach((child) => {
|
|
235
|
-
if (child[childrenAttr].length) {
|
|
236
|
-
collapseAllHIdden(child, collapseAttr, command, childrenAttr);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
206
|
+
setHoverState(node, state) {
|
|
207
|
+
if (!node || !this.attrhoverstate) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (state) {
|
|
211
|
+
node[this.attrhoverstate] = true;
|
|
212
|
+
return;
|
|
239
213
|
}
|
|
214
|
+
if (!node.hasOwnProperty(this.attrhoverstate)) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
delete node[this.attrhoverstate];
|
|
240
218
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
* @param data Liste der nodes
|
|
245
|
-
* @param searchValue Das gesuchte value
|
|
246
|
-
* @param attr Der namen des Attributs auf dem das value gesucht wird
|
|
247
|
-
*/
|
|
248
|
-
findNode(data, searchValue, attr) {
|
|
249
|
-
let result = null;
|
|
250
|
-
for (let i = 0; i < data.length; i++) {
|
|
251
|
-
if (data[i][attr] == searchValue)
|
|
252
|
-
result = data[i];
|
|
253
|
-
else {
|
|
254
|
-
if (data[i][this.childrenAttr].length) {
|
|
255
|
-
let recursiveResult = this.findNode(data[i][this.childrenAttr], searchValue, attr);
|
|
256
|
-
if (recursiveResult)
|
|
257
|
-
result = recursiveResult;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
219
|
+
setSelectedState(node) {
|
|
220
|
+
if (!node || !this.attrselected) {
|
|
221
|
+
return;
|
|
260
222
|
}
|
|
261
|
-
|
|
223
|
+
// reset selected state of any node
|
|
224
|
+
this.data.forEach((rootNode) => this.resetSelectedState(rootNode));
|
|
225
|
+
// set selected node as selected
|
|
226
|
+
node[this.attrselected] = true;
|
|
227
|
+
// Update ngModel
|
|
228
|
+
this.setValue(node);
|
|
229
|
+
// Raise Selected Events
|
|
230
|
+
this.selectednode.emit(node);
|
|
231
|
+
if (!this.attrid) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
let id = this.getStringField(node, this.attrid);
|
|
235
|
+
this.selected.emit(id);
|
|
262
236
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (Array.isArray(list)) {
|
|
268
|
-
for (let i = 0, len = list.length; i < len; i++) {
|
|
269
|
-
list[i][attr] = value;
|
|
270
|
-
if (list[i][childrenAttr].length) {
|
|
271
|
-
this._recursiveEdit(list[i][childrenAttr], childrenAttr, attr, value);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
237
|
+
validateData(c) {
|
|
238
|
+
let error = null;
|
|
239
|
+
if (this.isrequired) {
|
|
240
|
+
error = Validation.required(this.validationmessagerequired, this.validationmessagesummaryrequired)(c);
|
|
274
241
|
}
|
|
242
|
+
return error;
|
|
275
243
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
244
|
+
// #endregion Public Methods
|
|
245
|
+
// #region Private Methods
|
|
246
|
+
invertExpandedState(node) {
|
|
247
|
+
if (!node || !this.attrexanded) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// Items with no children cannot be collabsed
|
|
251
|
+
if (!this.hasChildren(node) && !(this.enableasynchload === true || this.enableasynchload === 'true')) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
let value = node[this.attrexanded];
|
|
255
|
+
if (value === true || value === 'true') {
|
|
256
|
+
this.collabsed.emit(node);
|
|
257
|
+
node[this.attrexanded] = false;
|
|
287
258
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
tree.push(list[i]);
|
|
294
|
-
}
|
|
259
|
+
else {
|
|
260
|
+
this.expanded.emit(node);
|
|
261
|
+
node[this.attrexanded] = true;
|
|
295
262
|
}
|
|
296
|
-
|
|
263
|
+
}
|
|
264
|
+
resetSelectedState(node) {
|
|
265
|
+
if (!node || !this.attrselected) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
node[this.attrselected] = false;
|
|
269
|
+
this.getChildren(node).forEach((child) => {
|
|
270
|
+
this.resetSelectedState(child);
|
|
271
|
+
});
|
|
297
272
|
}
|
|
298
273
|
}
|
|
299
|
-
|
|
274
|
+
SacTreeviewCommon.decorators = [
|
|
300
275
|
{ type: Directive }
|
|
301
276
|
];
|
|
302
|
-
|
|
277
|
+
SacTreeviewCommon.ctorParameters = () => [
|
|
278
|
+
{ type: SacFormLayoutCommon, decorators: [{ type: Host }] },
|
|
279
|
+
{ type: Injector }
|
|
280
|
+
];
|
|
281
|
+
SacTreeviewCommon.propDecorators = {
|
|
282
|
+
actionclicked: [{ type: Output }],
|
|
283
|
+
attrchildren: [{ type: Input }],
|
|
284
|
+
attrdisableaction: [{ type: Input }],
|
|
285
|
+
attrexanded: [{ type: Input }],
|
|
286
|
+
attrhoverstate: [{ type: Input }],
|
|
287
|
+
attricon: [{ type: Input }],
|
|
288
|
+
attrid: [{ type: Input }],
|
|
289
|
+
attrlabel: [{ type: Input }],
|
|
290
|
+
attrselected: [{ type: Input }],
|
|
291
|
+
collabsed: [{ type: Output }],
|
|
303
292
|
data: [{ type: Input }],
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
293
|
+
enableasynchload: [{ type: Input }],
|
|
294
|
+
enableellipsis: [{ type: Input }],
|
|
295
|
+
expanded: [{ type: Output }],
|
|
296
|
+
expandedstate: [{ type: Input }],
|
|
297
|
+
isrequired: [{ type: Input }],
|
|
308
298
|
name: [{ type: Input }],
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
selectall: [{ type: Input }],
|
|
317
|
-
selectedid: [{ type: Input }],
|
|
318
|
-
selectedidchange: [{ type: Output }],
|
|
319
|
-
selectedtextchanged: [{ type: Output }],
|
|
320
|
-
selecteditem: [{ type: Output }]
|
|
299
|
+
selected: [{ type: Output }],
|
|
300
|
+
selectednode: [{ type: Output }],
|
|
301
|
+
showactionalways: [{ type: Input }],
|
|
302
|
+
templateaction: [{ type: Input }],
|
|
303
|
+
templatelabel: [{ type: Input }],
|
|
304
|
+
validationmessagerequired: [{ type: Input }],
|
|
305
|
+
validationmessagesummaryrequired: [{ type: Input }]
|
|
321
306
|
};
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQVlFOztXQUVHO1FBQ0ksVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNJLGlCQUFZLEdBQUcsYUFBYSxDQUFDO1FBRXBDOztXQUVHO1FBQ0ksZUFBVSxHQUFHLFlBQVksQ0FBQztRQUVqQzs7V0FFRztRQUNJLHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBRTdDOztXQUVHO1FBQ0ssVUFBSyxHQUFVLEVBQUUsQ0FBQztRQW9FMUI7O1dBRUc7UUFFSCxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCOzs7V0FHRztRQUNNLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTdCOztXQUVHO1FBQ00sYUFBUSxHQUFHLE1BQU0sQ0FBQztRQUUzQjs7V0FFRztRQUNNLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFFdkI7O1dBRUc7UUFDTSxlQUFVLEdBQUcsV0FBVyxDQUFDO1FBRWxDOztXQUVHO1FBQ00saUJBQVksR0FBRyxVQUFVLENBQUM7UUEyRm5DOztXQUVHO1FBRUgscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFOUQ7O1dBRUc7UUFFSCx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV2RTs7V0FFRztRQUVILGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7SUFxSmxFLENBQUM7SUFoV0M7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxJQUFJLENBQUMsS0FBWTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixvREFBb0Q7UUFFcEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBUUQ7O09BRUc7SUFDSCxJQUNXLGdCQUFnQixDQUFDLENBQW1CO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBUUQ7O09BRUc7SUFDSCxJQUNXLFlBQVksQ0FBQyxDQUFtQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBdUNELDZDQUE2QztJQUU3Qzs7T0FFRztJQUNILElBQ0ksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN6QztRQUVELHVCQUF1QjtRQUN2QiwwRUFBMEU7UUFFMUUsMkJBQTJCO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLFNBQVMsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FDakIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxVQUFVLENBQUMsQ0FBTTtRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlELDJCQUEyQjtRQUMzQixpRUFBaUU7UUFDakUscUVBQXFFO1FBQ3JFLElBQUk7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkUsQ0FBQztJQU9EOztPQUVHO0lBQ0gsSUFBSSxZQUFZLENBQUMsQ0FBTTtRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQW9CRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdCQUFnQixDQUFDLElBQUk7UUFDM0IsSUFBSSxNQUFNLEdBQVksS0FBSyxDQUFDO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQ0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNO2dCQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUV2QyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNLLFFBQVE7UUFDZCwwRUFBMEU7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0QseURBQXlEO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxJQUFJO1FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsSUFBSTtRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQywyQkFBMkI7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLEdBQUc7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLE9BQU87UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVk7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQzlCLGlCQUFpQixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUMvRDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJO1FBQ3RDLElBQUksTUFBTSxHQUFRLElBQUksQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXO2dCQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlDO2dCQUNILElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3JDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzFCLFdBQVcsRUFDWCxJQUFJLENBQ0wsQ0FBQztvQkFDRixJQUFJLGVBQWU7d0JBQUUsTUFBTSxHQUFHLGVBQWUsQ0FBQztpQkFDL0M7YUFDRjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUs7UUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFBRTtvQkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDdkU7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsSUFBSTtRQUMzQixNQUFNLElBQUksR0FBRyxFQUFFLEVBQ2IsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN6QztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7WUFwWUYsU0FBUzs7O21CQStDUCxLQUFLO3VCQWlCTCxLQUFLOytCQU1MLFlBQVksU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOytCQWV4QyxLQUFLOzJCQU1MLFlBQVksU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO21CQWU3QyxLQUFLOzBCQU9MLEtBQUs7dUJBS0wsS0FBSztxQkFLTCxLQUFLO3lCQUtMLEtBQUs7MkJBS0wsS0FBSztvQkFLTCxLQUFLOzBCQU9MLEtBQUs7d0JBdUJMLEtBQUs7eUJBZUwsS0FBSzsrQkE0Q0wsTUFBTTtrQ0FNTixNQUFNOzJCQU1OLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbnRlbnRDaGlsZCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogQmFzaXMgS29tcG9uZW50ZSBmw7xyIFNhY1RyZWVWaWV3XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY1RyZWVWaWV3Q29tbW9uIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvKipcclxuICAgKiBEYXMgUHJvcGVydHkgZW50aGllbHQgYm9vbGVhbiBXZXJ0IHVuZCBkZWZmaW5pZXJ0LCBvYiBhbGxlIEl0ZW1zIGNvbGxhcHNlZCBzaW5kLiBEZWZhdWx0IHZhbHVlOiB1bmRlZmluZWQvbnVsbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBfY29sbGFwc2VBbGw6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBQcm9wZXJ0eSBlbnRoaWVsdCBib29sZWFuIFdlcnQgdW5kIGRlZmZpbmllcnQsIG9iIGFsbGUgSXRlbXMgc2VsZWN0ZWQgc2luZC4gRGVmYXVsdCB2YWx1ZTogdW5kZWZpbmVkL251bGxcclxuICAgKi9cclxuICBwcml2YXRlIF9zZWxlY3RBbGw6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBQcm9wZXJ0eSBlbnRoaWVsdCBhcnJheSBvZiBub2Rlcy4gRGVmYXVsdCB2YWx1ZTogZW1wdHkgYXJyYXkgW10uXHJcbiAgICovXHJcbiAgcHVibGljIG5vZGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBEYXMgUHJvcGVydHkgZW50aGllbHQgbm9kZSBhdHRyaWJ1dGU6ICdpc0NvbGxhcHNlZCcuIEVzIHdpcmQgYmVudXR6dCBiZWltIHJlbmRlcmluZy4gRsO8ciBFeHBhbmQvQ29sbGFwc2VkIFNpY2h0IGRlcyBOb2RlKFdlcnQpXHJcbiAgICovXHJcbiAgcHVibGljIGNvbGxhcHNlQXR0ciA9ICdpc0NvbGxhcHNlZCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBQcm9wZXJ0eSBlbnRoaWVsdCBub2RlIGF0dHJpYnV0ZTogJ2lzU2VsZWN0ZWQnLiBFcyB3aXJkIGJlbnV0enQgYmVpbSBWb3JiZXJlaXR1bmcgZGVzIERhdGEgZGVzIFRyZWVWaWV3XHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEF0dHIgPSAnaXNTZWxlY3RlZCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBQcm9wZXJ0eSBlbnRoaWVsdCBub2RlIGF0dHJpYnV0ZTogJ2lzSW5kZXRlcm1pbmF0ZScuIEVzIHdpcmQgYmVudXR6dCBiZWltIFZvcmJlcmVpdHVuZyBkZXMgRGF0YSBkZXMgVHJlZVZpZXdcclxuICAgKi9cclxuICBwdWJsaWMgaW5EZXRlcm1pbmF0ZUF0dHIgPSAnaXNJbmRldGVybWluYXRlJztcclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZW4gZGF0YSBmb3IgdHJlZS5cclxuICAgKi9cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZsO8ciBEYXRhIGRlcyBUcmVlVmlld1xyXG4gICAqL1xyXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgUHJvcGVydHkgZsO8ciBEYXRhIGRlcyBUcmVlVmlld1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGEodmFsdWU6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcbiAgICB0aGlzLm5vZGVzID0gdmFsdWU7XHJcblxyXG4gICAgLy8gdGhpcy5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4gbm9kZVtcInR5cGVJZFwiXSA9IFwiMTNcIilcclxuXHJcbiAgICB0aGlzLkxvYWRUcmVlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbGxhcHNlQWxsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2xsYXBzZUFsbE5vZGUodGhpcy5fY29sbGFwc2VBbGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgUHJvcGVydHkgZsO8ciB0ZW1wbGF0ZSBkZXMgVHJlZVZpZXcuIFR5cGU6IFRlbXBsYXRlUmVmPGFueT4uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGllIERpcmVjdGl2ZSBlcmjDpGx0IGRpZSBhY3Rpb25zIGbDvHIgZGFzIFRyZWVWaWV3XHJcbiAgICovXHJcbiAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHVibGljIHNldCB0cmVldmlld1RlbXBsYXRlKHY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMudGVtcGxhdGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGbDvHIgZGFzIFRyZWVWaWV3IFRlbXBsYXRlXHJcbiAgICovXHJcbiAgcHVibGljIGdldCB0cmVldmlld1RlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBwcm9wZXJ0eSBlcmjDpGx0IEljb24gZsO8ciBkYXMgVGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGZpbGVpY29udGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHRlciBwcm9wZXJ0eS4gRGVmZmluaWVydCBkYXMgRmlsZUljb24gZsO8ciBkYXMgVHJlZVZpZXdcclxuICAgKi9cclxuICBAQ29udGVudENoaWxkKCd0cmVlZmlsZWljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBzZXQgdHJlZWZpbGVpY29uKHY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMuZmlsZWljb250ZW1wbGF0ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgcHJvcGVydHkuIEVyZ2lidCBkYXMgRmlsZUljb24gZsO8ciBkYXMgVHJlZVZpZXdcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHRyZWVmaWxlaWNvbigpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVpY29udGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBwcm9wZXJ0eSBmw7xyIGRlbiBOYW1lbiBkZXMgVHJlZVZpZXcuIFR5cGUgc3RyaW5nLiBEZWZhdWx0IHZhbHVlOiBcIlwiXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBuYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmbGFnIGluZGljYXRpbmcgZGF0YSBpcyBmbGF0dGVuIGluIGFycmF5IGFuZCBwcmVwYXJlIGlzIHJlcXVpcmVkLihEZWZhdWx0XHJcbiAgICogaXMgZmFsc2UpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHByZXBhcmVEYXRhID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dHJpYnV0ZSBmb3IgVGV4dCBpbiBUcmVlXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGV4dEF0dHIgPSAnZGF0YSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hbWUgb2YgSUQgcHJvcGVydHkgaW4gaW5wdXQgZGF0YS5cclxuICAgKi9cclxuICBASW5wdXQoKSBpZEF0dHIgPSAnaWQnO1xyXG5cclxuICAvKipcclxuICAgKiBOYW1lIG9mIHBhcmVudCBwcm9wZXJ0eSBpbiBpbnB1dCBkYXRhLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhcmVudEF0dHIgPSAnUEFSRU5UX0lEJztcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBvZiBjaGlsZHJlbiBsaXN0IHByb3BlcnR5IGluIGlucHV0IGRhdGEuXHJcbiAgICovXHJcbiAgQElucHV0KCkgY2hpbGRyZW5BdHRyID0gJ2NoaWxkcmVuJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGl0bGUgZGVzIFRyZWV2aWV3XHJcbiAgICovXHJcbiAgQElucHV0KCkgdGl0bGU7XHJcblxyXG4gIC8vIEBJbnB1dChcInRpdGxlQWN0aW9uXCIpIF90aXRsZUFjdGlvbjogc3RyaW5nXHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxhcHNlIG9yIGV4cGFuZCBhbGwgcGFyZW50IG5vZGVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlYWxsKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jb2xsYXBzZUFsbCA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMubm9kZXMgJiYgdGhpcy5ub2Rlcy5sZW5ndGggJiYgdGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY29sbGFwc2VBbGxOb2RlKHRoaXMuX2NvbGxhcHNlQWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLl9yZWN1cnNpdmVFZGl0KFxyXG4gICAgLy8gICB0aGlzLm5vZGVzLCB0aGlzLmNoaWxkcmVuQXR0ciwgdGhpcy5jb2xsYXBzZUF0dHIsIHRoaXMuX2NvbGxhcHNlQWxsKTtcclxuXHJcbiAgICAvLyB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmw7xyIGRhcyBjb2xsYXBzZSBwcm9wZXJ0eS4gRXJnaWJ0IGJvb2xlYW4gV2VydCwgb2IgZGllIEl0ZW1zIGNvbGxhcHNlZC9leHBhbmQgc2luZC5cclxuICAgKi9cclxuICBnZXQgY29sbGFwc2VhbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VBbGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb3IgZGVzZWxlY3QgYWxsIG5vZGVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGFsbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0QWxsID0gdmFsdWU7XHJcbiAgICB0aGlzLl9yZWN1cnNpdmVFZGl0KHRoaXMubm9kZXMsIHRoaXMuY2hpbGRyZW5BdHRyLCB0aGlzLnNlbGVjdEF0dHIsIHZhbHVlKTtcclxuICAgIHRoaXMuX3JlY3Vyc2l2ZUVkaXQoXHJcbiAgICAgIHRoaXMubm9kZXMsXHJcbiAgICAgIHRoaXMuY2hpbGRyZW5BdHRyLFxyXG4gICAgICB0aGlzLmluRGV0ZXJtaW5hdGVBdHRyLFxyXG4gICAgICBmYWxzZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IHByb3BlcnR5IC0gc2V0dGVyLiBEZWZmaW5pZXJ0IGRhcyBJRCBkZXMgc2VsZWt0aWVydGVuIEl0ZW0obm9kZSlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZGlkKHY6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLmZpbmROb2RlKHRoaXMubm9kZXMsIHYsIHRoaXMuaWRBdHRyKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZElkRW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWROb2RlW3RoaXMuaWRBdHRyXSk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRUZXh0RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWROb2RlW3RoaXMudGV4dEF0dHJdKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlci4gRXJnaWJ0IGRhcyBJRCBkZXMgc2VsZWt0aWVydGVuIEl0ZW0obm9kZSlcclxuICAgKi9cclxuICBnZXQgc2VsZWN0ZWRJZCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2RlID8gdGhpcy5zZWxlY3RlZE5vZGVbdGhpcy5pZEF0dHJdIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhcyBQcm9wZXJ0eSBlcmjDpGx0IGRhcyBzZWxla3RpZXJ0ZSBXZXJ0KG5vZGUpLiBEZWZhdWx0IHZhbHVlOiB1bmRlZmluZWQvbnVsbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkTm9kZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dGVyIGbDvHIgZGFzIHNlbGVrdGllcnRlIFdlcnQobm9kZSkuIFdlbm4gYXVmZ2VydWZlbiBkYXMgSUQgdW5kIFRleHRBdHRyIGRlcyBzZWxlY3RlZCBOb2RlIHdpcmQgZW1pdHRlZFxyXG4gICAqL1xyXG4gIHNldCBzZWxlY3RlZE5vZGUodjogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZE5vZGUgPSB2O1xyXG5cclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE5vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZGlkY2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZElkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZHRleHRjaGFuZ2VkLmVtaXQodlt0aGlzLnRleHRBdHRyXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZsO8ciBkYXMgc2VsZWt0aWVydGUgV2VydChub2RlKS4gRXJnaWJ0IGRhcyBzZWxla3RpZXJ0ZSBXZXJ0KG5vZGUpLlxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3RlZE5vZGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE5vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdXRwdXQgRW1pdHRlci4gRW1pdCBkYXMgSUQgZGVzIHNlbGVjdGVkIE5vZGUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRpZGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3V0cHV0IEVtaXR0ZXIuIEVtaXQgZGFzIFRleHRBdHRyIGRlcyBzZWxlY3RlZCBOb2RlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkdGV4dGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE91dHB1dCBFbWl0dGVyLiBFbWl0IHdlbm4gZWluIE5vZGUgc2VsZWt0aWVydCB3aXJkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkaXRlbTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBBbmd1bGFyIGhhcyBpbml0aWFsaXplZCBhbGwgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlLlxyXG4gICAqIERlZmluZSBhbiBuZ09uSW5pdCgpIG1ldGhvZCB0byBoYW5kbGUgYW55IGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gdGFza3MuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbGxhcHNlQWxsTm9kZSh0aGlzLl9jb2xsYXBzZUFsbCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJZCkgdGhpcy5vcGVuU2VsZWN0ZWROb2RlKHRoaXMubm9kZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVua3Rpb24gc2V0enQgYWxsZSBwYXJlbnQgaXRlbXMgcmVjdXNpdiB6dW0gc2VsZWN0ZWQgbm9kZVxyXG4gICAqIGF1ZiBjb2xsYXBzZWQgPSBmYWxzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb3BlblNlbGVjdGVkTm9kZShkYXRhKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGFbaV1bdGhpcy5jaGlsZHJlbkF0dHJdLmxlbmd0aCAmJlxyXG4gICAgICAgIGRhdGFbaV1bdGhpcy5pZEF0dHJdICE9IHRoaXMuc2VsZWN0ZWRJZFxyXG4gICAgICApXHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5vcGVuU2VsZWN0ZWROb2RlKGRhdGFbaV1bdGhpcy5jaGlsZHJlbkF0dHJdKTtcclxuICAgICAgaWYgKHJlc3VsdCB8fCBkYXRhW2ldW3RoaXMuaWRBdHRyXSA9PSB0aGlzLnNlbGVjdGVkSWQpIHtcclxuICAgICAgICBkYXRhW2ldW3RoaXMuY29sbGFwc2VBdHRyXSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaWUgTWV0aG9kZSB2b3JiZXJlaXRldCBkaWUgRGF0ZW4gZsO8ciBkYXMgVHJlZVZpZXcuIERpZSBGdW5rdGlvbiBzb2xsdGUgZ2XDpG5kZXJ0IHdlcmRlbiBhYmjDpG5naWcgdm9uIGRlbSBrb21tZW5kZW4gRGF0ZW4gKHdlbm4gYXJyYXkpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBMb2FkVHJlZSgpIHtcclxuICAgIC8vaWYgdGhlIHRyZWUgc3RydWN0dXJlIHJlcXVpcmUgYXJyYXkgdGhlIGZ1bmN0aW9uIGJlbG93IHNob3VsZCBiZSBjaGFuZ2VkXHJcbiAgICBjb25zdCBjbG9uZWQgPSB0aGlzLl9kYXRhLm1hcCgoeCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpO1xyXG5cclxuICAgIC8vIElmIGRhdGEgaXMgZmxhdCwgcHJlcGFyZSBkYXRhIHdpdGggcmVjdXJzaXZlIGZ1bmN0aW9uLlxyXG4gICAgdGhpcy5ub2RlcyA9IHRoaXMucHJlcGFyZURhdGEgPyB0aGlzLl9nZXRQcmVwYXJlZERhdGEoY2xvbmVkKSA6IHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaWUgTWV0aG9kZSBjb2xsYXBzZS9leHBhbmQgZGVuIHNlbGVjdGllcnRlbiBOb2RlXHJcbiAgICovXHJcbiAgb25Db2xsYXBzZUNsaWNrKG5vZGUpIHtcclxuICAgIGlmIChub2RlW3RoaXMuY2hpbGRyZW5BdHRyXS5sZW5ndGgpIHtcclxuICAgICAgbm9kZVt0aGlzLmNvbGxhcHNlQXR0cl0gPSAhbm9kZVt0aGlzLmNvbGxhcHNlQXR0cl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaWUgTWV0aG9kZSBzZXQgZGVuIHNlbGVrdGllcnRlbiBOb2RlIHVuZCBlbWl0IGVzLlxyXG4gICAqL1xyXG4gIG9uQ2xpY2sobm9kZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG4gICAgdGhpcy5zZWxlY3RlZGl0ZW0uZW1pdCh0aGlzLnNlbGVjdGVkTm9kZSk7XHJcbiAgICAvLyB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBNZXRob2RlIHdpcmQgZWluIGV2ZW50IG1pdCBNZWxkdW5nIHp1IFBhcmVudCBlbWl0LWVuLlxyXG4gICAqL1xyXG4gIHNlbmRNc2dUb1BhcmVudChtc2cpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRpdGVtLmVtaXQobXNnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBNZXRob2RlIHdpcmQgYWxsZSBOb2RlcyBjb2xsYXBzZVxyXG4gICAqL1xyXG4gIGNvbGxhcHNlQWxsTm9kZShjb21tYW5kKSB7XHJcbiAgICB0aGlzLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGVbdGhpcy5jaGlsZHJlbkF0dHJdLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbGxhcHNlQWxsSElkZGVuKG5vZGUsIHRoaXMuY29sbGFwc2VBdHRyLCBjb21tYW5kLCB0aGlzLmNoaWxkcmVuQXR0cik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZnVuY3Rpb24gY29sbGFwc2VBbGxISWRkZW4obm9kZSwgY29sbGFwc2VBdHRyLCBjb21tYW5kLCBjaGlsZHJlbkF0dHIpIHtcclxuICAgICAgbm9kZVtjb2xsYXBzZUF0dHJdID0gY29tbWFuZDtcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGNoaWxkW2NoaWxkcmVuQXR0cl0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb2xsYXBzZUFsbEhJZGRlbihjaGlsZCwgY29sbGFwc2VBdHRyLCBjb21tYW5kLCBjaGlsZHJlbkF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5rdGlvbiBnaWJ0IG5vZGUgYXVzIGRlciBsaXN0ZSB6dXLDvGNrLCB3ZWxjaGVzIGRhcyBWYWx1ZSBhdWYgZGVtIGdld8O8bnNjaHRlbiBBdHRyaWJ1dCBoYXRcclxuICAgKiBXZW5uIG5vZGUgbmljaHQgZ2VmdW5kZW4gd2lyZCwgd2lyZCBudWxsIHp1csO8Y2sgZ2VnZWJlblxyXG4gICAqIEBwYXJhbSBkYXRhIExpc3RlIGRlciBub2Rlc1xyXG4gICAqIEBwYXJhbSBzZWFyY2hWYWx1ZSBEYXMgZ2VzdWNodGUgdmFsdWVcclxuICAgKiBAcGFyYW0gYXR0ciBEZXIgbmFtZW4gZGVzIEF0dHJpYnV0cyBhdWYgZGVtIGRhcyB2YWx1ZSBnZXN1Y2h0IHdpcmRcclxuICAgKi9cclxuICBwcml2YXRlIGZpbmROb2RlKGRhdGEsIHNlYXJjaFZhbHVlLCBhdHRyKTogYW55IHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGRhdGFbaV1bYXR0cl0gPT0gc2VhcmNoVmFsdWUpIHJlc3VsdCA9IGRhdGFbaV07XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkYXRhW2ldW3RoaXMuY2hpbGRyZW5BdHRyXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCByZWN1cnNpdmVSZXN1bHQgPSB0aGlzLmZpbmROb2RlKFxyXG4gICAgICAgICAgICBkYXRhW2ldW3RoaXMuY2hpbGRyZW5BdHRyXSxcclxuICAgICAgICAgICAgc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgICAgIGF0dHJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAocmVjdXJzaXZlUmVzdWx0KSByZXN1bHQgPSByZWN1cnNpdmVSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGllIE1ldGhvZGUgZWRpdGllcnQgKHJlY3Vyc2l2ZSkgYWxsZSBlaW5nZWdlYmVuZSBOb2RlcyBhYmjDpG5naWcgdm9uIGdlZ2ViZW5lbiBBdHRpYnV0ZSB1bmQgVmFsdWUgS3JpdGVyaWVuLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlY3Vyc2l2ZUVkaXQobGlzdCwgY2hpbGRyZW5BdHRyLCBhdHRyLCB2YWx1ZSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBsaXN0W2ldW2F0dHJdID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKGxpc3RbaV1bY2hpbGRyZW5BdHRyXS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuX3JlY3Vyc2l2ZUVkaXQobGlzdFtpXVtjaGlsZHJlbkF0dHJdLCBjaGlsZHJlbkF0dHIsIGF0dHIsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBNZXRob2RlIGVyc3RlbGx0IGVpbmUgc3RhbmRhcnRlIFNpY2h0LUxpc3RlIHZvbiBOb2Rlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFByZXBhcmVkRGF0YShsaXN0KSB7XHJcbiAgICBjb25zdCB0cmVlID0gW10sXHJcbiAgICAgIGxvb2t1cCA9IHt9O1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgbG9va3VwW2xpc3RbaV1bdGhpcy5pZEF0dHJdXSA9IGxpc3RbaV07XHJcbiAgICAgIGxpc3RbaV1bdGhpcy5jaGlsZHJlbkF0dHJdID0gW107XHJcbiAgICAgIGxpc3RbaV1bdGhpcy5jb2xsYXBzZUF0dHJdID0gdHJ1ZTtcclxuICAgICAgbGlzdFtpXVt0aGlzLnNlbGVjdEF0dHJdID0gZmFsc2U7XHJcbiAgICAgIGxpc3RbaV1bdGhpcy5pbkRldGVybWluYXRlQXR0cl0gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGlmIChsaXN0W2ldW3RoaXMucGFyZW50QXR0cl0pIHtcclxuICAgICAgICBsb29rdXBbbGlzdFtpXVt0aGlzLnBhcmVudEF0dHJdXVt0aGlzLmNoaWxkcmVuQXR0cl0ucHVzaChsaXN0W2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlLnB1c2gobGlzdFtpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJlZTtcclxuICB9XHJcbn1cclxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEc7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsbUJBQXdCO0lBaUozRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7T0FHRztJQUNILFlBQW9CLFVBQStCLEVBQUUsUUFBa0I7UUFDbkUsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQXpKaEMscUJBQXFCO1FBRXJCOztXQUVHO1FBRUksa0JBQWEsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFeEY7O1dBRUc7UUFFSSxpQkFBWSxHQUFHLFVBQVUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLHNCQUFpQixHQUFHLFVBQVUsQ0FBQztRQUUvQzs7V0FFRztRQUVJLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBRWhDOztXQUVHO1FBRUksbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFFckM7O1dBRUc7UUFFSSxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUV0Qzs7V0FFRztRQUVJLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBRXBDOztXQUVHO1FB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O1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVM7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDN0IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUExWEosU0FBUzs7O1lBUEQsbUJBQW1CLHVCQWlLWCxJQUFJO1lBaEttQixRQUFROzs7NEJBYTNDLE1BQU07MkJBTU4sS0FBSztnQ0FNTCxLQUFLOzBCQUtMLEtBQUs7NkJBTUwsS0FBSzt1QkFNTCxLQUFLO3FCQU1MLEtBQUs7d0JBTUwsS0FBSzsyQkFNTCxLQUFLO3dCQU1MLE1BQU07bUJBTU4sS0FBSzsrQkFNTCxLQUFLOzZCQU1MLEtBQUs7dUJBTUwsTUFBTTs0QkFNTixLQUFLO3lCQU1MLEtBQUs7bUJBTUwsS0FBSzt1QkFNTCxNQUFNOzJCQU1OLE1BQU07K0JBTU4sS0FBSzs2QkFNTCxLQUFLOzRCQU1MLEtBQUs7d0NBTUwsS0FBSzsrQ0FLTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjQmFzZU1vZGVsQ29udHJvbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlbW9kZWxjb250cm9sJztcclxuaW1wb3J0IHsgVHJlZXZpZXdBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RyZWV2aWV3YWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgU2FjRm9ybUxheW91dENvbW1vbiB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0JztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKipcclxuICogQmFzaXMgS29tcG9uZW50ZSBmw7xyIFNhY1RyZWVWaWV3XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIFNhY1RyZWV2aWV3Q29tbW9uIGV4dGVuZHMgU2FjQmFzZU1vZGVsQ29udHJvbDxhbnk+IHtcclxuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiBBY3Rpb24gaXMgY2xpY2tlZCBvbiBOb2RlLiAgQW4gb2JqZWN0IG9mIHRoZSB0eXBlICdUcmVldmlld0FjdGlvbicgaXMgcmV0dXJuZWQuIEluIHRoZSBkZWZhdWx0IGNhc2UsICdhY3Rpb24nIGluIHRoaXMgb2JqZWN0IGlzIGFsd2F5cyB0aGUgdmFsdWUgJ2RlZmF1bHQnLiBUaGUgdmFsdWUgY2FuIGJlIGNoYW5nZWQgdmlhIHRoZSAndGVtcGxhdGVhY3Rpb24nLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhY3Rpb25jbGlja2VkOiBFdmVudEVtaXR0ZXI8VHJlZXZpZXdBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVldmlld0FjdGlvbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG9uIHRoZSBkYXRhIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBjaGlsZHJlbiBvZiB0aGUgc3RydWN0dXJlIGVsZW1lbnQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2NoaWxkcmVuJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJjaGlsZHJlbiA9ICdjaGlsZHJlbic7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgJ2RhdGEnIG9iamVjdCB3aXRoIHdoaWNoIHRoZSBhY3Rpb25zIGZvciBhIG5vZGUgY2FuIGJlIGRlYWN0aXZhdGVkLiBBICdkaXNhYmxlZCcgcHJvcGVydHkgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXR0cmRpc2FibGVhY3Rpb24gPSAnZGlzYWJsZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgb24gdGhlICdkYXRhJyBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIGV4cGFuZGVkIHN0YXRlLiBQcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4gRGVmYXVsdCBpcyAnZXhwYW5kZWQnXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmV4YW5kZWQgPSAnZXhwYW5kZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgZm9yIHNhdmluZyB0aGUgSG92ZXJTdGF0ZSBvbiB0aGUgZmllbGQuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCBvbiB0aGUgbm9kZSwgaXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGFuZCByZW1vdmVkIGFnYWluLiBUaGUgdmFsdWUgY2FuIHVzdWFsbHkgYmUgbGVmdCBhdCB0aGUgZGVmYXVsdCB2YWx1ZSB1bmxlc3MgdGhlcmUgaXMgYSBjb25mbGljdCB3aXRoIGEgcHJvcGVydHkgb24gdGhlIG5vZGUgdGhhdCBpcyByZXF1aXJlZCBmb3Igb3RoZXIgcHVycG9zZXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXR0cmhvdmVyc3RhdGUgPSAnaG92ZXJzdGF0ZSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiAnZGF0YScgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgaWNvbiBmb3IgdGhlIG5vZGUuIEJ5IGRlZmF1bHQsIHRoZSBwcm9wZXJ0eSBpcyBub3Qgc2V0LCB3aGljaCBoaWRlcyB0aGUgaWNvbiBpbiB0aGUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRyaWNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcm9wZXJ0eSBvbiB0aGUgJ2RhdGEnIG9iamVjdCBjb250YWlucyBhbiBJRCBvZiB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgaXMgJ2lkJy4gSWYgdGhlIHByb3BlcnR5IGlzIHNldCB0byBOVUxMLCB0aGUgc2VsZWN0ZWRJZCBldmVudCBpcyBubyBsb25nZXIgdHJpZ2dlcmVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJpZDogc3RyaW5nIHwgbnVsbCA9ICdpZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBvbiAnZGF0YScgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgbGFiZWwgZm9yIHRoZSBub2RlLiBEZWZhdWx0IGlzICdsYWJlbCdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdHRybGFiZWwgPSAnbGFiZWwnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcGVydHkgb24gJ2RhdGEnIG9iamVjdCwgd2hpY2ggZGVmaW5lcyB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkIG9yIG5vdC4gSXQgc2hvdWxkIGJlIGVuc3VyZWQgdGhhdCBvbmx5IDEgbm9kZSBoYXMgdGhlIHZhbHVlIGZvciBTZWxlY3RlZCBzZXQgdG8gdHJ1ZS4gRGVmYXVsdCBpcyAnc2VsZWN0ZWQnLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF0dHJzZWxlY3RlZCA9ICdzZWxlY3RlZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuIFJldHVybnMgdGhlIG5vZGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlclxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjb2xsYWJzZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcHJvcGVydHkgY29udGFpbnMgYW4gYXJyYXkgb2Ygbm9kZXMuIFRoZSBkYXRhIG11c3QgYWxyZWFkeSBtYXAgdGhlIHRyZWUgdmlhIGNoaWxkIHByb3BlcnRpZXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjdGl2YXRlcyB0aGUgJ2V4cGFuZCcgYW5kICdjb2xsYWJzZScgZXZlbnQgZXZlbiBpZiBhIG5vZGUgaGFzIG5vIGNoaWxkcmVuLiBUaGlzIGlzIGhlbHBmdWwgaWYgbm9kZSBlbGVtZW50cyBhcmUgdG8gYmUgcmVsb2FkZWQgYXQgcnVudGltZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBlbmFibGVhc3luY2hsb2FkOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3RpdmF0ZXMgRWxsaXBzaXMgb24gdGhlIG5vZGUgbGFiZWxzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZW5hYmxlZWxsaXBzaXMgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuIFJldHVybnMgdGhlIG5vZGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlclxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgd2hldGhlciBhbiBpY29uIGZvciB0aGUgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXR1cyBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGV4cGFuZGVkc3RhdGU6IGJvb2xlYW4gfCBzdHJpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBub2RlIG11c3QgYmUgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYW1lIG9mIHRoZSBUcmVlVmlldyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC4gUmV0dXJucyB0aGUgaWQgYXR0cmlidXRlIGFzIGEgcGFyYW1ldGVyLiBUaGUgZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBpZiAnYXR0cmlkJyBpcyBub3Qgc2V0LlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkLiBSZXR1cm5zIHRoZSBub2RlIGVsZW1lbnQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkbm9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhhdCB0aGUgYWN0aW9uIHRlbXBsYXRlIGlzIGRpc3BsYXllZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBzZWxlY3RlZCBzdGF0ZS4gSWYgdGhlIHZhbHVlIGlzICd0cnVlJywgdGhlIGFjdGlvbiB0ZW1wbGF0ZSBpcyBkaXNwbGF5ZWQgZm9yIGV2ZXJ5IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd2FjdGlvbmFsd2F5cztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgYWN0aW9ucyBwZXIgbm9kZS4gVGVtcGxhdGUgcGFyYW1ldGVycyBhcmU6ICdub2RlJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRlbXBsYXRlYWN0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgbGFiZWwgYXJlYSBwZXIgbm9kZS4gVGVtcGxhdGUgcGFyYW1ldGVycyBhcmU6ICdub2RlJyBhbmQgJ2xhYmVsJ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRlbXBsYXRlbGFiZWw6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUmVxdWlyZWQgYmVpIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yUmVxdWlyZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUmVxdWlyZWQgaW4gVmFsaWRhdGlvbiBTdW1tYXJ5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeVJlcXVpcmVkO1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gICAgcHVibGljIGdldCBpY29uQWN0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuVHJlZXZpZXdOb2RlQWN0aW9uSWNvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENTUyBpY29uIGZvciBmb2xkZXJzIGluIHRyZWUgdGhlcmUgYXJlIGNvbGxhYnNlZFxyXG4gICAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJDb2xsYWJzZWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5UcmVldmlld05vZGVDbG9zZWRJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXHJcbiAgICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuVHJlZXZpZXdOb2RlRW1wdHlJY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgZXhwYW5kZWRcclxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpY29uRm9sZGVyT3BlbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLlRyZWV2aWV3Tm9kZU9wZW5JY29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGEgY2VydGFpbiBzaXplLiBJcyByZXF1aXJlZCBmb3IgYSBGb3IgaW4gdGhlIFVJLCBhcyBBbmd1bGFyIGRvZXMgbm90IHN1cHBvcnQgY291bnRpbmcgbG9vcHNcclxuICAgICAqIEBwYXJhbSBzaXplIFNpemUgb2YgdGhlIGFycmF5XHJcbiAgICAgKiBAcmV0dXJucyBBcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY291bnQoc2l6ZTogbnVtYmVyKTogQXJyYXk8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoaWxkcmVuKG5vZGU6IGFueSk6IGFueVtdIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IG5vZGVbdGhpcy5hdHRyY2hpbGRyZW5dO1xyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RyaW5nRmllbGQobm9kZTogYW55LCBmaWVsZG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFub2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZmllbGRuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVtmaWVsZG5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzQ2hpbGRyZW4obm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZFN0YXRlKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyZGlzYWJsZWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cmRpc2FibGVhY3Rpb25dO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkU3RhdGUobm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJleGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbdGhpcy5hdHRyZXhhbmRlZF07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzSG92ZXJTdGF0ZShub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmhvdmVyc3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVt0aGlzLmF0dHJob3ZlcnN0YXRlXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTZWxlY3RlZFN0YXRlKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghbm9kZSB8fCAhdGhpcy5hdHRyc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlID0gbm9kZVt0aGlzLmF0dHJzZWxlY3RlZF07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgaXMgY2FsbGVkIGJ5IGNsaWNraW5nIGFuIGFjdGlvblxyXG4gICAgICogQHBhcmFtIGFjdGlvbiBhY3Rpb24gYW5kIG5vZGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQWN0aW9uQ2xpY2tlZChhY3Rpb246IFRyZWV2aWV3QWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25jbGlja2VkLmVtaXQoYWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Ob2RlQ2xpY2tlZChub2RlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkU3RhdGUobm9kZSkgfHwgdGhpcy5pc1NlbGVjdGVkU3RhdGUobm9kZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZlcnRFeHBhbmRlZFN0YXRlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFN0YXRlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRIb3ZlclN0YXRlKG5vZGU6IGFueSwgc3RhdGU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmhvdmVyc3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIG5vZGVbdGhpcy5hdHRyaG92ZXJzdGF0ZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vZGUuaGFzT3duUHJvcGVydHkodGhpcy5hdHRyaG92ZXJzdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVsZXRlIG5vZGVbdGhpcy5hdHRyaG92ZXJzdGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlbGVjdGVkU3RhdGUobm9kZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBzZWxlY3RlZCBzdGF0ZSBvZiBhbnkgbm9kZVxyXG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb290Tm9kZSkgPT4gdGhpcy5yZXNldFNlbGVjdGVkU3RhdGUocm9vdE5vZGUpKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlbGVjdGVkIG5vZGUgYXMgc2VsZWN0ZWRcclxuICAgICAgICBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBuZ01vZGVsXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShub2RlKTtcclxuXHJcbiAgICAgICAgLy8gUmFpc2UgU2VsZWN0ZWQgRXZlbnRzXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZG5vZGUuZW1pdChub2RlKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF0dHJpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaWQgPSB0aGlzLmdldFN0cmluZ0ZpZWxkKG5vZGUsIHRoaXMuYXR0cmlkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc3JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5yZXF1aXJlZCh0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQpKGMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIHByaXZhdGUgaW52ZXJ0RXhwYW5kZWRTdGF0ZShub2RlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIW5vZGUgfHwgIXRoaXMuYXR0cmV4YW5kZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSXRlbXMgd2l0aCBubyBjaGlsZHJlbiBjYW5ub3QgYmUgY29sbGFic2VkXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0NoaWxkcmVuKG5vZGUpICYmICEodGhpcy5lbmFibGVhc3luY2hsb2FkID09PSB0cnVlIHx8IHRoaXMuZW5hYmxlYXN5bmNobG9hZCA9PT0gJ3RydWUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBub2RlW3RoaXMuYXR0cmV4YW5kZWRdO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxhYnNlZC5lbWl0KG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlW3RoaXMuYXR0cmV4YW5kZWRdID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRlZC5lbWl0KG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlW3RoaXMuYXR0cmV4YW5kZWRdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldFNlbGVjdGVkU3RhdGUobm9kZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmF0dHJzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBub2RlW3RoaXMuYXR0cnNlbGVjdGVkXSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdldENoaWxkcmVuKG5vZGUpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFN0YXRlKGNoaWxkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcbiJdfQ==
|