@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.26 → 0.0.2-cbrelease-4.8.26
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/esm2022/lib/components/term-card/term-card.component.mjs +3 -3
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +44 -13
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs +45 -14
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +2 -2
- package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -407,12 +407,13 @@ export class TreeViewComponent {
|
|
|
407
407
|
}
|
|
408
408
|
return false;
|
|
409
409
|
}
|
|
410
|
-
createTerms(selectedList, column) {
|
|
410
|
+
async createTerms(selectedList, column) {
|
|
411
411
|
const frameworkData = {
|
|
412
412
|
id: this.orgSelectedData.orgHierarchyFrameworkId || '',
|
|
413
413
|
category: column.code || '',
|
|
414
414
|
};
|
|
415
|
-
|
|
415
|
+
let createdNodeId = [];
|
|
416
|
+
for await (const ele of selectedList) {
|
|
416
417
|
const requestBody = {
|
|
417
418
|
request: {
|
|
418
419
|
term: {
|
|
@@ -430,29 +431,59 @@ export class TreeViewComponent {
|
|
|
430
431
|
console.error('Error in creating term', err);
|
|
431
432
|
});
|
|
432
433
|
if (createTremsRes && createTremsRes.result && createTremsRes.result.node_id) {
|
|
433
|
-
|
|
434
|
+
createdNodeId.push(createTremsRes.result.node_id[0]);
|
|
434
435
|
}
|
|
435
|
-
|
|
436
|
+
else {
|
|
437
|
+
this._snackBar.open('Error in creating term', 'cancel');
|
|
438
|
+
this.treeHierarchySvc.setLoaderState(false);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (createdNodeId.length === selectedList.length) {
|
|
443
|
+
if (column.index > 1) {
|
|
444
|
+
await this.updateAssociation(createdNodeId, frameworkData, column);
|
|
445
|
+
}
|
|
446
|
+
this.publishFramework(frameworkData);
|
|
447
|
+
}
|
|
436
448
|
}
|
|
437
|
-
async updateAssociation(nodeId, frameworkData) {
|
|
449
|
+
async updateAssociation(nodeId, frameworkData, column) {
|
|
450
|
+
const prev = this.frameworkService.getPreviousCategory(column.code);
|
|
451
|
+
let prevTrem = this.frameworkService.getPreviousSelectedTerms(column);
|
|
452
|
+
let currentTermSelected;
|
|
453
|
+
this.frameworkService.currentSelection.subscribe((ele) => {
|
|
454
|
+
currentTermSelected = ele.data;
|
|
455
|
+
});
|
|
438
456
|
const requestBody = {
|
|
439
457
|
request: {
|
|
440
458
|
term: {
|
|
441
|
-
associations: [
|
|
442
|
-
{
|
|
443
|
-
identifier: nodeId
|
|
444
|
-
},
|
|
445
|
-
]
|
|
459
|
+
associations: []
|
|
446
460
|
}
|
|
447
461
|
}
|
|
448
462
|
};
|
|
449
|
-
|
|
463
|
+
if (prevTrem && prevTrem) {
|
|
464
|
+
prevTrem = prevTrem.filter((ele) => ele.category === prev.code)[0];
|
|
465
|
+
if (prevTrem && prevTrem.associations && prevTrem.associations.length > 0) {
|
|
466
|
+
prevTrem.associations.forEach((ele) => {
|
|
467
|
+
requestBody.request.term.associations.push({
|
|
468
|
+
identifier: ele.identifier
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
if (nodeId && nodeId.length > 0) {
|
|
474
|
+
nodeId.forEach((ele) => {
|
|
475
|
+
requestBody.request.term.associations.push({
|
|
476
|
+
identifier: ele
|
|
477
|
+
});
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
frameworkData.category = prev.code || '';
|
|
481
|
+
const nodeIdParts = currentTermSelected.identifier.split('_');
|
|
450
482
|
const codeId = nodeIdParts[nodeIdParts.length - 1];
|
|
451
483
|
const updateAssociationRes = await this.treeHierarchySvc.updateFrameworkAssociation(requestBody, frameworkData, codeId).toPromise().catch(err => {
|
|
452
484
|
console.error('Error in updating association', err);
|
|
453
485
|
});
|
|
454
486
|
if (updateAssociationRes && updateAssociationRes.result && updateAssociationRes.result.node_id) {
|
|
455
|
-
this.publishFramework(frameworkData);
|
|
456
487
|
}
|
|
457
488
|
}
|
|
458
489
|
publishFramework(frameworkData) {
|
|
@@ -494,4 +525,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
494
525
|
}], loaderEnable: [{
|
|
495
526
|
type: Output
|
|
496
527
|
}] } });
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7Ozs7Ozs7QUFRbkMsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFBb0IsZ0JBQWtDLEVBQzVDLFFBQWdDLEVBQ2pDLE1BQWlCLEVBQ2hCLGVBQWdDLEVBQ2hDLFNBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLGdCQUFzQyxFQUN0QyxjQUFpQztRQVJ2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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SCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBM2lCVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1V0N6QjlCLCsrTEEyRk07OzRGRGxFTyxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTswV0FLaEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IENyZWF0ZVRlcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS9jcmVhdGUtdGVybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi10eXBlLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIGhlYWRlckxpbmVDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBwLWNvbnN0YW50JztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdIaWVyYXJjaHlBZGRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlSGllcmFyY2h5U2VydmljZSB9IGZyb20gJy4uLy4uL3RyZWUtaGllcmFyY2h5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuZGVjbGFyZSB2YXIgTGVhZGVyTGluZTogYW55O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRyZWUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdO1xuICBASW5wdXQoKSBpc0FwcHJvdmFsVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB3b3JrRmxvd1N0YXR1czogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVudmlyb25tZW50OmFueTtcbiAgQElucHV0KCkgdGF4b25vbXlDb25maWc6IGFueTtcbiAgQElucHV0KCkgb3JnU2VsZWN0ZWREYXRhOiBhbnk7XG4gIEBPdXRwdXQoKSBzZW50Rm9yQXBwcm92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2FkZXJFbmFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBtYXBwaW5nID0ge307XG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBsb2NhbExpc3QgPSBbXVxuICBzaG93UHVibGlzaDogYm9vbGVhbiA9IGZhbHNlXG4gIG5ld1Rlcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBsb2FkZWQ6IGFueSA9IHt9XG4gIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSBmYWxzZVxuICBhcHByb3ZhbFJlcXVpcmVkVGVybXMgPSBbXVxuICBkcmFmdFRlcm1zOiBBcnJheTxDYXJkPiA9IFtdO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2F0ZWdvcnlMaXN0OmFueSA9IFtdO1xuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBpc0hpZGVCdG5FbmE6Ym9vbGVhbiA9dHJ1ZTtcbiAgY29sdW1uSWQ6c3RyaW5nID0gJyc7XG4gIGNvbmZpZ0NvZGVCdG46YW55O1xuICBkYXRhQ29uZmlnOmFueVxuICBpc0ZyYXdvcmtMb2FkaW5nID0gdHJ1ZVxuICBsb2FkZXJTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb25cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLCBcbiAgICBwcml2YXRlIGxvY2FsU3ZjOiBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlLCBcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICAgIHByaXZhdGUgYXBwcm92YWxTZXJ2aWNlOiBBcHByb3ZhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgY29ubmVjdG9yU3ZjOiBDb25uZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyZWVIaWVyYXJjaHlTdmM6IFRyZWVIaWVyYXJjaHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIFxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5hcHByb3ZhbExpc3Q7XG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmlzQXBwcm92YWxWaWV3P3RydWU6ZmFsc2U7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmFmdGVyQWRkT3JFZGl0U3ViamVjdC5zdWJzY3JpYmUocmVzcG9uc2VEYXRhID0+IHtcbiAgICAgIGlmKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzICYmIHJlc3BvbnNlRGF0YS5kYXRhKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEocmVzcG9uc2VEYXRhKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5pc0VuYWJsZWRzKClcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gfSBcblxuICBpbml0KCkge1xuICAgIHRoaXMuaW5pdENvbmZpZygpO1xuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKCh0aGlzLm9yZ1NlbGVjdGVkRGF0YSkgPyB0aGlzLm9yZ1NlbGVjdGVkRGF0YSA6ICcnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3JTdmMucmVtb3ZlQWxsTGluZXMoKVxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmZvckVhY2goKGNhdDphbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZWRbY2F0LmNvZGVdID0gdHJ1ZVxuICAgICAgfSlcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyAgdGhpcy5kcmF3SGVhZGVyTGluZShyZXMucmVzdWx0LmZyYW1ld29yay5jYXRlZ29yaWVzLmxlbmd0aCk7ICBcbiAgICAgICAgICAgICB0aGlzLm1ha2VGaXJzdFRlcm1TZWxlY3RlZCgpXG4gICAgICAgIH0sNTAwKVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIGZldGNoaW5nIGZyYW1ld29yaycsIGVycilcbiAgICB9KVxuXG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVIaWVyYXJjaHlTdmMubG9hZGVyU3RhdGUkLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlckVuYWJsZS5lbWl0KGRhdGEpXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9LFxuICAgIClcbiAgXG4gIH1cbiAgcmVmcmVzaERhdGEocmVzRGF0YTogYW55KSB7XG4gICAgY29uc3QgcmVzID0gcmVzRGF0YS5yZXNcbiAgICBpZiAocmVzICYmIHJlcy5jcmVhdGVkKSB7XG4gICAgICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgIH1cbiAgICBpZihyZXMubXVsdGkgJiYgQXJyYXkuaXNBcnJheShyZXMudGVybSkgJiYgcmVzLnRlcm0ubGVuZ3RoKXtcbiAgICAgIHJlcy50ZXJtID0gcmVzLnRlcm1bMF1cbiAgICB9IFxuICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IGZhbHNlXG4gICAgLy8gd2FpdFxuICAgIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgIHJlcy5wYXJlbnQgPSBudWxsXG4gICAgaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIGlmKHJlc0RhdGEudHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgICBcbiAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbltyZXMucGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleCgoZWw6IGFueSkgPT4gZWwuaWRlbnRpZmllciA9PT0gcmVzLnRlcm0uaWRlbnRpZmllcildID0gIHJlcy50ZXJtXG4gICAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChyZXMucGFyZW50LmNhdGVnb3J5KS5jaGlsZHJlbiA9IFsuLi5yZXMucGFyZW50LmNoaWxkcmVuXVxuICAgICAgICBcbiAgICAgICAgXG5cbiAgICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHJlcy50ZXJtLmNhdGVnb3J5LCBkYXRhOiByZXMudGVybS5jaGlsZHJlbiwgY2FyZFJlZjpyZXNEYXRhLmNhcmRSZWYgfSlcbiAgICAgICAgLy8gdGhpcy51cGRhdGVTZWxlY3Rpb24ocmVzLnRlcm0uY2F0ZWdvcnksIHJlcy50ZXJtLmNvZGUpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihyZXMucGFyZW50LmNhdGVnb3J5LCByZXMucGFyZW50LmNvZGUpO1xuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcmVzLnRlcm0uY2F0ZWdvcnksIGRhdGE6IHJlcy50ZXJtLmNoaWxkcmVuLCBjYXJkUmVmOnJlc0RhdGEuY2FyZFJlZiB9KVxuICAgICAgICAvLyB9LCAxMDApO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSlcbiAgICAgICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgICAgcmVzLnRlcm0uc2VsZWN0ZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIubmV4dCh7IGFjdGlvbjogcmVzLnRlcm0uY2F0ZWdvcnksIHR5cGU6J3VwZGF0ZScsIGRhdGE6IHJlcy50ZXJtIH0pXG4gICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSwgJ3VwZGF0ZScpXG4gICAgICAgICByZXMudGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgLy8gY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIFxuICAgICAgICAvLyAgIGlmIChuZXh0ICYmIG5leHQuY29kZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKG5leHQuY29kZSlcbiAgICAgICAgLy8gICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighcmVzLm11bHRpKXtcbiAgICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtXVxuICAgICAgICB9IFxuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IGZhbHNlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpyZXNEYXRhLmluZGV4IH0sKVxuICAgICAgfVxuICAgIH1cbiAgIFxuICB9XG5cbiAgbWFrZUZpcnN0VGVybVNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGZpcnN0TGlzdEl0ZW0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlIGFzIGFueVxuICAgIGlmKGZpcnN0TGlzdEl0ZW0gJiYgZmlyc3RMaXN0SXRlbS5sZW5ndGggPj0gMil7XG4gICAgICBpZihmaXJzdExpc3RJdGVtWzFdICYmIGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW4gJiYgZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RUZXJtID0gZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlblswXSBhcyBhbnlcbiAgICAgICAgY29uc3QgY2FyZFJlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0VGVybS5uYW1lKVxuICAgICAgICAvLyB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdXG4gICAgICAgIGZpcnN0VGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZmlyc3RUZXJtO1xuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGsubmV4dChmaXJzdFRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBmaXJzdFRlcm0uY2F0ZWdvcnksIGRhdGE6IGZpcnN0VGVybSwgY2FyZFJlZiB9KVxuICAgICAgICB0aGlzLmlzRnJhd29ya0xvYWRpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRheG9ub215VGVybShkYXRhOiB7IHNlbGVjdGVkVGVybTogYW55LCBpc1NlbGVjdGVkOiBib29sZWFuLCBpc1VwZGF0ZT86YW55fSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5zZWxlY3RlZFRlcm0gJiYgZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpIHtcbiAgICAgIGlmKCFkYXRhLmlzVXBkYXRlKXtcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KGRhdGEsICd1cGRhdGUnKVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtLmNvZGUpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3Rpb24oY2F0ZWdvcnk6IHN0cmluZywgc2VsZWN0ZWRUZXJtQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY2F0ZWdvcnlEYXRhID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KGNhdGVnb3J5KTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY2F0ZWdvcnlEYXRhLmNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkVGVybUNvZGUgPT09IGl0ZW0uY29kZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICByZXR1cm4gaXRlbVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvL25lZWQgdG8gcmVmYWN0b3IgYXQgaGVpZ2ggbGV2ZWxcbiAgdXBkYXRlRmluYWxMaXN0KGRhdGE6IHsgc2VsZWN0ZWRUZXJtOiBhbnksIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIHBhcmVudERhdGE/OiBhbnksIGNvbEluZGV4PzogYW55fSwgdHlwZT86IGFueSkge1xuICAgIFxuICAgIGlmIChkYXRhLmlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIGRhdGEuc2VsZWN0ZWRUZXJtLnNlbGVjdGVkID0gZGF0YS5pc1NlbGVjdGVkXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zZXQoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtKTtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5KVxuICAgICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlKSB7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShuZXh0LmNvZGUpXG4gICAgICB9XG4gICAgICAvLyBub3RpZnkgbmV4dFxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLm5leHQoeyBhY3Rpb246IGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5LCB0eXBlOiB0eXBlID8gdHlwZSA6ICdzZWxlY3QnLCBkYXRhOiBkYXRhLnNlbGVjdGVkVGVybSB9KVxuICAgIH0gXG4gICAgaWYoZGF0YS5jb2xJbmRleCA9PT0gMCAmJiAhZGF0YS5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfSwzMDAwKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGVkW2RhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgIC8vIGlmKHR5cGUgJiYgdHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpO1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogZGF0YS5wYXJlbnREYXRhLmNhdGVnb3J5LCBkYXRhOiBkYXRhLnBhcmVudERhdGEuY2hpbGRyZW4gfSlcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuXG4gIH1cbiAgaXNFbmFibGVkKGNvbHVtbkNvZGU6IHN0cmluZyk6IGJvb2xlYW4geyAgICBcbiAgICByZXR1cm4gISF0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuXG4gIGlzRW5hYmxlZHMoKSB7XG4gIC8vICByZXR1cm4gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhXG4gIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsayl7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLnN1YnNjcmliZSgoaXRlbSk9PntcbiAgICAgY29uc3QgZGF0YUNvZGU6IGFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoaXRlbSlcbiAgICAgIGlmIChkYXRhQ29kZSAmJiBkYXRhQ29kZS5jb2RlKXtcbiAgICAgICAgdGhpcy5kYXRhQ29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhQ29kZS5jb2RlKVxuICAgICAgfVxuICAgICBpZihkYXRhQ29kZSl7XG4gICAgICB0aGlzLmNvbmZpZ0NvZGVCdG4gPSBkYXRhQ29kZS5jb2RlXG4gICAgIH1cbiAgICAgfSlcbiAgfVxuICBcbiAgXG4gIH1cblxuICAvLyBnZXRidG5FbmFibGVGbihfaXRlbTogYW55KSB7XG4gIC8vICAgY29uc3QgYWxsU2VsZWN0ZWRUZXJtOiBhbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0QWxsU2VsZWN0ZWRUZXJtcygpXG4gIC8vICAgaWYgKGFsbFNlbGVjdGVkVGVybSAmJiBhbGxTZWxlY3RlZFRlcm0ubGVuZ3RoICYmIGFsbFNlbGVjdGVkVGVybS5maWx0ZXIoKHQ6IGFueSkgPT4gdC5jYXRlZ29yeSA9PT0gX2l0ZW0uY29kZSkubGVuZ3RoID4gMCkge1xuICAvLyAgICAgcmV0dXJuIHRydWVcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGZhbHNlXG4gIC8vIH1cblxuXG4gIG9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbjogYW55LCBjb2xJbmRleDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZChjb2x1bW4uY29kZSkpIHtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSBjb2x1bW4uY29kZVxuICAgICAgY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQpXG4gICAgICBpZihuZXh0Q2F0KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKG5leHRDYXQpXG4gICAgICAgIGNvbnN0IGNvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHRDYXQgKVxuICAgICAgICBsZXQgbmV4dENvbEluZm86IGFueSA9IFtdXG4gICAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICAgIGlmKHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJyl7XG4gICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgICAgLy8gY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICAgIC8vIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgLy8gZGF0YToge1xuICAgICAgICAgICAgLy8gICBtb2RlOidjcmVhdGUnLFxuICAgICAgICAgICAgLy8gICBjb2x1bW5JbmZvOiBjb2x1bW4sXG4gICAgICAgICAgICAvLyAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAvLyAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgICAvLyBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6ICc1MHB4JyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYoIXJlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgY29uc3QgZGF0YSAgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGFcbiAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHR5cGU6ICdtdWx0aS1jcmVhdGUnXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKCEocmVzICYmIHJlcy5zdG9wVXBkYXRlKSl7XG4gICAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlQWZ0ZXJBZGRPckVkaXRTdWJqZWN0KHJlc3BvbnNlRGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgICAgICAvLyB3YWl0XG4gICAgICAgICAgY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm1bMF0uY2F0ZWdvcnkpXG4gICAgICAgICAgcmVzLnBhcmVudCA9IG51bGxcbiAgICAgICAgICBpZiAocGFyZW50Q29sdW1uKSB7XG4gICAgICAgICAgICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtWzBdKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtWzBdLCBpc1NlbGVjdGVkOiBmYWxzZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6Y29sSW5kZXggfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbjogYW55LCBfaW5kZXg6IGFueSkge1xuICAgIGNvbnN0IHRyZWVMaXN0RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpICAgICBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByZXZpb3VzOiB0cmVlTGlzdERhdGEsXG4gICAgICAgIGN1cnJlbnREYXRhOiBjb2x1bW4sXG4gICAgICAgIHNlbGVjdGVkT3JnRGF0YTogdGhpcy5vcmdTZWxlY3RlZERhdGEsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgcGFuZWxDbGFzczogJ3JpZ2h0LXNpZGUtbW9kYWwnLFxuICAgICAgbWF4V2lkdGg6ICcxMDB2dydcbiAgICB9KTtcbiAgICBcbiAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoX3JlcyAmJiBfcmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXJtcyhfcmVzLCBjb2x1bW4pXG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBsaXN0KCk6IGFueVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSlcbiAgfVxuICBcbiAgZHJhd0hlYWRlckxpbmUobGVuOiBudW1iZXIpe1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7Li4uZGVmYXVsdENvbmZpZywuLi5oZWFkZXJMaW5lQ29uZmlnIH1cbiAgICBmb3IobGV0IGk9MTsgaTw9bGVuOyBpKyspe1xuICAgICAgY29uc3Qgc3RhcnRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfWNvdW50YClcbiAgICAgIGNvbnN0IGVuZEVsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNib3gke2l9SGVhZGVyYClcbiAgICAgIGlmKHN0YXJ0RWxlICYmIGVuZEVsZSkge1xuICAgICAgICBuZXcgTGVhZGVyTGluZShzdGFydEVsZSwgZW5kRWxlLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW4oY29sdW1uQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2x1bW5Db2RlKVxuICB9XG4gIFxuICBuZXdDb25uZWN0aW9uKCkgeyBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENvbm5lY3RvckNvbXBvbmVudCwge1xuICAgICAgZGF0YToge30sXG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICAvLyBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInIFxuICAgIH0pXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IElDb25uZWN0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYgKChyZXMuc291cmNlID09PSAnb25saW5lJyAmJiByZXMuZGF0YS5lbmRwb2ludCkgfHwgKHJlcy5zb3VyY2UgPT09ICdvZmZsaW5lJykpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN2Yy5sb2NhbFN0b3JhZ2UgPSByZXNcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICAgIH0gZWxzZSBpZiAocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgIXJlcy5kYXRhLmVuZHBvaW50KSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoZXZlbnQ6IGFueSl7XG4gICAgaWYoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zLnB1c2goZXZlbnQudGVybSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWZ0VGVybXMgPSB0aGlzLmRyYWZ0VGVybXMuZmlsdGVyKGQgPT4gZXZlbnQudGVybS5pZGVudGlmaWVyICE9PSBkLmlkZW50aWZpZXIpXG4gICAgfVxuICAgIHRoaXMuc2hvd0FjdGlvbkJhciA9IHRoaXMuZHJhZnRUZXJtcy5sZW5ndGg+MD90cnVlOmZhbHNlXG4gIH1cblxuICBnZXROb09mQ2FyZHMoZXZlbnQ6YW55KSB7XG4gICAgaWYodGhpcy5jYXRlZ29yeUxpc3QubGVuZ3RoID4gMCAmJiBldmVudC5jYXRlZ29yeSAhPT0gJycpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY2F0ZWdvcnlMaXN0LmZpbmRJbmRleCgob2JqOmFueSkgPT4gb2JqLmNhdGVnb3J5ID09IGV2ZW50LmNhdGVnb3J5KTtcbiAgICAgIGlmKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3Quc3BsaWNlKGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZXZlbnQuY2F0ZWdvcnkgPT0gJycpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0W3RoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aC0xXS5jb3VudCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnB1c2goZXZlbnQpO1xuICB9XG4gIFxuICBnZXRDb3VudChjb2RlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDBcbiAgICBpZiAodGhpcy5jYXRlZ29yeUxpc3QpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeUxpc3QuZmluZCgoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY2F0ZWdvcnkgPT09IGNvZGUpXG4gICAgICBjb3VudCA9IGNhdGVnb3J5ICYmIGNhdGVnb3J5LmNvdW50ID8gY2F0ZWdvcnkuY291bnQgOiAwXG4gICAgfVxuICAgIHJldHVybiBjb3VudFxuICB9XG5cbiAgc2VuZEZvckFwcHJvdmFsKCl7XG4gICAgaWYoIXRoaXMuaXNBcHByb3ZhbFZpZXcpe1xuICAgICAgICBsZXQgcGFyZW50TGlzdDogYW55ID0gW11cbiAgICAgICAgdGhpcy5saXN0LmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gZWxlLmNoaWxkcmVuLmZpbHRlcigodGVybTogYW55KSA9PiB0ZXJtLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgICAgIGlmKHRbMF0pe1xuICAgICAgICAgICAgcGFyZW50TGlzdC5wdXNoKHRbMF0pXG4gICAgICAgICAgfSBcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWVzOlsuLi5wYXJlbnRMaXN0LCAuLi50aGlzLmRyYWZ0VGVybXNdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHByb3ZhbFNlcnZpY2UuY3JlYXRlQXBwcm92YWwocmVxKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZW1vdmVPbGRMaW5lKClcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdUZXJtcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgQXBwcm92YWwuJywgJ2NhbmNlbCcpXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudEZvckFwcHJvdmUuZW1pdCh0aGlzLmRyYWZ0VGVybXMpXG4gICAgfVxuICAgXG4gIH1cblxuICBjbG9zZUFjdGlvbkJhcihfZTphbnkpeyBcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXRDb25maWcoKSB7XG4gICAgaWYodGhpcy5lbnZpcm9ubWVudCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlRW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudCk7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2V0Q29uZmlnKHRoaXMudGF4b25vbXlDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpO1xuICAgICAgLy8gdGhpcy5lbnZpcm9ubWVudCA9IG51bGxcbiAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZXNldEFuZEZyZXNoKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnJlbW92ZUFsbExpbmVzKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnVwZGF0ZUNvbm5lY3RvcnNNYXAoe30pXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgICYmIGRhdGEuY29kZSl7XG4gICAgICBjb25zdCBuZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShkYXRhLmNvZGUpXG4gICAgICByZXR1cm4gbmV4dENhdFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaXNDdXJyZW50T3JOZXh0VGVybShfY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIGN1cnJlbnQgc2VsZWN0aW9uLCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKCF0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgY2F0ZWdvcnkgZnJvbSB0aGUgY3VycmVudFNlbGVjdGlvblxuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnZhbHVlLnR5cGU7XG4gICAgaWYgKCFjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtblxuICAgIGxldCBjdXJyZW50SW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubGlzdFtpXS5jb2RlID09PSBjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGN1cnJlbnQgaW5kZXgsIG9ubHkgZW5hYmxlIHRoZSBmaXJzdCBjb2x1bW5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbmFibGUgdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgbmV4dCBvbmVcbiAgICByZXR1cm4gaW5kZXggPT09IGN1cnJlbnRJbmRleCB8fCBpbmRleCA9PT0gY3VycmVudEluZGV4ICsgMTtcbiAgfVxuXG4gIHNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGluZGV4KSAmJiB0aGlzLmdldENvdW50KGNvbHVtbi5jb2RlKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZVRlcm1zKHNlbGVjdGVkTGlzdDphbnksIGNvbHVtbjphbnkpIHtcbiAgICBjb25zdCBmcmFtZXdvcmtEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMub3JnU2VsZWN0ZWREYXRhLm9yZ0hpZXJhcmNoeUZyYW1ld29ya0lkIHx8ICcnLFxuICAgICAgY2F0ZWdvcnk6IGNvbHVtbi5jb2RlIHx8ICcnLFxuICAgIH1cbiAgICBzZWxlY3RlZExpc3QuZm9yRWFjaChhc3luYyAoZWxlOmFueSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHRlcm06IHtcbiAgICAgICAgICAgICAgbmFtZTogZWxlLm9yZ05hbWUgfHwgJycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbGUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgIGNvZGU6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IGVsZS5taW5pc3RyeU9yU3RhdGVJZCB8fCAnJyxcbiAgICAgICAgICAgICAgICBwYXJlbnRPcmdOYW1lOiBlbGUubWluaXN0cnlPclN0YXRlTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVUcmVtc1JlczphbnkgPSBhd2FpdCB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuY3JlYXRlVGVybShyZXF1ZXN0Qm9keSwgZnJhbWV3b3JrRGF0YSkudG9Qcm9taXNlKCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgZXJyKTtcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNyZWF0ZVRyZW1zUmVzICYmIGNyZWF0ZVRyZW1zUmVzLnJlc3VsdCAmJiBjcmVhdGVUcmVtc1Jlcy5yZXN1bHQubm9kZV9pZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQXNzb2NpYXRpb24oY3JlYXRlVHJlbXNSZXMucmVzdWx0Lm5vZGVfaWRbMF0sIGZyYW1ld29ya0RhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBc3NvY2lhdGlvbihub2RlSWQ6IHN0cmluZywgZnJhbWV3b3JrRGF0YTogYW55KSB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHRlcm06IHtcbiAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWRlbnRpZmllcjogbm9kZUlkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gXG4gICAgY29uc3Qgbm9kZUlkUGFydHMgPSBub2RlSWQuc3BsaXQoJ18nKTtcbiAgICBjb25zdCBjb2RlSWQgPSBub2RlSWRQYXJ0c1tub2RlSWRQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCB1cGRhdGVBc3NvY2lhdGlvblJlczphbnkgPSBhd2FpdCB0aGlzLnRyZWVIaWVyYXJjaHlTdmMudXBkYXRlRnJhbWV3b3JrQXNzb2NpYXRpb24ocmVxdWVzdEJvZHksIGZyYW1ld29ya0RhdGEsIGNvZGVJZCkudG9Qcm9taXNlKCkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHVwZGF0aW5nIGFzc29jaWF0aW9uJywgZXJyKTtcbiAgICB9KVxuICAgIGlmICh1cGRhdGVBc3NvY2lhdGlvblJlcyAmJiB1cGRhdGVBc3NvY2lhdGlvblJlcy5yZXN1bHQgJiYgdXBkYXRlQXNzb2NpYXRpb25SZXMucmVzdWx0Lm5vZGVfaWQpIHtcbiAgICAgIHRoaXMucHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtEYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGE6IGFueSkge1xuICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5wdWJsaXNoRnJlYW1ld29yayhmcmFtZXdvcmtEYXRhKS5zdWJzY3JpYmUoKHJlczphbnkpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LnB1Ymxpc2hTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgJHtyZXMucmVzdWx0LnB1Ymxpc2hTdGF0dXN9YCwgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oJ0Vycm9yIGluIHB1Ymxpc2hpbmcgZnJhbWV3b3JrJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHB1Ymxpc2hpbmcgZnJhbWV3b3JrJywgZXJyKTtcbiAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgfSk7XG4gIH1cbn0iLCI8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBjb25uZWN0aW9uU2V0dGluZ3NcIj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm5ld0Nvbm5lY3Rpb24oKVwiPlxuICAgICAgICA8bWF0LWljb24+e3thcHBfc3RyaW5ncy5idWlsZH19PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PiAtLT5cblxuPGRpdiAqbmdJZj1cImxpc3QgJiYgbGlzdC5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGhlaWdodEZpeCBvdmVyZmxvdy1jb250YWluZXJcIiBpZD1cInRyZWVWaWV3Q29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxpc3Q7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmVseC1jb2wgIGNvbC1jb250YWluZXIgY29udGFpbmVyc3t7bGlzdC5sZW5ndGh9fVwiIGlkPVwiYm94e3tpKzF9fUNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRpbmctc3RpY2t5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRpbmctY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NhdGVnb3J5LWhlYWRlcic+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaGVhZGVyLWl0ZW1zIHctZnVsbFwiIGlkPVwiYm94e3tpfX1IZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/Lmljb25FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uY29uZmlnLmNvbG9yfVwiPnt7Y29sdW1uLmNvbmZpZy5pY29ufX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIG1hdC1ib2R5LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e2NvbHVtbi5uYW1lfX0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uPy5jb25maWc/LmNhdGVnb3J5RGlzcGxheU5hbWUgfHwgY29sdW1uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgIT0gMCAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aCA+IDA7IGVsc2UgZmlyc3RDb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaW5kZXggIT09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50XCI+KHt7Z2V0Q291bnQoY29sdW1uLmNvZGUpfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpcnN0Q29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gMFwiIGlkPVwiYm94e3tpKzF9fWNvdW50XCIgY2xhc3M9XCJjb3VudFwiPih7e2NvbHVtbi5jaGlsZHJlbi5sZW5ndGh9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiXCIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZCAmJiAhY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIFtuZ0NsYXNzXT1cInsnYnV0dG9uLWVuYWJsZWQnOiBjb25maWdDb2RlQnRuPT0gY29sdW1uPy5jb2RlLCAnYnV0dG9uLWRpc2FibGVkJzogY29uZmlnQ29kZUJ0biE9PSBjb2x1bW4/LmNvZGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ3JlYXRlVGVybURpYWxvZyhjb2x1bW4sIGkpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFyZ2luLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuYWRkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uYWRkT3JnRW5hYmxlZCAmJiAhY29sdW1uPy5jb25maWc/LmNyZWF0ZUJ0bkVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnV0dG9uLWVuYWJsZWQnOiBpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSksICdidXR0b24tZGlzYWJsZWQnOiAhaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFyZ2luLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuYWRkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd1wiIGlkPVwiYm94e3tpKzF9fWNvdW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFB1dCBzZWFyY2ggYnV0dG9uIGhlcmUgaW4gZnV0dXJlXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSB7e2NvbHVtbi5jb2RlfX0gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGluZy14MiBjYXQtY29sdW1ucyBjb250YWluZXItYm94XCIgaWQ9XCJib3h7e2krMX19XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY2hpbGRyZW4gJiYgY29sdW1uPy5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItdHJlZS1jb2x1bW4tdmlldyAqbmdJZj1cImxvYWRlZFtjb2x1bW4uY29kZV1cIiAjc2VsZWN0ZWRUYXhvbm9teVRlcm0gW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVySWRdPVwiJ2JveCcrKGkrMSlcIiAodXBkYXRlVGF4b25vbXlUZXJtKT1cInVwZGF0ZVRheG9ub215VGVybSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZVRlcm1MaXN0KT1cInVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoJGV2ZW50KVwiIChjYXJkc0NvdW50KT1cImdldE5vT2ZDYXJkcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9saWItdHJlZS1jb2x1bW4tdmlldz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1N2Z0JvcmRlcldyYXBwZXIoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZnLWJvcmRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzFCMjEzMzUyXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCIyMCwgMTBcIiByeD1cIjEwXCIgcnk9XCIxMFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQgZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjLW5vLWNvbm5lY3Rpb25cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57e2lzTG9hZGluZ319IFNlbGVjdCBhbiBvcmdhbml6YXRpb24gdG8gYWRkIG9yIHNlZSBmdXJ0aGVyIGNvbm5lY3Rpb25zPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJhZGQtYnRuXCIgKGNsaWNrKT1cIm9wZW5Pcmdhbml6YXRpb25EaWFsb2coY29sdW1uLCBpKVwiIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpLCAnYnV0dG9uLWRpc2FibGVkJzogIWlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGxpYi1hY3Rpb24tYmFyICpuZ0lmPVwic2hvd0FjdGlvbkJhclwiIFthY3Rpb25UeXBlXT1cImlzQXBwcm92YWxWaWV3XCIgW2NvbmZpZ1R5cGVdPVwid29ya0Zsb3dTdGF0dXNcIlxuICAgICAgICAoc2VuZEFwcHJvdmFsKT1cInNlbmRGb3JBcHByb3ZhbCgpXCIgKGNsb3NlQWN0aW9uKT1cImNsb3NlQWN0aW9uQmFyKCRldmVudClcIj48L2xpYi1hY3Rpb24tYmFyPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIShsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCApICYmIGlzRnJhd29ya0xvYWRpbmdcIiBjbGFzcz1cImZsZXggaGVpZ2h0Rml4IFwiPlxuICAgIDxoMSBpMThuPnt7YXBwX3N0cmluZ3MubG9hZGluZ319PC9oMT5cbjwvZGl2PiJdfQ==
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7Ozs7Ozs7QUFRbkMsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFBb0IsZ0JBQWtDLEVBQzVDLFFBQWdDLEVBQ2pDLE1BQWlCLEVBQ2hCLGVBQWdDLEVBQ2hDLFNBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLGdCQUFzQyxFQUN0QyxjQUFpQztRQVJ2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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dXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IENyZWF0ZVRlcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS9jcmVhdGUtdGVybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi10eXBlLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIGhlYWRlckxpbmVDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBwLWNvbnN0YW50JztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdIaWVyYXJjaHlBZGRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlSGllcmFyY2h5U2VydmljZSB9IGZyb20gJy4uLy4uL3RyZWUtaGllcmFyY2h5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuZGVjbGFyZSB2YXIgTGVhZGVyTGluZTogYW55O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRyZWUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdO1xuICBASW5wdXQoKSBpc0FwcHJvdmFsVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB3b3JrRmxvd1N0YXR1czogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVudmlyb25tZW50OmFueTtcbiAgQElucHV0KCkgdGF4b25vbXlDb25maWc6IGFueTtcbiAgQElucHV0KCkgb3JnU2VsZWN0ZWREYXRhOiBhbnk7XG4gIEBPdXRwdXQoKSBzZW50Rm9yQXBwcm92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2FkZXJFbmFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBtYXBwaW5nID0ge307XG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBsb2NhbExpc3QgPSBbXVxuICBzaG93UHVibGlzaDogYm9vbGVhbiA9IGZhbHNlXG4gIG5ld1Rlcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBsb2FkZWQ6IGFueSA9IHt9XG4gIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSBmYWxzZVxuICBhcHByb3ZhbFJlcXVpcmVkVGVybXMgPSBbXVxuICBkcmFmdFRlcm1zOiBBcnJheTxDYXJkPiA9IFtdO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2F0ZWdvcnlMaXN0OmFueSA9IFtdO1xuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBpc0hpZGVCdG5FbmE6Ym9vbGVhbiA9dHJ1ZTtcbiAgY29sdW1uSWQ6c3RyaW5nID0gJyc7XG4gIGNvbmZpZ0NvZGVCdG46YW55O1xuICBkYXRhQ29uZmlnOmFueVxuICBpc0ZyYXdvcmtMb2FkaW5nID0gdHJ1ZVxuICBsb2FkZXJTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb25cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLCBcbiAgICBwcml2YXRlIGxvY2FsU3ZjOiBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlLCBcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICAgIHByaXZhdGUgYXBwcm92YWxTZXJ2aWNlOiBBcHByb3ZhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgY29ubmVjdG9yU3ZjOiBDb25uZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyZWVIaWVyYXJjaHlTdmM6IFRyZWVIaWVyYXJjaHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIFxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5hcHByb3ZhbExpc3Q7XG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmlzQXBwcm92YWxWaWV3P3RydWU6ZmFsc2U7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmFmdGVyQWRkT3JFZGl0U3ViamVjdC5zdWJzY3JpYmUocmVzcG9uc2VEYXRhID0+IHtcbiAgICAgIGlmKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzICYmIHJlc3BvbnNlRGF0YS5kYXRhKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEocmVzcG9uc2VEYXRhKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5pc0VuYWJsZWRzKClcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gfSBcblxuICBpbml0KCkge1xuICAgIHRoaXMuaW5pdENvbmZpZygpO1xuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKCh0aGlzLm9yZ1NlbGVjdGVkRGF0YSkgPyB0aGlzLm9yZ1NlbGVjdGVkRGF0YSA6ICcnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3JTdmMucmVtb3ZlQWxsTGluZXMoKVxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmZvckVhY2goKGNhdDphbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZWRbY2F0LmNvZGVdID0gdHJ1ZVxuICAgICAgfSlcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyAgdGhpcy5kcmF3SGVhZGVyTGluZShyZXMucmVzdWx0LmZyYW1ld29yay5jYXRlZ29yaWVzLmxlbmd0aCk7ICBcbiAgICAgICAgICAgICB0aGlzLm1ha2VGaXJzdFRlcm1TZWxlY3RlZCgpXG4gICAgICAgIH0sNTAwKVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIGZldGNoaW5nIGZyYW1ld29yaycsIGVycilcbiAgICB9KVxuXG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVIaWVyYXJjaHlTdmMubG9hZGVyU3RhdGUkLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlckVuYWJsZS5lbWl0KGRhdGEpXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9LFxuICAgIClcbiAgXG4gIH1cbiAgcmVmcmVzaERhdGEocmVzRGF0YTogYW55KSB7XG4gICAgY29uc3QgcmVzID0gcmVzRGF0YS5yZXNcbiAgICBpZiAocmVzICYmIHJlcy5jcmVhdGVkKSB7XG4gICAgICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgIH1cbiAgICBpZihyZXMubXVsdGkgJiYgQXJyYXkuaXNBcnJheShyZXMudGVybSkgJiYgcmVzLnRlcm0ubGVuZ3RoKXtcbiAgICAgIHJlcy50ZXJtID0gcmVzLnRlcm1bMF1cbiAgICB9IFxuICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IGZhbHNlXG4gICAgLy8gd2FpdFxuICAgIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgIHJlcy5wYXJlbnQgPSBudWxsXG4gICAgaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIGlmKHJlc0RhdGEudHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgICBcbiAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbltyZXMucGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleCgoZWw6IGFueSkgPT4gZWwuaWRlbnRpZmllciA9PT0gcmVzLnRlcm0uaWRlbnRpZmllcildID0gIHJlcy50ZXJtXG4gICAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChyZXMucGFyZW50LmNhdGVnb3J5KS5jaGlsZHJlbiA9IFsuLi5yZXMucGFyZW50LmNoaWxkcmVuXVxuICAgICAgICBcbiAgICAgICAgXG5cbiAgICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHJlcy50ZXJtLmNhdGVnb3J5LCBkYXRhOiByZXMudGVybS5jaGlsZHJlbiwgY2FyZFJlZjpyZXNEYXRhLmNhcmRSZWYgfSlcbiAgICAgICAgLy8gdGhpcy51cGRhdGVTZWxlY3Rpb24ocmVzLnRlcm0uY2F0ZWdvcnksIHJlcy50ZXJtLmNvZGUpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihyZXMucGFyZW50LmNhdGVnb3J5LCByZXMucGFyZW50LmNvZGUpO1xuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcmVzLnRlcm0uY2F0ZWdvcnksIGRhdGE6IHJlcy50ZXJtLmNoaWxkcmVuLCBjYXJkUmVmOnJlc0RhdGEuY2FyZFJlZiB9KVxuICAgICAgICAvLyB9LCAxMDApO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSlcbiAgICAgICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgICAgcmVzLnRlcm0uc2VsZWN0ZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIubmV4dCh7IGFjdGlvbjogcmVzLnRlcm0uY2F0ZWdvcnksIHR5cGU6J3VwZGF0ZScsIGRhdGE6IHJlcy50ZXJtIH0pXG4gICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSwgJ3VwZGF0ZScpXG4gICAgICAgICByZXMudGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgLy8gY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIFxuICAgICAgICAvLyAgIGlmIChuZXh0ICYmIG5leHQuY29kZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKG5leHQuY29kZSlcbiAgICAgICAgLy8gICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighcmVzLm11bHRpKXtcbiAgICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtXVxuICAgICAgICB9IFxuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IGZhbHNlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpyZXNEYXRhLmluZGV4IH0sKVxuICAgICAgfVxuICAgIH1cbiAgIFxuICB9XG5cbiAgbWFrZUZpcnN0VGVybVNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGZpcnN0TGlzdEl0ZW0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlIGFzIGFueVxuICAgIGlmKGZpcnN0TGlzdEl0ZW0gJiYgZmlyc3RMaXN0SXRlbS5sZW5ndGggPj0gMil7XG4gICAgICBpZihmaXJzdExpc3RJdGVtWzFdICYmIGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW4gJiYgZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RUZXJtID0gZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlblswXSBhcyBhbnlcbiAgICAgICAgY29uc3QgY2FyZFJlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0VGVybS5uYW1lKVxuICAgICAgICAvLyB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdXG4gICAgICAgIGZpcnN0VGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZmlyc3RUZXJtO1xuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGsubmV4dChmaXJzdFRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBmaXJzdFRlcm0uY2F0ZWdvcnksIGRhdGE6IGZpcnN0VGVybSwgY2FyZFJlZiB9KVxuICAgICAgICB0aGlzLmlzRnJhd29ya0xvYWRpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRheG9ub215VGVybShkYXRhOiB7IHNlbGVjdGVkVGVybTogYW55LCBpc1NlbGVjdGVkOiBib29sZWFuLCBpc1VwZGF0ZT86YW55fSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5zZWxlY3RlZFRlcm0gJiYgZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpIHtcbiAgICAgIGlmKCFkYXRhLmlzVXBkYXRlKXtcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KGRhdGEsICd1cGRhdGUnKVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtLmNvZGUpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3Rpb24oY2F0ZWdvcnk6IHN0cmluZywgc2VsZWN0ZWRUZXJtQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY2F0ZWdvcnlEYXRhID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KGNhdGVnb3J5KTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY2F0ZWdvcnlEYXRhLmNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkVGVybUNvZGUgPT09IGl0ZW0uY29kZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICByZXR1cm4gaXRlbVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvL25lZWQgdG8gcmVmYWN0b3IgYXQgaGVpZ2ggbGV2ZWxcbiAgdXBkYXRlRmluYWxMaXN0KGRhdGE6IHsgc2VsZWN0ZWRUZXJtOiBhbnksIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIHBhcmVudERhdGE/OiBhbnksIGNvbEluZGV4PzogYW55fSwgdHlwZT86IGFueSkge1xuICAgIFxuICAgIGlmIChkYXRhLmlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIGRhdGEuc2VsZWN0ZWRUZXJtLnNlbGVjdGVkID0gZGF0YS5pc1NlbGVjdGVkXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zZXQoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtKTtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5KVxuICAgICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlKSB7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShuZXh0LmNvZGUpXG4gICAgICB9XG4gICAgICAvLyBub3RpZnkgbmV4dFxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLm5leHQoeyBhY3Rpb246IGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5LCB0eXBlOiB0eXBlID8gdHlwZSA6ICdzZWxlY3QnLCBkYXRhOiBkYXRhLnNlbGVjdGVkVGVybSB9KVxuICAgIH0gXG4gICAgaWYoZGF0YS5jb2xJbmRleCA9PT0gMCAmJiAhZGF0YS5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfSwzMDAwKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGVkW2RhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgIC8vIGlmKHR5cGUgJiYgdHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpO1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogZGF0YS5wYXJlbnREYXRhLmNhdGVnb3J5LCBkYXRhOiBkYXRhLnBhcmVudERhdGEuY2hpbGRyZW4gfSlcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuXG4gIH1cbiAgaXNFbmFibGVkKGNvbHVtbkNvZGU6IHN0cmluZyk6IGJvb2xlYW4geyAgICBcbiAgICByZXR1cm4gISF0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuXG4gIGlzRW5hYmxlZHMoKSB7XG4gIC8vICByZXR1cm4gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhXG4gIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsayl7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLnN1YnNjcmliZSgoaXRlbSk9PntcbiAgICAgY29uc3QgZGF0YUNvZGU6IGFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoaXRlbSlcbiAgICAgIGlmIChkYXRhQ29kZSAmJiBkYXRhQ29kZS5jb2RlKXtcbiAgICAgICAgdGhpcy5kYXRhQ29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhQ29kZS5jb2RlKVxuICAgICAgfVxuICAgICBpZihkYXRhQ29kZSl7XG4gICAgICB0aGlzLmNvbmZpZ0NvZGVCdG4gPSBkYXRhQ29kZS5jb2RlXG4gICAgIH1cbiAgICAgfSlcbiAgfVxuICBcbiAgXG4gIH1cblxuICAvLyBnZXRidG5FbmFibGVGbihfaXRlbTogYW55KSB7XG4gIC8vICAgY29uc3QgYWxsU2VsZWN0ZWRUZXJtOiBhbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0QWxsU2VsZWN0ZWRUZXJtcygpXG4gIC8vICAgaWYgKGFsbFNlbGVjdGVkVGVybSAmJiBhbGxTZWxlY3RlZFRlcm0ubGVuZ3RoICYmIGFsbFNlbGVjdGVkVGVybS5maWx0ZXIoKHQ6IGFueSkgPT4gdC5jYXRlZ29yeSA9PT0gX2l0ZW0uY29kZSkubGVuZ3RoID4gMCkge1xuICAvLyAgICAgcmV0dXJuIHRydWVcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGZhbHNlXG4gIC8vIH1cblxuXG4gIG9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbjogYW55LCBjb2xJbmRleDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZChjb2x1bW4uY29kZSkpIHtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSBjb2x1bW4uY29kZVxuICAgICAgY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQpXG4gICAgICBpZihuZXh0Q2F0KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKG5leHRDYXQpXG4gICAgICAgIGNvbnN0IGNvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHRDYXQgKVxuICAgICAgICBsZXQgbmV4dENvbEluZm86IGFueSA9IFtdXG4gICAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICAgIGlmKHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJyl7XG4gICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgICAgLy8gY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICAgIC8vIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgLy8gZGF0YToge1xuICAgICAgICAgICAgLy8gICBtb2RlOidjcmVhdGUnLFxuICAgICAgICAgICAgLy8gICBjb2x1bW5JbmZvOiBjb2x1bW4sXG4gICAgICAgICAgICAvLyAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAvLyAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgICAvLyBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6ICc1MHB4JyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYoIXJlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgY29uc3QgZGF0YSAgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGFcbiAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHR5cGU6ICdtdWx0aS1jcmVhdGUnXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKCEocmVzICYmIHJlcy5zdG9wVXBkYXRlKSl7XG4gICAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlQWZ0ZXJBZGRPckVkaXRTdWJqZWN0KHJlc3BvbnNlRGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgICAgICAvLyB3YWl0XG4gICAgICAgICAgY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm1bMF0uY2F0ZWdvcnkpXG4gICAgICAgICAgcmVzLnBhcmVudCA9IG51bGxcbiAgICAgICAgICBpZiAocGFyZW50Q29sdW1uKSB7XG4gICAgICAgICAgICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtWzBdKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtWzBdLCBpc1NlbGVjdGVkOiBmYWxzZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6Y29sSW5kZXggfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbjogYW55LCBfaW5kZXg6IGFueSkge1xuICAgIGNvbnN0IHRyZWVMaXN0RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpICAgICBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByZXZpb3VzOiB0cmVlTGlzdERhdGEsXG4gICAgICAgIGN1cnJlbnREYXRhOiBjb2x1bW4sXG4gICAgICAgIHNlbGVjdGVkT3JnRGF0YTogdGhpcy5vcmdTZWxlY3RlZERhdGEsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgcGFuZWxDbGFzczogJ3JpZ2h0LXNpZGUtbW9kYWwnLFxuICAgICAgbWF4V2lkdGg6ICcxMDB2dydcbiAgICB9KTtcbiAgICBcbiAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoX3JlcyAmJiBfcmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXJtcyhfcmVzLCBjb2x1bW4pXG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBsaXN0KCk6IGFueVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSlcbiAgfVxuICBcbiAgZHJhd0hlYWRlckxpbmUobGVuOiBudW1iZXIpe1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7Li4uZGVmYXVsdENvbmZpZywuLi5oZWFkZXJMaW5lQ29uZmlnIH1cbiAgICBmb3IobGV0IGk9MTsgaTw9bGVuOyBpKyspe1xuICAgICAgY29uc3Qgc3RhcnRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfWNvdW50YClcbiAgICAgIGNvbnN0IGVuZEVsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNib3gke2l9SGVhZGVyYClcbiAgICAgIGlmKHN0YXJ0RWxlICYmIGVuZEVsZSkge1xuICAgICAgICBuZXcgTGVhZGVyTGluZShzdGFydEVsZSwgZW5kRWxlLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW4oY29sdW1uQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2x1bW5Db2RlKVxuICB9XG4gIFxuICBuZXdDb25uZWN0aW9uKCkgeyBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENvbm5lY3RvckNvbXBvbmVudCwge1xuICAgICAgZGF0YToge30sXG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICAvLyBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInIFxuICAgIH0pXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IElDb25uZWN0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYgKChyZXMuc291cmNlID09PSAnb25saW5lJyAmJiByZXMuZGF0YS5lbmRwb2ludCkgfHwgKHJlcy5zb3VyY2UgPT09ICdvZmZsaW5lJykpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN2Yy5sb2NhbFN0b3JhZ2UgPSByZXNcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICAgIH0gZWxzZSBpZiAocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgIXJlcy5kYXRhLmVuZHBvaW50KSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoZXZlbnQ6IGFueSl7XG4gICAgaWYoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zLnB1c2goZXZlbnQudGVybSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWZ0VGVybXMgPSB0aGlzLmRyYWZ0VGVybXMuZmlsdGVyKGQgPT4gZXZlbnQudGVybS5pZGVudGlmaWVyICE9PSBkLmlkZW50aWZpZXIpXG4gICAgfVxuICAgIHRoaXMuc2hvd0FjdGlvbkJhciA9IHRoaXMuZHJhZnRUZXJtcy5sZW5ndGg+MD90cnVlOmZhbHNlXG4gIH1cblxuICBnZXROb09mQ2FyZHMoZXZlbnQ6YW55KSB7XG4gICAgaWYodGhpcy5jYXRlZ29yeUxpc3QubGVuZ3RoID4gMCAmJiBldmVudC5jYXRlZ29yeSAhPT0gJycpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY2F0ZWdvcnlMaXN0LmZpbmRJbmRleCgob2JqOmFueSkgPT4gb2JqLmNhdGVnb3J5ID09IGV2ZW50LmNhdGVnb3J5KTtcbiAgICAgIGlmKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3Quc3BsaWNlKGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZXZlbnQuY2F0ZWdvcnkgPT0gJycpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0W3RoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aC0xXS5jb3VudCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnB1c2goZXZlbnQpO1xuICB9XG4gIFxuICBnZXRDb3VudChjb2RlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDBcbiAgICBpZiAodGhpcy5jYXRlZ29yeUxpc3QpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeUxpc3QuZmluZCgoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY2F0ZWdvcnkgPT09IGNvZGUpXG4gICAgICBjb3VudCA9IGNhdGVnb3J5ICYmIGNhdGVnb3J5LmNvdW50ID8gY2F0ZWdvcnkuY291bnQgOiAwXG4gICAgfVxuICAgIHJldHVybiBjb3VudFxuICB9XG5cbiAgc2VuZEZvckFwcHJvdmFsKCl7XG4gICAgaWYoIXRoaXMuaXNBcHByb3ZhbFZpZXcpe1xuICAgICAgICBsZXQgcGFyZW50TGlzdDogYW55ID0gW11cbiAgICAgICAgdGhpcy5saXN0LmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gZWxlLmNoaWxkcmVuLmZpbHRlcigodGVybTogYW55KSA9PiB0ZXJtLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgICAgIGlmKHRbMF0pe1xuICAgICAgICAgICAgcGFyZW50TGlzdC5wdXNoKHRbMF0pXG4gICAgICAgICAgfSBcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWVzOlsuLi5wYXJlbnRMaXN0LCAuLi50aGlzLmRyYWZ0VGVybXNdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHByb3ZhbFNlcnZpY2UuY3JlYXRlQXBwcm92YWwocmVxKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZW1vdmVPbGRMaW5lKClcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdUZXJtcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgQXBwcm92YWwuJywgJ2NhbmNlbCcpXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudEZvckFwcHJvdmUuZW1pdCh0aGlzLmRyYWZ0VGVybXMpXG4gICAgfVxuICAgXG4gIH1cblxuICBjbG9zZUFjdGlvbkJhcihfZTphbnkpeyBcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXRDb25maWcoKSB7XG4gICAgaWYodGhpcy5lbnZpcm9ubWVudCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlRW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudCk7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2V0Q29uZmlnKHRoaXMudGF4b25vbXlDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpO1xuICAgICAgLy8gdGhpcy5lbnZpcm9ubWVudCA9IG51bGxcbiAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZXNldEFuZEZyZXNoKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnJlbW92ZUFsbExpbmVzKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnVwZGF0ZUNvbm5lY3RvcnNNYXAoe30pXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgICYmIGRhdGEuY29kZSl7XG4gICAgICBjb25zdCBuZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShkYXRhLmNvZGUpXG4gICAgICByZXR1cm4gbmV4dENhdFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaXNDdXJyZW50T3JOZXh0VGVybShfY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIGN1cnJlbnQgc2VsZWN0aW9uLCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKCF0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgY2F0ZWdvcnkgZnJvbSB0aGUgY3VycmVudFNlbGVjdGlvblxuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnZhbHVlLnR5cGU7XG4gICAgaWYgKCFjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtblxuICAgIGxldCBjdXJyZW50SW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubGlzdFtpXS5jb2RlID09PSBjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGN1cnJlbnQgaW5kZXgsIG9ubHkgZW5hYmxlIHRoZSBmaXJzdCBjb2x1bW5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbmFibGUgdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgbmV4dCBvbmVcbiAgICByZXR1cm4gaW5kZXggPT09IGN1cnJlbnRJbmRleCB8fCBpbmRleCA9PT0gY3VycmVudEluZGV4ICsgMTtcbiAgfVxuXG4gIHNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGluZGV4KSAmJiB0aGlzLmdldENvdW50KGNvbHVtbi5jb2RlKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRlcm1zKHNlbGVjdGVkTGlzdDphbnksIGNvbHVtbjphbnkpIHtcbiAgICBjb25zdCBmcmFtZXdvcmtEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMub3JnU2VsZWN0ZWREYXRhLm9yZ0hpZXJhcmNoeUZyYW1ld29ya0lkIHx8ICcnLFxuICAgICAgY2F0ZWdvcnk6IGNvbHVtbi5jb2RlIHx8ICcnLFxuICAgIH1cbiAgICBsZXQgY3JlYXRlZE5vZGVJZDphbnkgPSBbXVxuICAgIGZvciBhd2FpdCAoY29uc3QgZWxlIG9mIHNlbGVjdGVkTGlzdCkgeyBcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICB0ZXJtOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGVsZS5vcmdOYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZWxlLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICBjb2RlOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBlbGUubWluaXN0cnlPclN0YXRlSWQgfHwgJycsXG4gICAgICAgICAgICAgICAgcGFyZW50T3JnTmFtZTogZWxlLm1pbmlzdHJ5T3JTdGF0ZU5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZVRyZW1zUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5jcmVhdGVUZXJtKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgZXJyKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY3JlYXRlVHJlbXNSZXMgJiYgY3JlYXRlVHJlbXNSZXMucmVzdWx0ICYmIGNyZWF0ZVRyZW1zUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAgIGNyZWF0ZWROb2RlSWQucHVzaChjcmVhdGVUcmVtc1Jlcy5yZXN1bHQubm9kZV9pZFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVkTm9kZUlkLmxlbmd0aCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGNvbHVtbi5pbmRleCA+MSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFzc29jaWF0aW9uKGNyZWF0ZWROb2RlSWQsIGZyYW1ld29ya0RhdGEsIGNvbHVtbik7XG4gICAgICB9IFxuICAgICAgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFzc29jaWF0aW9uKG5vZGVJZDogYW55LCBmcmFtZXdvcmtEYXRhOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgcHJldjphbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShjb2x1bW4uY29kZSk7XG4gICAgbGV0IHByZXZUcmVtOmFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uKVxuICAgIGxldCBjdXJyZW50VGVybVNlbGVjdGVkOmFueVxuICAgIFxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnN1YnNjcmliZSgoZWxlOmFueSkgPT4ge1xuICAgICAgY3VycmVudFRlcm1TZWxlY3RlZCA9IGVsZS5kYXRhXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0Qm9keTphbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHRlcm06IHtcbiAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IFxuICAgIGlmIChwcmV2VHJlbSAmJiBwcmV2VHJlbSkge1xuICAgICAgcHJldlRyZW0gPSBwcmV2VHJlbS5maWx0ZXIoKGVsZTphbnkpID0+IGVsZS5jYXRlZ29yeSA9PT0gcHJldi5jb2RlKVswXVxuICAgICAgaWYgKHByZXZUcmVtICYmIHByZXZUcmVtLmFzc29jaWF0aW9ucyAmJiBwcmV2VHJlbS5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2VHJlbS5hc3NvY2lhdGlvbnMuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtLmFzc29jaWF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGVsZS5pZGVudGlmaWVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkgXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlSWQgJiYgbm9kZUlkLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGVJZC5mb3JFYWNoKChlbGU6YW55KSA9PiB7XG4gICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgICAgaWRlbnRpZmllcjogZWxlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBmcmFtZXdvcmtEYXRhLmNhdGVnb3J5ID0gcHJldi5jb2RlIHx8ICcnO1xuICAgIGNvbnN0IG5vZGVJZFBhcnRzID0gY3VycmVudFRlcm1TZWxlY3RlZC5pZGVudGlmaWVyLnNwbGl0KCdfJyk7XG4gICAgY29uc3QgY29kZUlkID0gbm9kZUlkUGFydHNbbm9kZUlkUGFydHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgdXBkYXRlQXNzb2NpYXRpb25SZXM6YW55ID0gYXdhaXQgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnVwZGF0ZUZyYW1ld29ya0Fzc29jaWF0aW9uKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhLCBjb2RlSWQpLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiB1cGRhdGluZyBhc3NvY2lhdGlvbicsIGVycik7XG4gICAgfSlcbiAgICBpZiAodXBkYXRlQXNzb2NpYXRpb25SZXMgJiYgdXBkYXRlQXNzb2NpYXRpb25SZXMucmVzdWx0ICYmIHVwZGF0ZUFzc29jaWF0aW9uUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAvLyB0aGlzLnB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMucHVibGlzaEZyZWFtZXdvcmsoZnJhbWV3b3JrRGF0YSkuc3Vic2NyaWJlKChyZXM6YW55KSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5wdWJsaXNoU3RhdHVzKSB7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYCR7cmVzLnJlc3VsdC5wdWJsaXNoU3RhdHVzfWAsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsIGVycik7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgIH0pO1xuICB9XG59IiwiPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgY29ubmVjdGlvblNldHRpbmdzXCI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJuZXdDb25uZWN0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnt7YXBwX3N0cmluZ3MuYnVpbGR9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG48L2Rpdj4gLS0+XG5cbjxkaXYgKm5nSWY9XCJsaXN0ICYmIGxpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggb3ZlcmZsb3ctY29udGFpbmVyXCIgaWQ9XCJ0cmVlVmlld0NvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsaXN0OyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZlbHgtY29sICBjb2wtY29udGFpbmVyIGNvbnRhaW5lcnN7e2xpc3QubGVuZ3RofX1cIiBpZD1cImJveHt7aSsxfX1Db250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXRlZ29yeS1oZWFkZXInPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlci1pdGVtcyB3LWZ1bGxcIiBpZD1cImJveHt7aX19SGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5pY29uRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmNvbmZpZy5jb2xvcn1cIj57e2NvbHVtbi5jb25maWcuaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSBtYXQtYm9keS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4ubmFtZX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbj8uY29uZmlnPy5jYXRlZ29yeURpc3BsYXlOYW1lIHx8IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9IDAgJiYgY2F0ZWdvcnlMaXN0Py5sZW5ndGggPiAwOyBlbHNlIGZpcnN0Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmluZGV4ICE9PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPih7e2dldENvdW50KGNvbHVtbi5jb2RlKX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaXJzdENvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09IDBcIiBpZD1cImJveHt7aSsxfX1jb3VudFwiIGNsYXNzPVwiY291bnRcIj4oe3tjb2x1bW4uY2hpbGRyZW4ubGVuZ3RofX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cIlwiICpuZ0lmPVwiY29sdW1uPy5jb25maWc/LmNyZWF0ZUJ0bkVuYWJsZWQgJiYgIWNvbHVtbj8uY29uZmlnPy5hZGRPcmdFbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogY29uZmlnQ29kZUJ0bj09IGNvbHVtbj8uY29kZSwgJ2J1dHRvbi1kaXNhYmxlZCc6IGNvbmZpZ0NvZGVCdG4hPT0gY29sdW1uPy5jb2RlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNyZWF0ZVRlcm1EaWFsb2coY29sdW1uLCBpKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWQgJiYgIWNvbHVtbj8uY29uZmlnPy5jcmVhdGVCdG5FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGkpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpLCAnYnV0dG9uLWRpc2FibGVkJzogIWlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3dcIiBpZD1cImJveHt7aSsxfX1jb3VudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBQdXQgc2VhcmNoIGJ1dHRvbiBoZXJlIGluIGZ1dHVyZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4uY29kZX19IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZGRpbmcteDIgY2F0LWNvbHVtbnMgY29udGFpbmVyLWJveFwiIGlkPVwiYm94e3tpKzF9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmNoaWxkcmVuICYmIGNvbHVtbj8uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRyZWUtY29sdW1uLXZpZXcgKm5nSWY9XCJsb2FkZWRbY29sdW1uLmNvZGVdXCIgI3NlbGVjdGVkVGF4b25vbXlUZXJtIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcklkXT1cIidib3gnKyhpKzEpXCIgKHVwZGF0ZVRheG9ub215VGVybSk9XCJ1cGRhdGVUYXhvbm9teVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVUZXJtTGlzdCk9XCJ1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKCRldmVudClcIiAoY2FyZHNDb3VudCk9XCJnZXROb09mQ2FyZHMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbGliLXRyZWUtY29sdW1uLXZpZXc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbiwgaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN2Zy1ib3JkZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMxQjIxMzM1MlwiIHN0cm9rZS13aWR0aD1cIjJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiMjAsIDEwXCIgcng9XCIxMFwiIHJ5PVwiMTBcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50IGZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhYy1uby1jb25uZWN0aW9uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tpc0xvYWRpbmd9fSBTZWxlY3QgYW4gb3JnYW5pemF0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKSwgJ2J1dHRvbi1kaXNhYmxlZCc6ICFpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFyZ2luLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaWItYWN0aW9uLWJhciAqbmdJZj1cInNob3dBY3Rpb25CYXJcIiBbYWN0aW9uVHlwZV09XCJpc0FwcHJvdmFsVmlld1wiIFtjb25maWdUeXBlXT1cIndvcmtGbG93U3RhdHVzXCJcbiAgICAgICAgKHNlbmRBcHByb3ZhbCk9XCJzZW5kRm9yQXBwcm92YWwoKVwiIChjbG9zZUFjdGlvbik9XCJjbG9zZUFjdGlvbkJhcigkZXZlbnQpXCI+PC9saWItYWN0aW9uLWJhcj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiEobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDAgKSAmJiBpc0ZyYXdvcmtMb2FkaW5nXCIgY2xhc3M9XCJmbGV4IGhlaWdodEZpeCBcIj5cbiAgICA8aDEgaTE4bj57e2FwcF9zdHJpbmdzLmxvYWRpbmd9fTwvaDE+XG48L2Rpdj4iXX0=
|
|
@@ -10368,11 +10368,11 @@ class TermCardComponent {
|
|
|
10368
10368
|
});
|
|
10369
10369
|
}
|
|
10370
10370
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, deps: [{ token: FrameworkService }, { token: LocalConnectionService }, { token: ApprovalService }, { token: i1$3.MatLegacyDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10371
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description\">{{data.children.description}} </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}}\n </div>\n <div>\n {{data.children.description}}\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#0006;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"], dependencies: [{ kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
10371
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"], dependencies: [{ kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
10372
10372
|
}
|
|
10373
10373
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, decorators: [{
|
|
10374
10374
|
type: Component,
|
|
10375
|
-
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description\">{{data.children.
|
|
10375
|
+
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n </div>\n </div>\n\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n\n <!-- (click)=\"$event.stopPropagation();\" -->\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"updateHierarchy(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"removeConnection(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"manageOrganization(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Manage Organisation</span>\n </button> -->\n </ng-template>\n</mat-menu>", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 0 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}\n"] }]
|
|
10376
10376
|
}], ctorParameters: function () { return [{ type: FrameworkService }, { type: LocalConnectionService }, { type: ApprovalService }, { type: i1$3.MatLegacyDialog }]; }, propDecorators: { data: [{
|
|
10377
10377
|
type: Input
|
|
10378
10378
|
}], isSelected: [{
|
|
@@ -11079,12 +11079,13 @@ class TreeViewComponent {
|
|
|
11079
11079
|
}
|
|
11080
11080
|
return false;
|
|
11081
11081
|
}
|
|
11082
|
-
createTerms(selectedList, column) {
|
|
11082
|
+
async createTerms(selectedList, column) {
|
|
11083
11083
|
const frameworkData = {
|
|
11084
11084
|
id: this.orgSelectedData.orgHierarchyFrameworkId || '',
|
|
11085
11085
|
category: column.code || '',
|
|
11086
11086
|
};
|
|
11087
|
-
|
|
11087
|
+
let createdNodeId = [];
|
|
11088
|
+
for await (const ele of selectedList) {
|
|
11088
11089
|
const requestBody = {
|
|
11089
11090
|
request: {
|
|
11090
11091
|
term: {
|
|
@@ -11102,29 +11103,59 @@ class TreeViewComponent {
|
|
|
11102
11103
|
console.error('Error in creating term', err);
|
|
11103
11104
|
});
|
|
11104
11105
|
if (createTremsRes && createTremsRes.result && createTremsRes.result.node_id) {
|
|
11105
|
-
|
|
11106
|
+
createdNodeId.push(createTremsRes.result.node_id[0]);
|
|
11106
11107
|
}
|
|
11107
|
-
|
|
11108
|
+
else {
|
|
11109
|
+
this._snackBar.open('Error in creating term', 'cancel');
|
|
11110
|
+
this.treeHierarchySvc.setLoaderState(false);
|
|
11111
|
+
return;
|
|
11112
|
+
}
|
|
11113
|
+
}
|
|
11114
|
+
if (createdNodeId.length === selectedList.length) {
|
|
11115
|
+
if (column.index > 1) {
|
|
11116
|
+
await this.updateAssociation(createdNodeId, frameworkData, column);
|
|
11117
|
+
}
|
|
11118
|
+
this.publishFramework(frameworkData);
|
|
11119
|
+
}
|
|
11108
11120
|
}
|
|
11109
|
-
async updateAssociation(nodeId, frameworkData) {
|
|
11121
|
+
async updateAssociation(nodeId, frameworkData, column) {
|
|
11122
|
+
const prev = this.frameworkService.getPreviousCategory(column.code);
|
|
11123
|
+
let prevTrem = this.frameworkService.getPreviousSelectedTerms(column);
|
|
11124
|
+
let currentTermSelected;
|
|
11125
|
+
this.frameworkService.currentSelection.subscribe((ele) => {
|
|
11126
|
+
currentTermSelected = ele.data;
|
|
11127
|
+
});
|
|
11110
11128
|
const requestBody = {
|
|
11111
11129
|
request: {
|
|
11112
11130
|
term: {
|
|
11113
|
-
associations: [
|
|
11114
|
-
{
|
|
11115
|
-
identifier: nodeId
|
|
11116
|
-
},
|
|
11117
|
-
]
|
|
11131
|
+
associations: []
|
|
11118
11132
|
}
|
|
11119
11133
|
}
|
|
11120
11134
|
};
|
|
11121
|
-
|
|
11135
|
+
if (prevTrem && prevTrem) {
|
|
11136
|
+
prevTrem = prevTrem.filter((ele) => ele.category === prev.code)[0];
|
|
11137
|
+
if (prevTrem && prevTrem.associations && prevTrem.associations.length > 0) {
|
|
11138
|
+
prevTrem.associations.forEach((ele) => {
|
|
11139
|
+
requestBody.request.term.associations.push({
|
|
11140
|
+
identifier: ele.identifier
|
|
11141
|
+
});
|
|
11142
|
+
});
|
|
11143
|
+
}
|
|
11144
|
+
}
|
|
11145
|
+
if (nodeId && nodeId.length > 0) {
|
|
11146
|
+
nodeId.forEach((ele) => {
|
|
11147
|
+
requestBody.request.term.associations.push({
|
|
11148
|
+
identifier: ele
|
|
11149
|
+
});
|
|
11150
|
+
});
|
|
11151
|
+
}
|
|
11152
|
+
frameworkData.category = prev.code || '';
|
|
11153
|
+
const nodeIdParts = currentTermSelected.identifier.split('_');
|
|
11122
11154
|
const codeId = nodeIdParts[nodeIdParts.length - 1];
|
|
11123
11155
|
const updateAssociationRes = await this.treeHierarchySvc.updateFrameworkAssociation(requestBody, frameworkData, codeId).toPromise().catch(err => {
|
|
11124
11156
|
console.error('Error in updating association', err);
|
|
11125
11157
|
});
|
|
11126
11158
|
if (updateAssociationRes && updateAssociationRes.result && updateAssociationRes.result.node_id) {
|
|
11127
|
-
this.publishFramework(frameworkData);
|
|
11128
11159
|
}
|
|
11129
11160
|
}
|
|
11130
11161
|
publishFramework(frameworkData) {
|