qms-angular 1.0.63 → 1.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +2132 -120
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/enum/data-type.enum.js +14 -0
- package/esm2015/lib/common/enum/document-node-type.enum.js +12 -0
- package/esm2015/lib/common/enum/module-type.enum.js +8 -0
- package/esm2015/lib/common/related.const.js +6 -0
- package/esm2015/lib/components/badges/qms-badges.component.js +7 -4
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +1 -1
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +3 -3
- package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +3 -2
- package/esm2015/lib/components/related/model/related-data.model.js +3 -1
- package/esm2015/lib/components/related/popup/related-popup.component.js +31 -10
- package/esm2015/lib/components/related/risk/analysis/analysis.component.js +1 -3
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +7 -8
- package/esm2015/lib/components/select-one/select-one.component.js +10 -2
- package/esm2015/lib/components/select-process-document/index.js +2 -0
- package/esm2015/lib/components/select-process-document/models/pop-up-data.model.js +13 -0
- package/esm2015/lib/components/select-process-document/models/qms-process-document-item.model.js +3 -0
- package/esm2015/lib/components/select-process-document/models/selected-process-document-item.model.js +3 -0
- package/esm2015/lib/components/select-process-document/public-api.js +7 -0
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +832 -0
- package/esm2015/lib/components/select-process-document/select-process-document.module.js +59 -0
- package/esm2015/lib/components/select-process-document/services/select-process-document-global.service.js +29 -0
- package/esm2015/lib/components/tree/model/tree-config.model.js +1 -1
- package/esm2015/lib/components/tree/tree.component.js +33 -28
- package/esm2015/lib/components/treeNew/index.js +2 -0
- package/esm2015/lib/components/treeNew/model/tree-node.model.js +3 -0
- package/esm2015/lib/components/treeNew/model/tree.model.js +3 -0
- package/esm2015/lib/components/treeNew/public-api.js +5 -0
- package/esm2015/lib/components/treeNew/tree.component.js +785 -0
- package/esm2015/lib/components/treeNew/tree.function.js +97 -0
- package/esm2015/lib/components/treeNew/tree.module.js +51 -0
- package/esm2015/lib/directives/app-bar/app-bar.directive.js +24 -0
- package/esm2015/lib/model/en.js +3 -3
- package/esm2015/lib/model/no.js +3 -3
- package/esm2015/lib/qms-angular.module.js +6 -3
- package/esm2015/public-api.js +8 -1
- package/fesm2015/qms-angular.js +2109 -209
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/enum/data-type.enum.d.ts +12 -0
- package/lib/common/enum/document-node-type.enum.d.ts +10 -0
- package/lib/common/enum/module-type.enum.d.ts +6 -0
- package/lib/common/related.const.d.ts +5 -0
- package/lib/components/badges/qms-badges.component.d.ts +3 -0
- package/lib/components/related/model/related-data.model.d.ts +3 -0
- package/lib/components/related/popup/related-popup.component.d.ts +7 -3
- package/lib/components/select-include-children/select-include-children.component.d.ts +8 -9
- package/lib/components/select-one/select-one.component.d.ts +1 -0
- package/lib/components/select-process-document/index.d.ts +1 -0
- package/lib/components/select-process-document/models/pop-up-data.model.d.ts +17 -0
- package/lib/components/select-process-document/models/qms-process-document-item.model.d.ts +13 -0
- package/lib/components/select-process-document/models/selected-process-document-item.model.d.ts +16 -0
- package/lib/components/select-process-document/public-api.d.ts +6 -0
- package/lib/components/select-process-document/select-process-document.component.d.ts +116 -0
- package/lib/components/select-process-document/select-process-document.module.d.ts +2 -0
- package/lib/components/select-process-document/services/select-process-document-global.service.d.ts +14 -0
- package/lib/components/tree/model/tree-config.model.d.ts +2 -2
- package/lib/components/tree/tree.component.d.ts +1 -2
- package/lib/components/treeNew/index.d.ts +1 -0
- package/lib/components/treeNew/model/tree-node.model.d.ts +8 -0
- package/lib/components/treeNew/model/tree.model.d.ts +11 -0
- package/lib/components/treeNew/public-api.d.ts +4 -0
- package/lib/components/treeNew/tree.component.d.ts +135 -0
- package/lib/components/treeNew/tree.function.d.ts +13 -0
- package/lib/components/treeNew/tree.module.d.ts +2 -0
- package/lib/directives/app-bar/app-bar.directive.d.ts +8 -0
- package/lib.theme.scss +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +7 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/jointjs/scss/bpmn.scss +1 -9
- package/src/assets/jointjs/scss/dist/bpmn.css +854 -0
- package/src/assets/qms-ckeditor-plugin/package-lock.json +12177 -9
- package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +173 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
- package/src/lib/components/badges/_qms-badges-base.scss +7 -2
- package/src/lib/components/breadcrumb/breadcrumb.scss +1 -1
- package/src/lib/components/qms-app-bar/qms-app-bar.component.scss +16 -2
- package/src/lib/components/related/popup/related-popup.component.scss +22 -1
- package/src/lib/components/select-process-document/select-process-document.component.scss +300 -0
- package/src/lib/components/tree/tree.component.scss +4 -6
- package/src/lib/components/treeNew/tree.component.scss +175 -0
- package/src/themes/core/_app-bar.scss +14 -0
@@ -0,0 +1,832 @@
|
|
1
|
+
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Inject, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
2
|
+
import { FormControl } from '@angular/forms';
|
3
|
+
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
4
|
+
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
5
|
+
import { MatIconRegistry } from '@angular/material/icon';
|
6
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
7
|
+
import { Subject } from 'rxjs';
|
8
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
9
|
+
import { DataType } from '../../common/enum/data-type.enum';
|
10
|
+
import { DocumentNodeType } from '../../common/enum/document-node-type.enum';
|
11
|
+
import { ModuleType } from '../../common/enum/module-type.enum';
|
12
|
+
import { RelatedConst } from '../../common/related.const';
|
13
|
+
import { TranslateLibraryService } from '../../services/translation-registry.service';
|
14
|
+
import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
|
15
|
+
import { TreeFlatNode } from '../tree/model/tree-flat-node.model';
|
16
|
+
import { NewTreeModel } from '../treeNew/model/tree.model';
|
17
|
+
import { NewTreeComponent } from '../treeNew/tree.component';
|
18
|
+
import { SelectProcessDocumentPopupData } from './models/pop-up-data.model';
|
19
|
+
import { QMSProcessDocumentItem } from './models/qms-process-document-item.model';
|
20
|
+
import { QMSSelectProcessDocumentGlobalService } from './services/select-process-document-global.service';
|
21
|
+
export class SelectProcessDocumentPopupComponent {
|
22
|
+
constructor(cdRef, translate, dialogRef, globalService, iconRegistry, sanitizer, appIconService, elem, data) {
|
23
|
+
this.cdRef = cdRef;
|
24
|
+
this.translate = translate;
|
25
|
+
this.dialogRef = dialogRef;
|
26
|
+
this.globalService = globalService;
|
27
|
+
this.iconRegistry = iconRegistry;
|
28
|
+
this.sanitizer = sanitizer;
|
29
|
+
this.appIconService = appIconService;
|
30
|
+
this.elem = elem;
|
31
|
+
this.data = data;
|
32
|
+
this.ngUnsubscribe = new Subject();
|
33
|
+
this.moduleId = 0;
|
34
|
+
this.moduleName = '';
|
35
|
+
this.treeData1 = [];
|
36
|
+
this.treeData2 = [];
|
37
|
+
this.checkedNodeList = [];
|
38
|
+
this.selectedNode = [];
|
39
|
+
this.selectedData = [];
|
40
|
+
this.selectedData2 = [];
|
41
|
+
this.commonCheckedList = [];
|
42
|
+
this.documentCheckedList = [];
|
43
|
+
this.singleProcessList = [];
|
44
|
+
this.singleDocumentList = [];
|
45
|
+
this.module = ModuleType;
|
46
|
+
this.dataType = DataType;
|
47
|
+
this.itemType = 0;
|
48
|
+
this.selectedRiskData = [];
|
49
|
+
this.disabledList = [];
|
50
|
+
this.disabledList2 = [];
|
51
|
+
this.isDocumentExpanded = true;
|
52
|
+
this.isCommonExpanded = true;
|
53
|
+
this.singleSelectedNode = false;
|
54
|
+
this.searchOrder = [];
|
55
|
+
this.myControl = new FormControl();
|
56
|
+
this.filteredOptions = [];
|
57
|
+
this.isInputValue = false;
|
58
|
+
this.itemInSplitview = [];
|
59
|
+
this.selectedFolder = null;
|
60
|
+
this.splitViewTitle = null;
|
61
|
+
this.listChildrenSelectOne = [];
|
62
|
+
this.onSearch = new EventEmitter();
|
63
|
+
this.onSelectFolderItem = new EventEmitter();
|
64
|
+
this.onExpandProcessArea = new EventEmitter();
|
65
|
+
this.onExpandFolder = new EventEmitter();
|
66
|
+
this.parentNodeSelected = new TreeFlatNode();
|
67
|
+
this.moduleId = data.moduleId;
|
68
|
+
this.moduleName = data.moduleName;
|
69
|
+
this.treeData1 = data.treeData1;
|
70
|
+
this.treeData2 = data.treeData2;
|
71
|
+
this.treeConfig1 = data.treeConfig1;
|
72
|
+
this.treeConfig2 = data.treeConfig2;
|
73
|
+
this.selectedRiskData = (data === null || data === void 0 ? void 0 : data.selectedNode) || [];
|
74
|
+
this.singleSelectedNode = data.treeConfig1.singleSelectedNode;
|
75
|
+
this.disabledList = data.disabledList || [];
|
76
|
+
this.disabledList2 = data.disabledList2 || [];
|
77
|
+
this.splitView = data.splitView;
|
78
|
+
this.isSelectOne = data.isSelectOne;
|
79
|
+
this.canOnlySelectItem = data.canOnlySelectItem;
|
80
|
+
appIconService.registerProcessIcon(iconRegistry, sanitizer);
|
81
|
+
appIconService.registerProcessAreaIcon(iconRegistry, sanitizer);
|
82
|
+
appIconService.registerDocumentIcon(iconRegistry, sanitizer);
|
83
|
+
appIconService.registerFolderIcon(iconRegistry, sanitizer);
|
84
|
+
}
|
85
|
+
ngOnDestroy() {
|
86
|
+
this.ngUnsubscribe.next();
|
87
|
+
this.ngUnsubscribe.complete();
|
88
|
+
this.globalService.setSearchRelated([]);
|
89
|
+
this.selectedFolder = null;
|
90
|
+
this.globalService.setSplitviewValue([]);
|
91
|
+
}
|
92
|
+
onMessage(event) {
|
93
|
+
if (event.data === RelatedConst.HIDE_SEARCH_RESULT) {
|
94
|
+
// this.autoComplete.closePanel();
|
95
|
+
}
|
96
|
+
}
|
97
|
+
ngOnInit() {
|
98
|
+
this.translate.getLanguageSubject$.pipe().subscribe((res) => {
|
99
|
+
if (res) {
|
100
|
+
this.LANG = this.translate.getObjectLang(res);
|
101
|
+
}
|
102
|
+
});
|
103
|
+
this.globalService.searchRelated.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
|
104
|
+
if (res && res.length) {
|
105
|
+
this.filteredOptions = res;
|
106
|
+
}
|
107
|
+
});
|
108
|
+
this.globalService.splitViewValue.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
|
109
|
+
this.itemInSplitview = res;
|
110
|
+
if (res.length) {
|
111
|
+
let listNodeProcess = [];
|
112
|
+
let listNodeDocs = [];
|
113
|
+
res.forEach(item => {
|
114
|
+
let newNodeProcess = new NewTreeModel();
|
115
|
+
newNodeProcess.id = item.id;
|
116
|
+
newNodeProcess.name = item.itemName;
|
117
|
+
newNodeProcess.displayId = +item.itemNumberId;
|
118
|
+
newNodeProcess.parentId = item.parentId;
|
119
|
+
newNodeProcess.statusId = item.status;
|
120
|
+
if (item.itemType === DataType.process) {
|
121
|
+
listNodeProcess.push(newNodeProcess);
|
122
|
+
}
|
123
|
+
else {
|
124
|
+
let newNodeDocs = new NewTreeModel();
|
125
|
+
newNodeDocs.statusName = item.statusName;
|
126
|
+
listNodeDocs.push(newNodeDocs);
|
127
|
+
}
|
128
|
+
});
|
129
|
+
if (this.checkedNodeList.length) {
|
130
|
+
this.selectedData = [];
|
131
|
+
this.selectedData2 = [];
|
132
|
+
let selectProcess = [];
|
133
|
+
let selectDocument = [];
|
134
|
+
this.checkedNodeList.forEach(x => {
|
135
|
+
const newNode = {
|
136
|
+
disabled: false,
|
137
|
+
expandable: (x.itemType == DataType.area || x.itemType == DataType.folder) ? true : false,
|
138
|
+
hasChild: (x.itemType == DataType.area || x.itemType == DataType.folder) ? true : false,
|
139
|
+
id: x.id,
|
140
|
+
level: 0,
|
141
|
+
levelType: undefined,
|
142
|
+
name: x.itemName,
|
143
|
+
parentId: x.parentId
|
144
|
+
};
|
145
|
+
if (x.itemType === DataType.area || x.itemType === DataType.process) {
|
146
|
+
this.treeData1.forEach(item => {
|
147
|
+
if (item.id && x.id === item.id) {
|
148
|
+
selectProcess.push(newNode);
|
149
|
+
}
|
150
|
+
});
|
151
|
+
}
|
152
|
+
else {
|
153
|
+
this.treeData2.forEach(item => {
|
154
|
+
if (item.id && x.id === item.id) {
|
155
|
+
selectDocument.push(newNode);
|
156
|
+
}
|
157
|
+
});
|
158
|
+
}
|
159
|
+
});
|
160
|
+
this.selectedData = [...this.selectedData, ...selectProcess];
|
161
|
+
this.selectedData2 = [...this.selectedData2, ...selectDocument];
|
162
|
+
}
|
163
|
+
}
|
164
|
+
});
|
165
|
+
this.myControl.valueChanges.pipe(debounceTime(1000)).subscribe((val) => {
|
166
|
+
this.isInputValue = true;
|
167
|
+
this.onSearchRelated(val);
|
168
|
+
});
|
169
|
+
this.globalService.getProcessAreaChildren.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
|
170
|
+
if (res.length > 0 && this.dataTrees) {
|
171
|
+
let notShownChildren = [];
|
172
|
+
res.forEach(x => {
|
173
|
+
const index = this.treeData1.findIndex(item => item.id === x.id && item.parentId === x.parentId && x.expandable == item.expandable);
|
174
|
+
if (index < 0) {
|
175
|
+
notShownChildren.push(x);
|
176
|
+
}
|
177
|
+
});
|
178
|
+
this.treeData1 = [...this.treeData1, ...notShownChildren];
|
179
|
+
}
|
180
|
+
});
|
181
|
+
this.globalService.getFolderChildren.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
|
182
|
+
if (res.length > 0 && this.dataTrees) {
|
183
|
+
let notShownChildren = [];
|
184
|
+
res.forEach(x => {
|
185
|
+
const index = this.treeData2.findIndex(item => item.id === x.id && item.parentId === x.parentId && x.expandable == item.expandable);
|
186
|
+
if (index < 0) {
|
187
|
+
notShownChildren.push(x);
|
188
|
+
}
|
189
|
+
});
|
190
|
+
this.treeData2 = [...this.treeData2, ...notShownChildren];
|
191
|
+
}
|
192
|
+
});
|
193
|
+
this.itemType = this.dataType.process;
|
194
|
+
this.searchOrder = this.getSearchOrder();
|
195
|
+
}
|
196
|
+
ngAfterViewChecked() {
|
197
|
+
}
|
198
|
+
removeCheckedNodeList(item) {
|
199
|
+
this.selectedData = [];
|
200
|
+
this.selectedData2 = [];
|
201
|
+
this.checkedNodeList = this.checkedNodeList.filter(x => (x.id.toLowerCase() !== item.id.toLowerCase() || x.parentId.toLowerCase() !== item.parentId.toLowerCase()));
|
202
|
+
const tempArr = [];
|
203
|
+
const tempArrDocument = [];
|
204
|
+
const newSelectProcessList = [];
|
205
|
+
const newSelectDocumentList = [];
|
206
|
+
this.commonCheckedList.forEach(element => {
|
207
|
+
this.checkedNodeList.forEach(x => {
|
208
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
|
209
|
+
tempArr.push(element);
|
210
|
+
}
|
211
|
+
});
|
212
|
+
});
|
213
|
+
this.singleProcessList.forEach(element => {
|
214
|
+
this.checkedNodeList.forEach(x => {
|
215
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
|
216
|
+
newSelectProcessList.push(element);
|
217
|
+
}
|
218
|
+
});
|
219
|
+
});
|
220
|
+
this.singleProcessList = newSelectProcessList;
|
221
|
+
if (tempArr.length > 0) {
|
222
|
+
this.selectedData = [...tempArr];
|
223
|
+
}
|
224
|
+
this.documentCheckedList.forEach(element => {
|
225
|
+
this.checkedNodeList.forEach(x => {
|
226
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
|
227
|
+
tempArrDocument.push(element);
|
228
|
+
}
|
229
|
+
});
|
230
|
+
});
|
231
|
+
this.singleDocumentList.forEach(element => {
|
232
|
+
this.checkedNodeList.forEach(x => {
|
233
|
+
if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
|
234
|
+
newSelectDocumentList.push(element);
|
235
|
+
}
|
236
|
+
});
|
237
|
+
});
|
238
|
+
this.singleDocumentList = newSelectDocumentList;
|
239
|
+
if (tempArrDocument.length > 0) {
|
240
|
+
this.selectedData2 = [...tempArrDocument];
|
241
|
+
}
|
242
|
+
}
|
243
|
+
setResultHeight(arr) {
|
244
|
+
let maxHeight = 484;
|
245
|
+
const popup_content = document.getElementsByClassName('qmslib_related_popup_content')[0];
|
246
|
+
const line__divider = document.getElementsByClassName('line__divider')[0];
|
247
|
+
if (popup_content && line__divider) {
|
248
|
+
maxHeight = this.getOffsetHeight(popup_content, true) + this.getOffsetHeight(line__divider, true) * 2;
|
249
|
+
}
|
250
|
+
const contentResult = document.getElementsByClassName('cdk-virtual-scroll-content-wrapper')[0];
|
251
|
+
const viewreports = document.getElementsByClassName('related-viewport')[0];
|
252
|
+
if (viewreports) {
|
253
|
+
if (contentResult.offsetHeight <= maxHeight) {
|
254
|
+
viewreports.style.height = `${contentResult.offsetHeight}px`;
|
255
|
+
}
|
256
|
+
else {
|
257
|
+
viewreports.style.height = `${maxHeight}px`;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
}
|
261
|
+
onSearchRelated(_val) {
|
262
|
+
this.filteredOptions = [];
|
263
|
+
if (typeof (_val) === 'object') {
|
264
|
+
this.myControl.setValue('');
|
265
|
+
this.isInputValue = false;
|
266
|
+
}
|
267
|
+
else if (typeof (_val) === 'string') {
|
268
|
+
if (!!_val) {
|
269
|
+
this.onSearch.emit(_val);
|
270
|
+
}
|
271
|
+
}
|
272
|
+
}
|
273
|
+
getModuleFilteredOptions(moduleId) {
|
274
|
+
if (this.listChildrenSelectOne.length) {
|
275
|
+
for (let index = 0; index < this.listChildrenSelectOne.length; index++) {
|
276
|
+
const firstEl = this.listChildrenSelectOne[index];
|
277
|
+
for (let j = 0; j < this.filteredOptions.length; j++) {
|
278
|
+
const secondEl = this.filteredOptions[j];
|
279
|
+
if (firstEl.id === secondEl.id) {
|
280
|
+
this.filteredOptions.splice(j, 1);
|
281
|
+
}
|
282
|
+
}
|
283
|
+
}
|
284
|
+
}
|
285
|
+
return this.filteredOptions.filter(x => x.itemType === moduleId);
|
286
|
+
}
|
287
|
+
showSearchResult() {
|
288
|
+
// this.autoComplete.openPanel();
|
289
|
+
}
|
290
|
+
displayRelated(related) {
|
291
|
+
return related ? related.itemName : undefined;
|
292
|
+
}
|
293
|
+
selectRelated(item) {
|
294
|
+
let index = -1;
|
295
|
+
this.selectedNode = [];
|
296
|
+
if (this.treeConfig1.showCheckBox) {
|
297
|
+
index = this.checkedNodeList.findIndex(x => {
|
298
|
+
return x.id === item.id && x.parentId === item.parentId;
|
299
|
+
});
|
300
|
+
}
|
301
|
+
if (index < 0) {
|
302
|
+
let position = -1;
|
303
|
+
let node;
|
304
|
+
let typeId;
|
305
|
+
if (item.itemType === this.dataType.document) {
|
306
|
+
// document
|
307
|
+
const isExistInDisabled = this.disabledList2.findIndex(x => {
|
308
|
+
return x.id && x.id.toLowerCase() === item.id.toLowerCase();
|
309
|
+
});
|
310
|
+
if (isExistInDisabled >= 0) {
|
311
|
+
return;
|
312
|
+
}
|
313
|
+
position = this.treeData2.findIndex(x => {
|
314
|
+
return x.id === item.id && x.parentId === item.parentId && !x.expandable;
|
315
|
+
});
|
316
|
+
if (position >= 0) {
|
317
|
+
this.addToChecklistNodeAndSelectedData(item);
|
318
|
+
node = this.treeData2[position];
|
319
|
+
typeId = this.dataType.document;
|
320
|
+
const treeNode = {
|
321
|
+
id: node.childId,
|
322
|
+
name: node.childName,
|
323
|
+
children: [],
|
324
|
+
parentId: node.rootId,
|
325
|
+
expandable: false
|
326
|
+
};
|
327
|
+
this.dataTrees.toArray()[1].todoItemSelectionProcessDocument([treeNode]);
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
this.addNodeToTree(item);
|
331
|
+
this.addToChecklistNodeAndSelectedData(item);
|
332
|
+
setTimeout(() => {
|
333
|
+
const treeNode = {
|
334
|
+
id: item.id,
|
335
|
+
name: item.itemName,
|
336
|
+
children: [],
|
337
|
+
parentId: item.parentId,
|
338
|
+
expandable: false
|
339
|
+
};
|
340
|
+
this.dataTrees.toArray()[1].todoItemSelectionProcessDocument([treeNode]);
|
341
|
+
}, 500);
|
342
|
+
}
|
343
|
+
}
|
344
|
+
else if (item.itemType === this.dataType.folder) {
|
345
|
+
position = this.treeData2.findIndex(x => {
|
346
|
+
return x.id.toLowerCase() === item.id.toLowerCase() && (!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase());
|
347
|
+
});
|
348
|
+
typeId = item.itemType;
|
349
|
+
if (position >= 0) {
|
350
|
+
node = this.treeData2[position];
|
351
|
+
const treeNode = {
|
352
|
+
id: node.id,
|
353
|
+
name: node.name,
|
354
|
+
children: [],
|
355
|
+
parentId: node.parentId,
|
356
|
+
expandable: true,
|
357
|
+
};
|
358
|
+
this.dataTrees.toArray()[1].todoFolderSelection([treeNode]);
|
359
|
+
}
|
360
|
+
else {
|
361
|
+
this.addNodeToTree(item);
|
362
|
+
this.addToChecklistNodeAndSelectedData(item);
|
363
|
+
}
|
364
|
+
return;
|
365
|
+
}
|
366
|
+
else if (item.itemType === this.dataType.area) {
|
367
|
+
position = this.treeData1.findIndex(x => {
|
368
|
+
return x.id.toLowerCase() === item.id.toLowerCase() && (!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase()) && x.expandable;
|
369
|
+
});
|
370
|
+
typeId = item.itemType;
|
371
|
+
if (position >= 0) {
|
372
|
+
node = this.treeData1[position];
|
373
|
+
const treeNode = {
|
374
|
+
id: node.id,
|
375
|
+
name: node.name,
|
376
|
+
children: [],
|
377
|
+
parentId: node.parentId,
|
378
|
+
expandable: true
|
379
|
+
};
|
380
|
+
this.dataTrees.toArray()[0].todoFolderSelection([treeNode]);
|
381
|
+
}
|
382
|
+
else {
|
383
|
+
this.addNodeToTree(item);
|
384
|
+
this.addToChecklistNodeAndSelectedData(item);
|
385
|
+
}
|
386
|
+
return;
|
387
|
+
}
|
388
|
+
else {
|
389
|
+
const isExistInDisabled = this.disabledList.findIndex(x => {
|
390
|
+
return x.id.toLowerCase() === item.id.toLowerCase() && (!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase());
|
391
|
+
});
|
392
|
+
if (isExistInDisabled >= 0) {
|
393
|
+
return;
|
394
|
+
}
|
395
|
+
position = this.treeData1.findIndex(x => {
|
396
|
+
return x.id.toLowerCase() === item.id.toLowerCase() && x.parentId.toLowerCase() === item.parentId.toLowerCase() && !x.expandable;
|
397
|
+
});
|
398
|
+
if (position >= 0) {
|
399
|
+
node = this.treeData1[position];
|
400
|
+
typeId = this.itemType;
|
401
|
+
const treeNode = {
|
402
|
+
id: node.childId,
|
403
|
+
name: node.childName,
|
404
|
+
children: [],
|
405
|
+
parentId: node.rootId,
|
406
|
+
expandable: false
|
407
|
+
};
|
408
|
+
this.addToChecklistNodeAndSelectedData(item);
|
409
|
+
this.dataTrees.toArray()[0].todoItemSelectionProcessDocument([treeNode]);
|
410
|
+
}
|
411
|
+
else {
|
412
|
+
this.addNodeToTree(item);
|
413
|
+
this.addToChecklistNodeAndSelectedData(item);
|
414
|
+
setTimeout(() => {
|
415
|
+
const treeNode = {
|
416
|
+
id: item.id,
|
417
|
+
name: item.itemName,
|
418
|
+
children: [],
|
419
|
+
parentId: item.parentId,
|
420
|
+
expandable: false
|
421
|
+
};
|
422
|
+
this.dataTrees.toArray()[0].todoItemSelectionProcessDocument([treeNode]);
|
423
|
+
}, 500);
|
424
|
+
}
|
425
|
+
}
|
426
|
+
}
|
427
|
+
}
|
428
|
+
addNodeToTree(item) {
|
429
|
+
let newNodeDocs = new NewTreeModel();
|
430
|
+
newNodeDocs.id = item.id;
|
431
|
+
newNodeDocs.name = item.itemName;
|
432
|
+
newNodeDocs.parentId = item.parentId;
|
433
|
+
newNodeDocs.statusId = item === null || item === void 0 ? void 0 : item['itemStatus'];
|
434
|
+
newNodeDocs.statusName = item === null || item === void 0 ? void 0 : item['statusName'];
|
435
|
+
newNodeDocs.displayId = +item.itemNumberId;
|
436
|
+
newNodeDocs.expandable = item.itemType == DataType.folder || item.itemType == DataType.area ? true : false;
|
437
|
+
if (item.itemType == DataType.folder || item.itemType == DataType.document) {
|
438
|
+
if (this.treeData2.findIndex(x => x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
439
|
+
(!newNodeDocs.parentId || x.parentId.toLowerCase() === newNodeDocs.parentId.toLowerCase()) && x.expandable === newNodeDocs.expandable) >= 0) {
|
440
|
+
this.treeData2 = [...this.treeData2, newNodeDocs];
|
441
|
+
}
|
442
|
+
}
|
443
|
+
else {
|
444
|
+
if (this.treeData1.findIndex(x => x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
445
|
+
(!newNodeDocs.parentId || x.parentId.toLowerCase() === newNodeDocs.parentId.toLowerCase()) && x.expandable === newNodeDocs.expandable) >= 0) {
|
446
|
+
this.treeData1 = [...this.treeData1, newNodeDocs];
|
447
|
+
}
|
448
|
+
}
|
449
|
+
}
|
450
|
+
addToChecklistNode(item) {
|
451
|
+
let newNodeDocs = new NewTreeModel();
|
452
|
+
newNodeDocs.id = item.id;
|
453
|
+
newNodeDocs.name = item.itemName;
|
454
|
+
newNodeDocs.parentId = item.parentId;
|
455
|
+
newNodeDocs.statusId = item === null || item === void 0 ? void 0 : item['itemStatus'];
|
456
|
+
newNodeDocs.statusName = item === null || item === void 0 ? void 0 : item['statusName'];
|
457
|
+
newNodeDocs.displayId = +item.itemNumberId;
|
458
|
+
newNodeDocs.expandable = item.itemType == DataType.folder || item.itemType == DataType.area ? true : false;
|
459
|
+
if (this.isSelectOne) {
|
460
|
+
this.checkedNodeList = [];
|
461
|
+
this.documentCheckedList = [];
|
462
|
+
this.commonCheckedList = [];
|
463
|
+
}
|
464
|
+
const index = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === newNodeDocs.id.toLowerCase() &&
|
465
|
+
(!newNodeDocs.parentId || x.parentId.toLowerCase() === newNodeDocs.parentId.toLowerCase()) && x.expandable === newNodeDocs.expandable);
|
466
|
+
if (index < 0) {
|
467
|
+
if (item.itemType == DataType.folder || item.itemType == DataType.document) {
|
468
|
+
this.documentCheckedList.push({
|
469
|
+
id: newNodeDocs.id,
|
470
|
+
name: newNodeDocs.name,
|
471
|
+
itemType: item.itemType,
|
472
|
+
parentId: newNodeDocs.parentId,
|
473
|
+
levelType: newNodeDocs.levelType,
|
474
|
+
level: 0,
|
475
|
+
disabled: false,
|
476
|
+
expandable: newNodeDocs.expandable,
|
477
|
+
hasChild: newNodeDocs.expandable
|
478
|
+
});
|
479
|
+
}
|
480
|
+
else {
|
481
|
+
this.commonCheckedList.push({
|
482
|
+
id: newNodeDocs.id,
|
483
|
+
name: newNodeDocs.name,
|
484
|
+
itemType: item.itemType,
|
485
|
+
parentId: newNodeDocs.parentId,
|
486
|
+
levelType: newNodeDocs.levelType,
|
487
|
+
level: 0,
|
488
|
+
disabled: false,
|
489
|
+
expandable: newNodeDocs.expandable,
|
490
|
+
hasChild: newNodeDocs.expandable
|
491
|
+
});
|
492
|
+
}
|
493
|
+
this.checkedNodeList.push({
|
494
|
+
moduleId: this.moduleId,
|
495
|
+
id: item.id,
|
496
|
+
itemName: newNodeDocs.name,
|
497
|
+
itemType: item.itemType,
|
498
|
+
parentId: newNodeDocs.parentId,
|
499
|
+
parentName: item.parentName,
|
500
|
+
itemNumberId: item.itemNumberId,
|
501
|
+
levelType: item.levelType,
|
502
|
+
expandable: newNodeDocs.expandable,
|
503
|
+
statusName: item.statusName,
|
504
|
+
status: item.status,
|
505
|
+
displayId: Number.parseFloat(item.itemNumberId)
|
506
|
+
});
|
507
|
+
}
|
508
|
+
}
|
509
|
+
addSelectedData(item) {
|
510
|
+
const selectProcess = [];
|
511
|
+
const selectDocument = [];
|
512
|
+
this.selectedData = [];
|
513
|
+
this.selectedData2 = [];
|
514
|
+
if (this.checkedNodeList.length) {
|
515
|
+
this.checkedNodeList.forEach(x => {
|
516
|
+
const node = {
|
517
|
+
disabled: false,
|
518
|
+
expandable: x.itemType == DataType.area || x.itemType == DataType.folder ? true : false,
|
519
|
+
hasChild: x.itemType == DataType.area || x.itemType == DataType.folder ? true : false,
|
520
|
+
id: x.id,
|
521
|
+
level: 0,
|
522
|
+
levelType: undefined,
|
523
|
+
name: x.itemName,
|
524
|
+
parentId: x.parentId
|
525
|
+
};
|
526
|
+
if (x.itemType === DataType.area || x.itemType === DataType.process) {
|
527
|
+
this.treeData1.forEach(item => {
|
528
|
+
if (item.id && x.id.toLowerCase() === item.id.toLowerCase() &&
|
529
|
+
(!x.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase())) {
|
530
|
+
selectProcess.push(node);
|
531
|
+
}
|
532
|
+
});
|
533
|
+
}
|
534
|
+
else {
|
535
|
+
this.treeData2.forEach(item => {
|
536
|
+
if (item.id && x.id.toLowerCase() === item.id.toLowerCase() &&
|
537
|
+
(!x.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase())) {
|
538
|
+
selectDocument.push(node);
|
539
|
+
}
|
540
|
+
});
|
541
|
+
}
|
542
|
+
});
|
543
|
+
}
|
544
|
+
if (!this.isSelectOne) {
|
545
|
+
this.selectedData = [...this.selectedData, ...selectProcess];
|
546
|
+
this.selectedData2 = [...this.selectedData2, ...selectDocument];
|
547
|
+
}
|
548
|
+
if (item.itemType === DataType.folder || item.itemType === DataType.document) {
|
549
|
+
if (this.selectedData2.findIndex(x => x.id.toLowerCase() === item.id.toLowerCase() &&
|
550
|
+
(!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase()) && x.expandable === item.expandable) < 0) {
|
551
|
+
this.selectedData2 = [...this.selectedData2, item];
|
552
|
+
}
|
553
|
+
}
|
554
|
+
else {
|
555
|
+
if (this.selectedData.findIndex(x => x.id.toLowerCase() === item.id.toLowerCase() &&
|
556
|
+
(!item.parentId || x.parentId.toLowerCase() === item.parentId.toLowerCase()) && x.expandable === item.expandable) < 0) {
|
557
|
+
this.selectedData = [...this.selectedData, item];
|
558
|
+
}
|
559
|
+
}
|
560
|
+
}
|
561
|
+
addToChecklistNodeAndSelectedData(item) {
|
562
|
+
this.addToChecklistNode(item);
|
563
|
+
this.addSelectedData({
|
564
|
+
id: item.id,
|
565
|
+
name: item.itemName,
|
566
|
+
expandable: item.itemType == DataType.area || item.itemType == DataType.folder,
|
567
|
+
level: 0,
|
568
|
+
disabled: false,
|
569
|
+
hasChild: item.itemType == DataType.area || item.itemType == DataType.folder,
|
570
|
+
});
|
571
|
+
}
|
572
|
+
setTypeProcess(expand) {
|
573
|
+
return expand ? this.dataType.area : this.dataType.process;
|
574
|
+
}
|
575
|
+
onCloseClick() {
|
576
|
+
this.selectedFolder = null;
|
577
|
+
this.itemInSplitview = [];
|
578
|
+
this.dialogRef.close();
|
579
|
+
}
|
580
|
+
;
|
581
|
+
onAddClick() {
|
582
|
+
// if (this.treeConfig1.showCheckBox) {
|
583
|
+
this.selectedFolder = null;
|
584
|
+
this.itemInSplitview = [];
|
585
|
+
this.dialogRef.close(this.checkedNodeList);
|
586
|
+
}
|
587
|
+
getStatusName(id) {
|
588
|
+
let statusName = '';
|
589
|
+
this.treeData2.forEach(x => {
|
590
|
+
if (id.toString() === x.id) {
|
591
|
+
statusName = x.statusName;
|
592
|
+
}
|
593
|
+
});
|
594
|
+
return statusName;
|
595
|
+
}
|
596
|
+
selectTreeControlNodeDocument(treeNodes) {
|
597
|
+
this.treeControlNodeDocument = null;
|
598
|
+
this.treeControlNodeDocument = treeNodes;
|
599
|
+
this.treeControlNodeDocument.dataNodes = this.treeControlNodeDocument.dataNodes.filter(x => x.name !== null && x.name !== '');
|
600
|
+
}
|
601
|
+
selectTreeControlNodeProcess(treeNodes) {
|
602
|
+
this.treeControlNodeProcess = null;
|
603
|
+
this.treeControlNodeProcess = treeNodes;
|
604
|
+
this.treeControlNodeProcess.dataNodes = this.treeControlNodeProcess.dataNodes.filter(x => x.name !== null && x.name !== '');
|
605
|
+
}
|
606
|
+
getStatusDocs(id) {
|
607
|
+
return this.treeData2.filter(x => x.id === id)[0].statusId;
|
608
|
+
}
|
609
|
+
getStatusProcess(id) {
|
610
|
+
return this.treeData1.filter(x => x.id === id)[0].statusId;
|
611
|
+
}
|
612
|
+
getOffsetHeight(element, includeMargin) {
|
613
|
+
let elmHeight = 0, elmMargin = 0;
|
614
|
+
elmHeight = element.offsetHeight;
|
615
|
+
if (includeMargin) {
|
616
|
+
const style = window.getComputedStyle(element);
|
617
|
+
elmMargin = parseFloat(style.marginTop.replace('px', '')) + parseFloat(style.marginBottom.replace('px', ''));
|
618
|
+
}
|
619
|
+
return (elmHeight + elmMargin);
|
620
|
+
}
|
621
|
+
getItemChipName(item) {
|
622
|
+
return item.itemName;
|
623
|
+
}
|
624
|
+
isEllipsisActive(e) {
|
625
|
+
return e ? (e.clientWidth < e.scrollWidth) : false;
|
626
|
+
}
|
627
|
+
getNodeIcon(item) {
|
628
|
+
switch (item.itemType) {
|
629
|
+
case DataType.folder: {
|
630
|
+
switch (item.levelType) {
|
631
|
+
case DocumentNodeType.DepartmentFolder:
|
632
|
+
return 'department_folder_outlined';
|
633
|
+
case DocumentNodeType.RegionalFolder:
|
634
|
+
return 'regional_folder_outlined';
|
635
|
+
case DocumentNodeType.TopFolder:
|
636
|
+
return 'enterprise_folder_outlined';
|
637
|
+
case DocumentNodeType.Folder:
|
638
|
+
return 'local_folder_outlined';
|
639
|
+
default:
|
640
|
+
return 'folder_outlined';
|
641
|
+
}
|
642
|
+
}
|
643
|
+
case DataType.document: {
|
644
|
+
switch (item.levelType) {
|
645
|
+
case DocumentNodeType.DepartmentFolder:
|
646
|
+
return 'document_department';
|
647
|
+
case DocumentNodeType.RegionalFolder:
|
648
|
+
return 'document_regional';
|
649
|
+
case DocumentNodeType.TopFolder:
|
650
|
+
return 'document_enterprise';
|
651
|
+
case DocumentNodeType.Folder:
|
652
|
+
return 'document_local';
|
653
|
+
default:
|
654
|
+
return 'document';
|
655
|
+
}
|
656
|
+
}
|
657
|
+
case DataType.area:
|
658
|
+
return 'process_area_outlined';
|
659
|
+
case DataType.process:
|
660
|
+
return 'process';
|
661
|
+
default:
|
662
|
+
return 'folder_outlined';
|
663
|
+
}
|
664
|
+
}
|
665
|
+
getSearchOrder() {
|
666
|
+
let searchTypes = Object.keys(this.dataType)
|
667
|
+
.map(key => ({ value: this.dataType[key], key: key }));
|
668
|
+
searchTypes = searchTypes.slice(searchTypes.length / 2);
|
669
|
+
return searchTypes;
|
670
|
+
}
|
671
|
+
getTitle(type) {
|
672
|
+
switch (type) {
|
673
|
+
case DataType.process:
|
674
|
+
return this.LANG.PROCESSES;
|
675
|
+
case DataType.area:
|
676
|
+
return this.LANG.PROCESS_AREA;
|
677
|
+
case DataType.document:
|
678
|
+
return this.LANG.DOCUMENTS;
|
679
|
+
case DataType.folder:
|
680
|
+
return this.LANG.FOLDER;
|
681
|
+
}
|
682
|
+
}
|
683
|
+
getItemId(item) {
|
684
|
+
if (item.itemType === this.dataType.process) {
|
685
|
+
return `${this.LANG.PROCESS_ID}: ${item.itemNumberId}; ${item.statusName}`;
|
686
|
+
}
|
687
|
+
else if (item.itemType === this.dataType.document) {
|
688
|
+
return `${this.LANG.DOCUMENT_ID}: ${item.itemNumberId}; ${item.statusName}`;
|
689
|
+
}
|
690
|
+
return null;
|
691
|
+
}
|
692
|
+
toggleSelectItem(node) {
|
693
|
+
const selectedNode = this.checkedNodeList.find(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
|
694
|
+
if (selectedNode) {
|
695
|
+
this.removeCheckedNodeList({
|
696
|
+
id: selectedNode.id,
|
697
|
+
itemName: node.itemName,
|
698
|
+
parentId: selectedNode.parentId,
|
699
|
+
expandable: false,
|
700
|
+
itemType: selectedNode.itemType,
|
701
|
+
moduleId: this.moduleId,
|
702
|
+
itemNumberId: selectedNode.itemNumberId
|
703
|
+
});
|
704
|
+
}
|
705
|
+
else {
|
706
|
+
this.selectRelated(node);
|
707
|
+
}
|
708
|
+
}
|
709
|
+
isNodeSelected(node) {
|
710
|
+
return this.checkedNodeList.filter(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase())).length > 0;
|
711
|
+
}
|
712
|
+
getChildrenOfFolder(node, type) {
|
713
|
+
let item = new QMSProcessDocumentItem();
|
714
|
+
item.id = node.id;
|
715
|
+
item.itemType = type;
|
716
|
+
item.itemName = node.name;
|
717
|
+
item.levelType = node.levelType;
|
718
|
+
this.selectedFolder = node;
|
719
|
+
this.parentNodeSelected = new TreeFlatNode();
|
720
|
+
this.parentNodeSelected = Object.assign({}, node);
|
721
|
+
if (item.itemType == DataType.area)
|
722
|
+
this.onExpandProcessArea.emit(item);
|
723
|
+
else
|
724
|
+
this.onExpandFolder.emit(item);
|
725
|
+
}
|
726
|
+
canShowSearchOption(moduleId) {
|
727
|
+
return this.getModuleFilteredOptions(moduleId).length > 0;
|
728
|
+
}
|
729
|
+
selectNodeTreeEvent(node) {
|
730
|
+
if (!node.itemType) {
|
731
|
+
return;
|
732
|
+
}
|
733
|
+
const index = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === node.id.toLowerCase()
|
734
|
+
&& (!node.parentId || x.parentId.toLowerCase() === node.parentId.toLowerCase()) && x.itemType == node.itemType);
|
735
|
+
if (index >= 0) {
|
736
|
+
this.removeCheckedNodeList({
|
737
|
+
id: node.id,
|
738
|
+
itemName: node.name,
|
739
|
+
parentId: node.parentId,
|
740
|
+
expandable: false,
|
741
|
+
itemType: node.itemType,
|
742
|
+
moduleId: this.moduleId,
|
743
|
+
itemNumberId: node.id
|
744
|
+
});
|
745
|
+
return;
|
746
|
+
}
|
747
|
+
else {
|
748
|
+
let item;
|
749
|
+
let status = 0;
|
750
|
+
let statusName = '';
|
751
|
+
if (node.itemType == DataType.folder || node.itemType == DataType.document) {
|
752
|
+
item = this.treeData2.find(x => x.id.toLowerCase() === node.id.toLowerCase()
|
753
|
+
&& (!node.parentId || x.parentId.toLowerCase() === node.parentId.toLowerCase()) && x.expandable == node.expandable);
|
754
|
+
}
|
755
|
+
else {
|
756
|
+
item = this.treeData1.find(x => x.id.toLowerCase() === node.id.toLowerCase()
|
757
|
+
&& (!node.parentId || x.parentId.toLowerCase() === node.parentId.toLowerCase()) && x.expandable == node.expandable);
|
758
|
+
}
|
759
|
+
if (item) {
|
760
|
+
statusName = item.statusName;
|
761
|
+
status = item.statusId;
|
762
|
+
}
|
763
|
+
this.addToChecklistNode({
|
764
|
+
id: node.id,
|
765
|
+
itemName: node.name,
|
766
|
+
parentId: node.parentId,
|
767
|
+
itemType: node.itemType,
|
768
|
+
status: status,
|
769
|
+
statusName: statusName,
|
770
|
+
itemNumberId: item.displayId.toString(),
|
771
|
+
levelType: item.levelType
|
772
|
+
});
|
773
|
+
this.addSelectedData(node);
|
774
|
+
}
|
775
|
+
}
|
776
|
+
getChildNodeSelectOne(listChildren) {
|
777
|
+
this.listChildrenSelectOne = [];
|
778
|
+
this.listChildrenSelectOne = listChildren;
|
779
|
+
}
|
780
|
+
getItemOfFolder(node, type) {
|
781
|
+
if (this.splitView) {
|
782
|
+
const parentTexts = this.elem.nativeElement.querySelectorAll('.text-node-parent');
|
783
|
+
[].forEach.call(parentTexts, (el) => {
|
784
|
+
el.classList.remove('active-item');
|
785
|
+
});
|
786
|
+
const itemElement = document.querySelectorAll(`#_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
|
787
|
+
[].forEach.call(itemElement, (el) => {
|
788
|
+
el.classList.add('active-item');
|
789
|
+
});
|
790
|
+
if (type === this.dataType.folder) {
|
791
|
+
this.splitViewTitle = `${this.LANG.MESSAGE.DOCUMENTS_IN.toUpperCase()} "${node.name}"`;
|
792
|
+
}
|
793
|
+
else if (type === this.dataType.area) {
|
794
|
+
this.splitViewTitle = `${this.LANG.MESSAGE.PROCESSES_IN.toUpperCase()} "${node.name}"`;
|
795
|
+
}
|
796
|
+
let item = new QMSProcessDocumentItem();
|
797
|
+
item.id = node.id;
|
798
|
+
item.itemType = type;
|
799
|
+
item.itemName = node.name;
|
800
|
+
item.levelType = node.levelType;
|
801
|
+
this.selectedFolder = node;
|
802
|
+
this.parentNodeSelected = new TreeFlatNode();
|
803
|
+
this.parentNodeSelected = Object.assign({}, node);
|
804
|
+
this.onSelectFolderItem.emit(item);
|
805
|
+
}
|
806
|
+
}
|
807
|
+
}
|
808
|
+
SelectProcessDocumentPopupComponent.decorators = [
|
809
|
+
{ type: Component, args: [{
|
810
|
+
selector: 'qms-select-process-document',
|
811
|
+
template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ moduleName | uppercase }}</span>\r\n </div>\r\n </div>\r\n \r\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n \r\n <div class=\"line__divider\"></div>\r\n \r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n [class.related-viewport]=\"isInputValue\"\r\n >\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"canShowSearchOption(type.value)\"\r\n >\r\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\r\n [value]=\"option\"\r\n (click)=\"selectRelated(option)\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n type=\"image-square\"\r\n [svgIcon]=\"getNodeIcon(option)\"\r\n ></mat-icon>\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div\r\n class=\"caption\"\r\n *ngIf=\"option.breadcumbs && option.breadcumbs.length\"\r\n >\r\n <qms-breadcrumb\r\n class=\"breadcrumb-containe\"\r\n type=\"table\"\r\n numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\"\r\n >\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n \r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length,\r\n 'col-6': splitView,\r\n 'col-12': !splitView\r\n }\"\r\n >\r\n <mat-expansion-panel\r\n hideToggle\r\n id=\"qmslib_related_popup_common_001\"\r\n [expanded]=\"isCommonExpanded\"\r\n (opened)=\"isCommonExpanded = true\"\r\n (closed)=\"isCommonExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\r\n {{ LANG.PROCESSES | uppercase }}\r\n </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData1\"\r\n [treeConfig]=\"treeConfig1\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n \r\n <div\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n class=\"line__divider\"\r\n ></div>\r\n \r\n <mat-expansion-panel\r\n hideToggle\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n id=\"qmslib_related_popup_document_001\"\r\n [expanded]=\"isDocumentExpanded\"\r\n (opened)=\"isDocumentExpanded = true\"\r\n (closed)=\"isDocumentExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title> {{ LANG.DOCUMENTS | uppercase }} </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isDocumentExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_document_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData2\"\r\n [treeConfig]=\"treeConfig2\"\r\n [selectedData]=\"selectedData2\"\r\n [disabledList]=\"disabledList2\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n <div\r\n *ngIf=\"splitView\"\r\n class=\"\r\n qms-scrollbar\r\n qmslib-related-popup-splitview qmslib_related_popup_content\r\n col-6\r\n \"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\"\r\n >\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\"\r\n ></mat-checkbox>\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n ></mat-icon>\r\n <span class=\"text-node\">{{ node.itemName }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>{{\r\n getItemChipName(item)\r\n }}</span>\r\n <mat-icon\r\n *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"line__divider\"></div>\r\n \r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n ",
|
812
|
+
encapsulation: ViewEncapsulation.None,
|
813
|
+
styles: [".qms-scrollbar::-webkit-scrollbar{width:12px}.qms-scrollbar::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms-scrollbar.none-scroll-bg::-webkit-scrollbar-track{background:transparent;background-clip:content-box}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:#fff;padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:#9e360f;margin-left:10px}.qms__danger .yellow{background-color:#e4cf53;margin-left:10px;color:#323232}.qms__danger .green{background-color:#00804c;margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:#f8f9f9}.confirm__button__groups .confirm:hover{background:#001983;color:#fff}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:#f8f9f9}.confirm__button__groups .cancel:hover{background:#001983;color:#fff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:#eee}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:#e5e5e5;max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:#8e8e8e;font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{height:30px;font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:10.25rem}"]
|
814
|
+
},] }
|
815
|
+
];
|
816
|
+
SelectProcessDocumentPopupComponent.ctorParameters = () => [
|
817
|
+
{ type: ChangeDetectorRef },
|
818
|
+
{ type: TranslateLibraryService },
|
819
|
+
{ type: MatDialogRef },
|
820
|
+
{ type: QMSSelectProcessDocumentGlobalService },
|
821
|
+
{ type: MatIconRegistry },
|
822
|
+
{ type: DomSanitizer },
|
823
|
+
{ type: QMSIconRegistryService },
|
824
|
+
{ type: ElementRef },
|
825
|
+
{ type: SelectProcessDocumentPopupData, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
|
826
|
+
];
|
827
|
+
SelectProcessDocumentPopupComponent.propDecorators = {
|
828
|
+
dataTrees: [{ type: ViewChildren, args: [NewTreeComponent, {},] }],
|
829
|
+
autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
|
830
|
+
onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
|
831
|
+
};
|
832
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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YSxDQUFDLElBQTRCO1FBQ3RDLElBQUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDNUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDOUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0MsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRyxJQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUM7WUFDdEUsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BGLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsQ0FB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QWtCLHFCQUFRLElBQUksQ0FBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDOzs7WUFuM0JKLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2Qyx5cVRBQXVEO2dCQUV2RCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OztZQWhDMEIsaUJBQWlCO1lBWW5DLHVCQUF1QjtZQVR2QixZQUFZO1lBcUJaLHFDQUFxQztZQXBCckMsZUFBZTtZQUNmLFlBQVk7WUFRWixzQkFBc0I7WUFiMEIsVUFBVTtZQXFCMUQsOEJBQThCLHVCQThFOUIsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGdCQUFnQixFQUFFLEVBQUU7MkJBRWpDLFNBQVMsU0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQXdDbkYsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSSwgUCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBSZWxhdGVkQ29uc3QgfSBmcm9tICcuLi8uLi9jb21tb24vcmVsYXRlZC5jb25zdCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVGbGF0Tm9kZSB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgTmV3VHJlZU5vZGUgfSBmcm9tICcuLi90cmVlTmV3L21vZGVsL3RyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IE5ld1RyZWVNb2RlbCB9IGZyb20gJy4uL3RyZWVOZXcvbW9kZWwvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IE5ld1RyZWVDb21wb25lbnQgfSBmcm9tICcuLi90cmVlTmV3L3RyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvcG9wLXVwLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtIH0gZnJvbSAnLi9tb2RlbHMvcW1zLXByb2Nlc3MtZG9jdW1lbnQtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGVkLXByb2Nlc3MtZG9jdW1lbnQtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LWdsb2JhbC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gICAgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgTEFORzogYW55O1xyXG4gICAgbW9kdWxlSWQgPSAwO1xyXG4gICAgbW9kdWxlTmFtZSA9ICcnO1xyXG4gICAgdHJlZURhdGExOiBBcnJheTxOZXdUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlRGF0YTI6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcclxuICAgIHRyZWVDb25maWcxOiBUcmVlQ29uZmlnO1xyXG4gICAgdHJlZUNvbmZpZzI6IFRyZWVDb25maWc7XHJcblxyXG4gICAgY2hlY2tlZE5vZGVMaXN0OiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgICBzZWxlY3RlZE5vZGU6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWREYXRhMjogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICAgIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcbiAgICBkb2N1bWVudENoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcbiAgICBzaW5nbGVQcm9jZXNzTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc2luZ2xlRG9jdW1lbnRMaXN0OiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgICBzcGxpdFZpZXc6IGJvb2xlYW47XHJcblxyXG4gICAgbW9kdWxlID0gTW9kdWxlVHlwZTtcclxuICAgIGRhdGFUeXBlID0gRGF0YVR5cGU7XHJcbiAgICBpdGVtVHlwZSA9IDA7XHJcbiAgICBzZWxlY3RlZFJpc2tEYXRhOiBhbnkgPSBbXTtcclxuICAgIGRpc2FibGVkTGlzdDogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3QyOiBhbnkgPSBbXTtcclxuICAgIGlzU2VsZWN0T25lOiBib29sZWFuO1xyXG4gICAgY2FuT25seVNlbGVjdEl0ZW06IGJvb2xlYW47XHJcblxyXG4gICAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIGlzQ29tbW9uRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgc2luZ2xlU2VsZWN0ZWROb2RlID0gZmFsc2U7XHJcbiAgICBzZWFyY2hPcmRlciA9IFtdO1xyXG5cclxuICAgIG15Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgZmlsdGVyZWRPcHRpb25zOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcclxuICAgIGlzSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGl0ZW1JblNwbGl0dmlldzogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XHJcbiAgICBzZWxlY3RlZEZvbGRlcjogVHJlZUZsYXROb2RlID0gbnVsbDtcclxuICAgIHNwbGl0Vmlld1RpdGxlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuXHJcbiAgICBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIG9uU2VsZWN0Rm9sZGVySXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TUHJvY2Vzc0RvY3VtZW50SXRlbT4oKTtcclxuICAgIG9uRXhwYW5kUHJvY2Vzc0FyZWEgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgICBvbkV4cGFuZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TUHJvY2Vzc0RvY3VtZW50SXRlbT4oKTtcclxuICAgIHBhcmVudE5vZGVTZWxlY3RlZCA9IG5ldyBUcmVlRmxhdE5vZGUoKTtcclxuICAgIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcclxuICAgIHRyZWVDb250cm9sTm9kZURvY3VtZW50OiBhbnk7XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihOZXdUcmVlQ29tcG9uZW50LCB7fSkgZGF0YVRyZWVzOiBRdWVyeUxpc3Q8TmV3VHJlZUNvbXBvbmVudD47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlSW5wdXRTZWFyY2gnLCB7IHJlYWQ6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsIHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgYXV0b0NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50PixcclxuICAgICAgICBwdWJsaWMgZ2xvYmFsU2VydmljZTogUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGVsZW06IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGFcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubW9kdWxlSWQgPSBkYXRhLm1vZHVsZUlkO1xyXG4gICAgICAgIHRoaXMubW9kdWxlTmFtZSA9IGRhdGEubW9kdWxlTmFtZTtcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IGRhdGEudHJlZURhdGExO1xyXG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gZGF0YS50cmVlRGF0YTI7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnMiA9IGRhdGEudHJlZUNvbmZpZzI7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhID0gZGF0YT8uc2VsZWN0ZWROb2RlIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdDIgPSBkYXRhLmRpc2FibGVkTGlzdDIgfHwgW107XHJcbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSBkYXRhLnNwbGl0VmlldztcclxuICAgICAgICB0aGlzLmlzU2VsZWN0T25lID0gZGF0YS5pc1NlbGVjdE9uZTtcclxuICAgICAgICB0aGlzLmNhbk9ubHlTZWxlY3RJdGVtID0gZGF0YS5jYW5Pbmx5U2VsZWN0SXRlbTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gUmVsYXRlZENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNwbGl0Vmlld1ZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbUluU3BsaXR2aWV3ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAocmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpc3ROb2RlUHJvY2VzczogTmV3VHJlZU1vZGVsW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IE5ld1RyZWVNb2RlbFtdID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGVQcm9jZXNzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MucGFyZW50SWQgPSBpdGVtLnBhcmVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGVQcm9jZXNzLnB1c2gobmV3Tm9kZVByb2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOb2RlRG9jcyA9IG5ldyBOZXdUcmVlTW9kZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzTmFtZSA9IGl0ZW0uc3RhdHVzTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0UHJvY2VzczogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogKHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcikgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguaXRlbVR5cGUgPT09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MucHVzaChuZXdOb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQgPT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5ld05vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCAuLi5zZWxlY3REb2N1bWVudF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvY2Vzc0FyZWFDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMubGVuZ3RoID4gMCAmJiB0aGlzLmRhdGFUcmVlcyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm90U2hvd25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCAmJiBpdGVtLnBhcmVudElkID09PSB4LnBhcmVudElkICYmIHguZXhwYW5kYWJsZSA9PSBpdGVtLmV4cGFuZGFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIC4uLm5vdFNob3duQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMubGVuZ3RoID4gMCAmJiB0aGlzLmRhdGFUcmVlcyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm90U2hvd25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCAmJiBpdGVtLnBhcmVudElkID09PSB4LnBhcmVudElkICYmIHguZXhwYW5kYWJsZSA9PSBpdGVtLmV4cGFuZGFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIC4uLm5vdFNob3duQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hPcmRlciA9IHRoaXMuZ2V0U2VhcmNoT3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgY29uc3QgdGVtcEFyciA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBBcnJEb2N1bWVudCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgdGVtcEFyci5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0UHJvY2Vzc0xpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QgPSBuZXdTZWxlY3RQcm9jZXNzTGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50ZW1wQXJyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcEFyckRvY3VtZW50LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0RG9jdW1lbnRMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0ID0gbmV3U2VsZWN0RG9jdW1lbnRMaXN0O1xyXG4gICAgICAgIGlmKHRlbXBBcnJEb2N1bWVudC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRlbXBBcnJEb2N1bWVudF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFJlc3VsdEhlaWdodChhcnI/OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10pIHtcclxuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gNDg0O1xyXG4gICAgICAgIGNvbnN0IHBvcHVwX2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAocG9wdXBfY29udGVudCAmJiBsaW5lX19kaXZpZGVyKSB7XHJcbiAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodmlld3JlcG9ydHMpIHtcclxuICAgICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0fXB4YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLm15Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoISFfdmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEVsID0gdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmVbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZEVsID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RWwuaWQgPT09IHNlY29uZEVsLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbHRlcih4ID0+IHguaXRlbVR5cGUgPT09IG1vZHVsZUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gcmVsYXRlZCA/IHJlbGF0ZWQuaXRlbU5hbWUgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0UmVsYXRlZChpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlQ29uZmlnMS5zaG93Q2hlY2tCb3gpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb24gPSAtMTtcclxuICAgICAgICAgICAgbGV0IG5vZGU6IGFueTtcclxuICAgICAgICAgICAgbGV0IHR5cGVJZDogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvY3VtZW50ICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhpc3RJbkRpc2FibGVkID0gdGhpcy5kaXNhYmxlZExpc3QyLmZpbmRJbmRleCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQgJiYgIXguZXhwYW5kYWJsZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMudHJlZURhdGEyW3Bvc2l0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlSWQgPSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMV0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTm9kZVRvVHJlZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVsxXS50b2RvSXRlbVNlbGVjdGlvblByb2Nlc3NEb2N1bWVudChbdHJlZU5vZGVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5mb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0eXBlSWQgPSBpdGVtLml0ZW1UeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTJbcG9zaXRpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzFdLnRvZG9Gb2xkZXJTZWxlY3Rpb24oW3RyZWVOb2RlXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTm9kZVRvVHJlZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEpIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdHlwZUlkID0gaXRlbS5pdGVtVHlwZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0ZvbGRlclNlbGVjdGlvbihbdHJlZU5vZGVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROb2RlVG9UcmVlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpICYmICF4LmV4cGFuZGFibGU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlSWQgPSB0aGlzLml0ZW1UeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTm9kZVRvVHJlZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50b2RvSXRlbVNlbGVjdGlvblByb2Nlc3NEb2N1bWVudChbdHJlZU5vZGVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZE5vZGVUb1RyZWUoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSl7XHJcbiAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCAgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICBpZihpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KXtcclxuICAgICAgICAgICAgaWYodGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQudG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBuZXdOb2RlRG9jcy5leHBhbmRhYmxlICkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IFsuLi50aGlzLnRyZWVEYXRhMiwgbmV3Tm9kZURvY3NdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgKCFuZXdOb2RlRG9jcy5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApID49IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIG5ld05vZGVEb2NzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NoZWNrbGlzdE5vZGUoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSl7XHJcbiAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCAgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgKCFuZXdOb2RlRG9jcy5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApO1xyXG4gICAgICAgIGlmKGluZGV4IDwgMCl7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXdOb2RlRG9jcy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBuZXdOb2RlRG9jcy5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogaXRlbS5wYXJlbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLml0ZW1OdW1iZXJJZCxcclxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogaXRlbS5zdGF0dXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogTnVtYmVyLnBhcnNlRmxvYXQoaXRlbS5pdGVtTnVtYmVySWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhZGRTZWxlY3RlZERhdGEoaXRlbTogVHJlZUZsYXROb2RlKXtcclxuICAgICAgICBjb25zdCBzZWxlY3RQcm9jZXNzID0gW107XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0RG9jdW1lbnQgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UHJvY2Vzcy5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdERvY3VtZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuaXNTZWxlY3RPbmUpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2Vzc107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWREYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCBpdGVtXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pe1xyXG4gICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcclxuICAgICAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG9uQWRkQ2xpY2soKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzTmFtZShpZCkge1xyXG4gICAgICAgIGxldCBzdGF0dXNOYW1lID0gJydcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdHVzTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVEb2N1bWVudCh0cmVlTm9kZXMpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQuZGF0YU5vZGVzID0gdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKHRyZWVOb2Rlcykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzLmZpbHRlcih4ID0+IHgubmFtZSAhPT0gbnVsbCAmJiB4Lm5hbWUgIT09ICcnKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzRG9jcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzUHJvY2VzcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMS5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcclxuXHJcbiAgICAgICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgIGVsbU1hcmdpbiA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wLnJlcGxhY2UoJ3B4JywgJycpKSArIHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tLnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vZGVJY29uKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5EZXBhcnRtZW50Rm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6IHtcclxuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VhcmNoT3JkZXIoKSB7XHJcbiAgICAgICAgbGV0IHNlYXJjaFR5cGVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVHlwZSlcclxuICAgICAgICAubWFwKGtleSA9PiAoeyB2YWx1ZTogdGhpcy5kYXRhVHlwZVtrZXldLCBrZXk6IGtleSB9KSk7XHJcbiAgICAgICAgc2VhcmNoVHlwZXMgPSBzZWFyY2hUeXBlcy5zbGljZShzZWFyY2hUeXBlcy5sZW5ndGggLyAyKTtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NFUztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkZPTERFUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5QUk9DRVNTX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLkRPQ1VNRU5UX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgICAgICBpZDogc2VsZWN0ZWROb2RlLmlkLFxyXG4gICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBzZWxlY3RlZE5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICBpdGVtTnVtYmVySWQ6IHNlbGVjdGVkTm9kZS5pdGVtTnVtYmVySWRcclxuICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb2RlU2VsZWN0ZWQobm9kZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xyXG4gICAgICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcclxuICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcclxuICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcclxuICAgICAgICBpZihpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEpXHJcbiAgICAgICAgICAgIHRoaXMub25FeHBhbmRQcm9jZXNzQXJlYS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblNob3dTZWFyY2hPcHRpb24obW9kdWxlSWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZCkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3ROb2RlVHJlZUV2ZW50KG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICghbm9kZS5pdGVtVHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpIFxyXG4gICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguaXRlbVR5cGUgPT0gbm9kZS5pdGVtVHlwZSk7XHJcbiAgICAgICAgaWYoaW5kZXggPj0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogbm9kZS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGxldCBpdGVtIDogTmV3VHJlZU1vZGVsO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gMDtcclxuICAgICAgICAgICAgbGV0IHN0YXR1c05hbWUgPSAnJztcclxuICAgICAgICAgICAgaWYobm9kZS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgfHwgbm9kZS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCl7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy50cmVlRGF0YTIuZmluZCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpIFxyXG4gICAgICAgICAgICAgICAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMS5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgXHJcbiAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PSBub2RlLmV4cGFuZGFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGl0ZW0pe1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzTmFtZSA9IGl0ZW0uc3RhdHVzTmFtZTtcclxuICAgICAgICAgICAgICAgIHN0YXR1cyA9IGl0ZW0uc3RhdHVzSWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGUoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogbm9kZS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogc3RhdHVzTmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZE5vZGVTZWxlY3RPbmUobGlzdENoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IGxpc3RDaGlsZHJlbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSl7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRleHRzID0gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRleHQtbm9kZS1wYXJlbnQnKTtcclxuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHBhcmVudFRleHRzLCAoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1pdGVtJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGl0ZW1FbGVtZW50LCAoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1pdGVtJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5mb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3VGl0bGUgPSBgJHt0aGlzLkxBTkcuTUVTU0FHRS5ET0NVTUVOVFNfSU4udG9VcHBlckNhc2UoKX0gXCIke25vZGUubmFtZX1cImA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5hcmVhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuUFJPQ0VTU0VTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcclxuICAgICAgICAgICAgaXRlbS5pZCA9IG5vZGUuaWQ7XHJcbiAgICAgICAgICAgIGl0ZW0uaXRlbVR5cGUgPSB0eXBlO1xyXG4gICAgICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgICAgICBpdGVtLmxldmVsVHlwZSA9IG5vZGUubGV2ZWxUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0geyAuLi5ub2RlIH07XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RGb2xkZXJJdGVtLmVtaXQoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|