@eo-sdk/client 11.2.1 → 11.2.3
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/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +1 -1
- package/assets/_default/i18n/en.json +1 -1
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +2 -2
- package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +4 -3
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.mjs +5 -5
- package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +3 -3
- package/esm2022/app/eo-framework/grid/grid.component.mjs +5 -4
- package/esm2022/app/eo-framework/grid/row-grouping/group-stage.mjs +9 -9
- package/esm2022/app/eo-framework/grid/row-grouping/row-grouping.module.mjs +2 -2
- package/esm2022/app/eo-framework/object-details/object-links/object-links.component.mjs +1 -1
- package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +1 -1
- package/fesm2022/eo-sdk-client.mjs +33 -32
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/misc/scripts/prebuild-about-state.js +13 -10
- package/package.json +7 -7
|
@@ -46,13 +46,13 @@ let GroupStage = class GroupStage extends BeanStub {
|
|
|
46
46
|
}
|
|
47
47
|
createGroupingDetails(params) {
|
|
48
48
|
const { rowNode, changedPath, rowNodeTransactions, rowNodeOrder } = params;
|
|
49
|
-
const usingTreeData = this.
|
|
49
|
+
const usingTreeData = this.gos.get('treeData');
|
|
50
50
|
const groupedCols = usingTreeData ? null : this.columnModel.getRowGroupColumns();
|
|
51
51
|
const details = {
|
|
52
52
|
// someone complained that the parent attribute was causing some change detection
|
|
53
53
|
// to break in an angular add-on. Taking the parent out breaks a cyclic dependency, hence this flag got introduced.
|
|
54
|
-
includeParents: !this.
|
|
55
|
-
expandByDefault: this.
|
|
54
|
+
includeParents: !this.gos.get('suppressParentsInRowNodes'),
|
|
55
|
+
expandByDefault: this.gos.get('groupDefaultExpanded'),
|
|
56
56
|
groupedCols: groupedCols,
|
|
57
57
|
rootNode: rowNode,
|
|
58
58
|
pivotMode: this.columnModel.isPivotMode(),
|
|
@@ -61,12 +61,12 @@ let GroupStage = class GroupStage extends BeanStub {
|
|
|
61
61
|
transactions: rowNodeTransactions,
|
|
62
62
|
// if no transaction, then it's shotgun, changed path would be 'not active' at this point anyway
|
|
63
63
|
changedPath: changedPath,
|
|
64
|
-
groupAllowUnbalanced: this.
|
|
65
|
-
isGroupOpenByDefault: this.
|
|
66
|
-
initialGroupOrderComparator: this.
|
|
64
|
+
groupAllowUnbalanced: this.gos.get('groupAllowUnbalanced'),
|
|
65
|
+
isGroupOpenByDefault: this.gos.getCallback('isGroupOpenByDefault'),
|
|
66
|
+
initialGroupOrderComparator: this.gos.getCallback('initialGroupOrderComparator'),
|
|
67
67
|
usingTreeData: usingTreeData,
|
|
68
|
-
suppressGroupMaintainValueType: this.
|
|
69
|
-
getDataPath: usingTreeData ? this.
|
|
68
|
+
suppressGroupMaintainValueType: this.gos.get('suppressGroupMaintainValueType'),
|
|
69
|
+
getDataPath: usingTreeData ? this.gos.get('getDataPath') : undefined,
|
|
70
70
|
keyCreators: groupedCols?.map(column => column.getColDef().keyCreator) ?? []
|
|
71
71
|
};
|
|
72
72
|
return details;
|
|
@@ -620,4 +620,4 @@ GroupStage = __decorate([
|
|
|
620
620
|
Bean('groupStage')
|
|
621
621
|
], GroupStage);
|
|
622
622
|
export { GroupStage };
|
|
623
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9ncmlkL3Jvdy1ncm91cGluZy9ncm91cC1zdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILENBQUMsRUFDRCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFPUixPQUFPLEVBV1YsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUErQnZDLElBQU0sVUFBVSxHQUFoQixNQUFNLFVBQVcsU0FBUSxRQUFRO0lBaUI3QixPQUFPLENBQUMsTUFBMEI7UUFFckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQztZQUM3RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBWSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFdBQXdCO1FBQ25ELFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMzQixNQUFNLFNBQVMsR0FBYyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFjLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxjQUFtQyxDQUFDO2dCQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUNwQyxjQUFjLEdBQUcsR0FBRyxDQUFDO3dCQUN6QixDQUFDOzZCQUFNLENBQUM7NEJBQ0osVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDekIsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBRUQsS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQTBCO1FBQ3BELE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUUzRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFakYsTUFBTSxPQUFPLEdBQW9CO1lBQzdCLGlGQUFpRjtZQUNqRixvSEFBb0g7WUFDcEgsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztZQUN6RSxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztZQUNwRSxXQUFXLEVBQUUsV0FBWTtZQUN6QixRQUFRLEVBQUUsT0FBTztZQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDekMsZUFBZSxFQUFFLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUN2RSxZQUFZLEVBQUUsWUFBYTtZQUMzQixZQUFZLEVBQUUsbUJBQW9CO1lBQ2xDLGdHQUFnRztZQUNoRyxXQUFXLEVBQUUsV0FBWTtZQUN6QixvQkFBb0IsRUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO1lBQzFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQVE7WUFDeEYsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBUTtZQUN0RyxhQUFhLEVBQUUsYUFBYTtZQUM1Qiw4QkFBOEIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1lBQzdGLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkYsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtTQUMvRSxDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQXdCO1FBRTlDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLDZFQUE2RTtZQUM3RSxrRkFBa0Y7WUFDbEYsaUZBQWlGO1lBQ2pGLHNGQUFzRjtZQUN0Rix1RkFBdUY7WUFDdkYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFN0UsNEZBQTRGO1lBQzVGLDRGQUE0RjtZQUM1RixlQUFlO1lBQ2YsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQW1CLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFtQixFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQWdCLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxvRUFBb0U7WUFDcEUsMEVBQTBFO1lBQzFFLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSwwQkFBMEIsR0FBRyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDdEUsWUFBWSxDQUFDLE9BQXdCO1FBQ3pDLE9BQU8sQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMzQixPQUFPO1lBQ1gsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQW1CLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RGLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNMLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUF3QjtRQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUM7UUFDdkQsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUU5RCxTQUFTLGFBQWEsQ0FBQyxPQUFnQjtZQUNuQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDL0MsNEZBQTRGO2dCQUM1RixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFFdkIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxPQUFPLENBQUMsa0JBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEYsT0FBTyxDQUFDLGtCQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWtCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQWEsRUFBRSxPQUF3QjtRQUNsRSxNQUFNLEdBQUcsR0FBZ0IsRUFBRSxDQUFDO1FBRTVCLHNEQUFzRDtRQUN0RCw4RkFBOEY7UUFDOUYsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pELE9BQU8sT0FBTyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDTCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUk7Z0JBQ2pCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFDRCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxVQUFxQixFQUFFLE9BQXdCLEVBQUUsWUFBc0M7UUFDaEgsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUUzQixzRUFBc0U7WUFDdEUsNENBQTRDO1lBQzVDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVyRixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXZELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFFBQVEsQ0FBQyxTQUFrQixFQUFFLE9BQXdCLEVBQUUsWUFBc0M7UUFFakcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFM0QsZ0dBQWdHO1FBQ2hHLDBCQUEwQjtRQUMxQix5RkFBeUY7UUFDekYsK0ZBQStGO1FBQy9GLG1EQUFtRDtRQUNuRCxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQyxzRkFBc0Y7UUFDdEYsdUZBQXVGO1FBQ3ZGLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsWUFBdUIsRUFBRSxPQUF3QixFQUFFLFlBQXNDO1FBQ3pHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFlBQXVCLEVBQUUsT0FBd0IsRUFBRSxZQUFzQztRQUNqSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXhELCtGQUErRjtZQUMvRiw2RkFBNkY7WUFDN0YsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBd0IsRUFBRSxLQUFjLEVBQUUsUUFBbUM7UUFDcEcsSUFBSSxPQUFPLEdBQW1CLEtBQUssQ0FBQztRQUNwQyxPQUFPLE9BQU8sSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGFBQXdCLEVBQUUsT0FBd0IsRUFBRSxRQUFrQztRQUNqSCx1R0FBdUc7UUFDdkcseUdBQXlHO1FBQ3pHLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5FLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXZELGtGQUFrRjtZQUNsRiw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNoRSxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLGFBQXdCLEVBQUUsT0FBd0I7UUFDbEYsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUVqQyw0RUFBNEU7WUFDNUUsa0VBQWtFO1lBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkUsbUZBQW1GO2dCQUNuRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFNUUsbUZBQW1GO2dCQUNuRixzQ0FBc0M7Z0JBQ3RDLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsWUFBWSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO2dCQUM1RCxZQUFZLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDO2dCQUNsRSxZQUFZLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFELFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUVqQyxZQUFZLENBQUMsa0JBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBRUwsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCLENBQUMsbUJBQThCLEVBQUUsT0FBd0I7UUFDOUUsNkZBQTZGO1FBQzdGLGdHQUFnRztRQUNoRyxrR0FBa0c7UUFDbEcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXRCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFnQixFQUFXLEVBQUU7WUFFdkQsNEVBQTRFO1lBQzVFLGlEQUFpRDtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUksRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0UsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVqRCxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLGdEQUFnRDtnQkFDaEQsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztZQUNELDhEQUE4RDtZQUM5RCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUM7UUFFRixPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDbkIsTUFBTSxZQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdEQsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQzdDLHNCQUFzQjtnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDM0QsSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO3dCQUM3QyxrRkFBa0Y7d0JBQ2xGLDZFQUE2RTt3QkFDN0UsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO29CQUM5RSxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsNkZBQTZGO0lBQzdGLGdEQUFnRDtJQUNoRCw0RkFBNEY7SUFDNUYscUVBQXFFO0lBQzdELGdCQUFnQixDQUFDLEtBQWMsRUFBRSxZQUEyQjtRQUNoRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNFLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzlDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsK0ZBQStGO1FBQy9GLG1GQUFtRjtRQUNuRixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFjLEVBQUUsTUFBc0I7UUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQztZQUMvQyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxjQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzNDLENBQUM7WUFDRCxNQUFNLENBQUMsa0JBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsRUFBbUIsRUFBRSxFQUFtQjtRQUM5RCxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUVoRixPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU8saUNBQWlDLENBQUMsT0FBd0I7UUFFOUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUEwQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUFDLE9BQU87WUFBQyxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzVELElBQUksVUFBVSxFQUFFLENBQUM7b0JBQUMsT0FBTztnQkFBQyxDQUFDO2dCQUMzQixNQUFNLFNBQVMsR0FBYztvQkFDekIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUNwQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUk7b0JBQ2pCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztvQkFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2lCQUN2QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBd0IsRUFBRSxtQkFBNEI7UUFFakYsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPO1FBQ1gsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRixNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMxQyx5RUFBeUU7UUFDekUsaUNBQWlDO1FBQ2pDLG1HQUFtRztRQUNuRyw4RkFBOEY7UUFDOUYsUUFBUSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBRTlFLHlHQUF5RztRQUN6RyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQzdCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDekQsT0FBTyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxPQUF3QixFQUFFLG1CQUE0QjtRQUNwRixJQUFJLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUV0QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RSxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDLENBQUM7WUFDL0MsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFM0QsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLDRFQUE0RTtZQUM1RSxtQ0FBbUM7WUFDbkMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTlHLG1GQUFtRjtZQUNuRiw0Q0FBNEM7WUFDNUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFFbkQsT0FBTyx5QkFBeUIsQ0FBQztJQUNyQyxDQUFDO0lBRU8sV0FBVyxDQUFDLFdBQXNCLEVBQUUsT0FBd0IsRUFBRSxNQUFlO1FBQ2pGLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFrQixFQUFFLE9BQXdCLEVBQUUsTUFBZSxFQUFFLFlBQTJCO1FBRTVHLE1BQU0sSUFBSSxHQUFnQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxFQUM1RSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELENBQUM7YUFBTSxDQUFDO1lBQ0osU0FBUyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDL0IsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxrQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEQsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFrQixFQUFFLElBQWlCLEVBQUUsT0FBd0IsRUFBRSxZQUEyQjtRQUNsSCxJQUFJLFFBQVEsR0FBWSxPQUFPLENBQUMsUUFBUSxDQUFDO1FBRXpDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RSxzQ0FBc0M7WUFDdEMsdUZBQXVGO1lBRXZGLElBQUksQ0FBQyxZQUFZLEVBQUUsMkJBQTJCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixvREFBb0Q7Z0JBQ3BELFlBQVksRUFBRSxnQ0FBZ0MsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFdBQW9CLEVBQUUsU0FBa0IsRUFBRSxNQUFlO1FBQ25GLFNBQVMsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN0QyxTQUFTLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDaEMsU0FBUyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUM1QyxTQUFTLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDcEMsMEZBQTBGO1FBQzFGLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDVixTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDOUMsQ0FBQztRQUVELG1HQUFtRztRQUNuRyw4RkFBOEY7UUFDOUYsU0FBUyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBRTVDLGtGQUFrRjtRQUNsRixTQUFTLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFcEQsU0FBUyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ3hELFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsU0FBUyxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsU0FBUyxDQUFDLGtCQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxXQUFvQixFQUFFLFNBQW9CLEVBQUUsS0FBYSxFQUNqRixPQUF3QjtRQUV4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0UsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRXhGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNaLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFvQixFQUFFLE1BQWUsRUFBRSxLQUFhLEVBQUUsT0FBd0I7UUFDOUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNsQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFFcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWpELFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUM5QixTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRW5GLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTlGLFNBQVMsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRS9CLDBFQUEwRTtRQUMxRSxnREFBZ0Q7UUFDaEQsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFL0QsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxTQUFTLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUM5QixTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU5QixTQUFTLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTFELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFakQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFhLEVBQUUsTUFBZSxFQUFFLGFBQXNCLEVBQUUsS0FBYTtRQUN2RixJQUFJLGFBQXNGLENBQUM7UUFDM0YsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFBQyxPQUFPLElBQUksQ0FBQztnQkFBQyxDQUFDLENBQUMsWUFBWTtnQkFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pGLE9BQU8sR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzRSxDQUFDLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNKLGFBQWEsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFBQyxPQUFPLElBQUksQ0FBQztnQkFBQyxDQUFDLENBQUMsWUFBWTtnQkFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDekUsT0FBTyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwRyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsaUhBQWlIO1FBQ2pILHlDQUF5QztRQUN6QyxPQUFPLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sWUFBWSxDQUFDLFNBQWtCLEVBQUUsU0FBb0IsRUFBRSxPQUF3QjtRQUNuRixTQUFTLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLGdCQUFnQixHQUFhLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM3RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsK0dBQStHO1lBQy9HLHlHQUF5RztZQUN6RyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsU0FBUyxDQUFDLFNBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO2dCQUNyRCxPQUFPO1lBQ1gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLElBQUksT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUM7b0JBQ3pDLFNBQVMsQ0FBQyxTQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztnQkFDekQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLGtFQUFrRTtvQkFDbEUsU0FBUyxDQUFDLFNBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxjQUE2QjtRQUNuRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLHNCQUFzQjtZQUN0QixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzlDLENBQUM7UUFDRCw0Q0FBNEM7UUFDNUMsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBd0IsRUFBRSxTQUFrQjtRQUN4RSwyRUFBMkU7UUFDM0UsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUMzQixPQUFPO1FBQ1gsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDbEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFrRDtnQkFDMUQsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBTTtnQkFDdkIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFJO2dCQUNuQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7Z0JBQ3RCLGNBQWMsRUFBRSxTQUFTLENBQUMsY0FBZTthQUM1QyxDQUFDO1lBQ0YsU0FBUyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDO1lBQ2xELE9BQU87UUFDWCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7UUFFRCxZQUFZO1FBQ1osU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUMzRCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQWdCLEVBQUUsT0FBd0I7UUFDM0QsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE9BQWdCLEVBQUUsT0FBd0I7UUFDdkUsTUFBTSxJQUFJLEdBQW9CLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFN0YsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxDQUFDLENBQUMsUUFBUSxDQUFDLDBEQUEwRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFjLENBQUM7UUFDMUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsT0FBZ0IsRUFBRSxPQUF3QjtRQUMzRSxNQUFNLEdBQUcsR0FBZ0IsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUVoRSxnR0FBZ0c7WUFDaEcsMkdBQTJHO1lBQzNHLHdFQUF3RTtZQUN4RSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDL0UsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQztZQUVELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEdBQUc7b0JBQ1QsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLO29CQUNqQyxjQUFjLEVBQUUsUUFBUTtvQkFDeEIsUUFBUSxFQUFFLE9BQU87aUJBQ1AsQ0FBQztnQkFDZixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUF2c0JxQztJQUFqQyxTQUFTLENBQUMsYUFBYSxDQUFDOytDQUFrQztBQUNuQjtJQUF2QyxTQUFTLENBQUMsbUJBQW1CLENBQUM7cURBQThDO0FBQzFDO0lBQWxDLFNBQVMsQ0FBQyxjQUFjLENBQUM7Z0RBQW9DO0FBQ2xDO0lBQTNCLFNBQVMsQ0FBQyxPQUFPLENBQUM7eUNBQXNCO0FBQ0Y7SUFBdEMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO29EQUE2QztBQU5sRSxVQUFVO0lBRHRCLElBQUksQ0FBQyxZQUFZLENBQUM7R0FDTixVQUFVLENBeXNCdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIF8sXG4gICAgQXV0b3dpcmVkLFxuICAgIEJlYW4sXG4gICAgQmVhblN0dWIsXG4gICAgQ2hhbmdlZFBhdGgsXG4gICAgQ29sdW1uLFxuICAgIENvbHVtbk1vZGVsLFxuICAgIEdldERhdGFQYXRoLFxuICAgIElSb3dOb2RlU3RhZ2UsXG4gICAgSXNHcm91cE9wZW5CeURlZmF1bHRQYXJhbXMsXG4gICAgUm93Tm9kZSxcbiAgICBSb3dOb2RlVHJhbnNhY3Rpb24sXG4gICAgU2VsZWN0YWJsZVNlcnZpY2UsXG4gICAgU3RhZ2VFeGVjdXRlUGFyYW1zLFxuICAgIFZhbHVlU2VydmljZSxcbiAgICBCZWFucyxcbiAgICBJU2VsZWN0aW9uU2VydmljZSxcbiAgICBXaXRob3V0R3JpZENvbW1vbixcbiAgICBJbml0aWFsR3JvdXBPcmRlckNvbXBhcmF0b3JQYXJhbXMsXG4gICAgR3JpZE9wdGlvbnMsXG4gICAgS2V5Q3JlYXRvclBhcmFtc1xufSBmcm9tIFwiQGFnLWdyaWQtY29tbXVuaXR5L2NvcmVcIjtcbmltcG9ydCB7IEJhdGNoUmVtb3ZlciB9IGZyb20gXCIuL2JhdGNoUmVtb3ZlclwiO1xuXG5pbnRlcmZhY2UgR3JvdXBJbmZvIHtcbiAgICBrZXk6IHN0cmluZzsgLy8gZS5nLiAnSXJlbGFuZCdcbiAgICBmaWVsZDogc3RyaW5nIHwgbnVsbDsgLy8gZS5nLiAnY291bnRyeSdcbiAgICByb3dHcm91cENvbHVtbjogQ29sdW1uIHwgbnVsbDtcbiAgICBsZWFmTm9kZT86IFJvd05vZGU7XG59XG5cbmludGVyZmFjZSBHcm91cGluZ0RldGFpbHMge1xuICAgIHBpdm90TW9kZTogYm9vbGVhbjtcbiAgICBpbmNsdWRlUGFyZW50czogYm9vbGVhbjtcbiAgICBleHBhbmRCeURlZmF1bHQ6IG51bWJlcjtcbiAgICBjaGFuZ2VkUGF0aDogQ2hhbmdlZFBhdGg7XG4gICAgcm9vdE5vZGU6IFJvd05vZGU7XG4gICAgZ3JvdXBlZENvbHM6IENvbHVtbltdO1xuICAgIGdyb3VwZWRDb2xDb3VudDogbnVtYmVyO1xuICAgIHRyYW5zYWN0aW9uczogUm93Tm9kZVRyYW5zYWN0aW9uW107XG4gICAgcm93Tm9kZU9yZGVyOiB7IFtpZDogc3RyaW5nXTogbnVtYmVyOyB9O1xuICAgIFxuICAgIGdyb3VwQWxsb3dVbmJhbGFuY2VkOiBib29sZWFuO1xuICAgIGlzR3JvdXBPcGVuQnlEZWZhdWx0OiAocGFyYW1zOiBXaXRob3V0R3JpZENvbW1vbjxJc0dyb3VwT3BlbkJ5RGVmYXVsdFBhcmFtcz4pID0+IGJvb2xlYW47XG4gICAgaW5pdGlhbEdyb3VwT3JkZXJDb21wYXJhdG9yOiAocGFyYW1zOiBXaXRob3V0R3JpZENvbW1vbjxJbml0aWFsR3JvdXBPcmRlckNvbXBhcmF0b3JQYXJhbXM+KSA9PiBudW1iZXI7XG4gICAgXG4gICAgdXNpbmdUcmVlRGF0YTogYm9vbGVhbjtcbiAgICBzdXBwcmVzc0dyb3VwTWFpbnRhaW5WYWx1ZVR5cGU6IGJvb2xlYW47XG4gICAgZ2V0RGF0YVBhdGg6IEdldERhdGFQYXRoIHwgdW5kZWZpbmVkO1xuICAgIGtleUNyZWF0b3JzOiAoKChwYXJhbXM6IEtleUNyZWF0b3JQYXJhbXMpID0+IHN0cmluZykgfCB1bmRlZmluZWQpW107XG59XG5cbkBCZWFuKCdncm91cFN0YWdlJylcbmV4cG9ydCBjbGFzcyBHcm91cFN0YWdlIGV4dGVuZHMgQmVhblN0dWIgaW1wbGVtZW50cyBJUm93Tm9kZVN0YWdlIHtcblxuICAgIEBBdXRvd2lyZWQoJ2NvbHVtbk1vZGVsJykgcHJpdmF0ZSBjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw7XG4gICAgQEF1dG93aXJlZCgnc2VsZWN0YWJsZVNlcnZpY2UnKSBwcml2YXRlIHNlbGVjdGFibGVTZXJ2aWNlOiBTZWxlY3RhYmxlU2VydmljZTtcbiAgICBAQXV0b3dpcmVkKCd2YWx1ZVNlcnZpY2UnKSBwcml2YXRlIHZhbHVlU2VydmljZTogVmFsdWVTZXJ2aWNlO1xuICAgIEBBdXRvd2lyZWQoJ2JlYW5zJykgcHJpdmF0ZSBiZWFuczogQmVhbnM7XG4gICAgQEF1dG93aXJlZCgnc2VsZWN0aW9uU2VydmljZScpIHByaXZhdGUgc2VsZWN0aW9uU2VydmljZTogSVNlbGVjdGlvblNlcnZpY2U7XG5cbiAgICAvLyB3aGVuIGdyb3VwaW5nLCB0aGVzZSBpdGVtcyBhcmUgb2Ygbm90ZTpcbiAgICAvLyByb3dOb2RlLnBhcmVudDogUm93Tm9kZTogc2V0IHRvIHRoZSBwYXJlbnRcbiAgICAvLyByb3dOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cDogUm93Tm9kZVtdID0gdGhlIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGdyb3VwXG4gICAgLy8gcm93Tm9kZS5jaGlsZHJlbk1hcHBlZDogc3RyaW5nPT5Sb3dOb2RlID0gY2hpbGRyZW4gbWFwcGVkIGJ5IGdyb3VwIGtleSAod2hlbiBncm91cHMpIG9yIGFuIGVtcHR5IG1hcCBpZiBsZWFmIGdyb3VwICh0aGlzIGlzIHRoZW4gdXNlZCBieSBwaXZvdClcbiAgICAvLyBmb3IgbGVhZiBncm91cHMsIHJvd05vZGUuY2hpbGRyZW5BZnRlckdyb3VwID0gcm93Tm9kZS5hbGxMZWFmQ2hpbGRyZW47XG5cbiAgICBwcml2YXRlIG9sZEdyb3VwaW5nRGV0YWlsczogR3JvdXBpbmdEZXRhaWxzO1xuICAgIHByaXZhdGUgb2xkR3JvdXBEaXNwbGF5Q29sSWRzOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZXhlY3V0ZShwYXJhbXM6IFN0YWdlRXhlY3V0ZVBhcmFtcyk6IHZvaWQge1xuXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmNyZWF0ZUdyb3VwaW5nRGV0YWlscyhwYXJhbXMpO1xuXG4gICAgICAgIGlmIChkZXRhaWxzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVUcmFuc2FjdGlvbihkZXRhaWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyQ29sc0NoYW5nZWQgPSBwYXJhbXMuYWZ0ZXJDb2x1bW5zQ2hhbmdlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvdGd1blJlc2V0RXZlcnl0aGluZyhkZXRhaWxzLCBhZnRlckNvbHNDaGFuZ2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV0YWlscy51c2luZ1RyZWVEYXRhKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBkbyBncm91cCBzb3J0aW5nIGZvciB0cmVlIGRhdGFcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25MZWFmc0FuZEdyb3VwcyhwYXJhbXMuY2hhbmdlZFBhdGghKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXJHcm91cHMoZGV0YWlscyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGFibGVTZXJ2aWNlLnVwZGF0ZVNlbGVjdGFibGVBZnRlckdyb3VwaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkxlYWZzQW5kR3JvdXBzKGNoYW5nZWRQYXRoOiBDaGFuZ2VkUGF0aCkge1xuICAgICAgICBjaGFuZ2VkUGF0aC5mb3JFYWNoQ2hhbmdlZE5vZGVEZXB0aEZpcnN0KGdyb3VwID0+IHtcbiAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbkFmdGVyR3JvdXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWFmTm9kZXM6IFJvd05vZGVbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXM6IFJvd05vZGVbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCB1bmJhbGFuY2VkTm9kZTogUm93Tm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93LmNoaWxkcmVuQWZ0ZXJHcm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmTm9kZXMucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09ICcnICYmICF1bmJhbGFuY2VkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuYmFsYW5jZWROb2RlID0gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cE5vZGVzLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVuYmFsYW5jZWROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZXMucHVzaCh1bmJhbGFuY2VkTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IFsuLi5sZWFmTm9kZXMsIC4uLmdyb3VwTm9kZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cGluZ0RldGFpbHMocGFyYW1zOiBTdGFnZUV4ZWN1dGVQYXJhbXMpOiBHcm91cGluZ0RldGFpbHMge1xuICAgICAgICBjb25zdCB7IHJvd05vZGUsIGNoYW5nZWRQYXRoLCByb3dOb2RlVHJhbnNhY3Rpb25zLCByb3dOb2RlT3JkZXIgfSA9IHBhcmFtcztcblxuICAgICAgICBjb25zdCB1c2luZ1RyZWVEYXRhID0gdGhpcy5ncmlkT3B0aW9uc1NlcnZpY2UuZ2V0KCd0cmVlRGF0YScpO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwZWRDb2xzID0gdXNpbmdUcmVlRGF0YSA/IG51bGwgOiB0aGlzLmNvbHVtbk1vZGVsLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuXG4gICAgICAgIGNvbnN0IGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyA9IHtcbiAgICAgICAgICAgIC8vIHNvbWVvbmUgY29tcGxhaW5lZCB0aGF0IHRoZSBwYXJlbnQgYXR0cmlidXRlIHdhcyBjYXVzaW5nIHNvbWUgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgICAgLy8gdG8gYnJlYWsgaW4gYW4gYW5ndWxhciBhZGQtb24uICBUYWtpbmcgdGhlIHBhcmVudCBvdXQgYnJlYWtzIGEgY3ljbGljIGRlcGVuZGVuY3ksIGhlbmNlIHRoaXMgZmxhZyBnb3QgaW50cm9kdWNlZC5cbiAgICAgICAgICAgIGluY2x1ZGVQYXJlbnRzOiAhdGhpcy5ncmlkT3B0aW9uc1NlcnZpY2UuZ2V0KCdzdXBwcmVzc1BhcmVudHNJblJvd05vZGVzJyksXG4gICAgICAgICAgICBleHBhbmRCeURlZmF1bHQ6IHRoaXMuZ3JpZE9wdGlvbnNTZXJ2aWNlLmdldCgnZ3JvdXBEZWZhdWx0RXhwYW5kZWQnKSxcbiAgICAgICAgICAgIGdyb3VwZWRDb2xzOiBncm91cGVkQ29scyEsXG4gICAgICAgICAgICByb290Tm9kZTogcm93Tm9kZSxcbiAgICAgICAgICAgIHBpdm90TW9kZTogdGhpcy5jb2x1bW5Nb2RlbC5pc1Bpdm90TW9kZSgpLFxuICAgICAgICAgICAgZ3JvdXBlZENvbENvdW50OiB1c2luZ1RyZWVEYXRhIHx8ICFncm91cGVkQ29scyA/IDAgOiBncm91cGVkQ29scy5sZW5ndGgsXG4gICAgICAgICAgICByb3dOb2RlT3JkZXI6IHJvd05vZGVPcmRlciEsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbnM6IHJvd05vZGVUcmFuc2FjdGlvbnMhLFxuICAgICAgICAgICAgLy8gaWYgbm8gdHJhbnNhY3Rpb24sIHRoZW4gaXQncyBzaG90Z3VuLCBjaGFuZ2VkIHBhdGggd291bGQgYmUgJ25vdCBhY3RpdmUnIGF0IHRoaXMgcG9pbnQgYW55d2F5XG4gICAgICAgICAgICBjaGFuZ2VkUGF0aDogY2hhbmdlZFBhdGghLFxuICAgICAgICAgICAgZ3JvdXBBbGxvd1VuYmFsYW5jZWQ6ICB0aGlzLmdyaWRPcHRpb25zU2VydmljZS5nZXQoJ2dyb3VwQWxsb3dVbmJhbGFuY2VkJyksXG4gICAgICAgICAgICBpc0dyb3VwT3BlbkJ5RGVmYXVsdDogdGhpcy5ncmlkT3B0aW9uc1NlcnZpY2UuZ2V0Q2FsbGJhY2soJ2lzR3JvdXBPcGVuQnlEZWZhdWx0JykgYXMgYW55LFxuICAgICAgICAgICAgaW5pdGlhbEdyb3VwT3JkZXJDb21wYXJhdG9yOiB0aGlzLmdyaWRPcHRpb25zU2VydmljZS5nZXRDYWxsYmFjaygnaW5pdGlhbEdyb3VwT3JkZXJDb21wYXJhdG9yJykgYXMgYW55LFxuICAgICAgICAgICAgdXNpbmdUcmVlRGF0YTogdXNpbmdUcmVlRGF0YSxcbiAgICAgICAgICAgIHN1cHByZXNzR3JvdXBNYWludGFpblZhbHVlVHlwZTogdGhpcy5ncmlkT3B0aW9uc1NlcnZpY2UuZ2V0KCdzdXBwcmVzc0dyb3VwTWFpbnRhaW5WYWx1ZVR5cGUnKSxcbiAgICAgICAgICAgIGdldERhdGFQYXRoOiB1c2luZ1RyZWVEYXRhID8gdGhpcy5ncmlkT3B0aW9uc1NlcnZpY2UuZ2V0KCdnZXREYXRhUGF0aCcpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5Q3JlYXRvcnM6IGdyb3VwZWRDb2xzPy5tYXAoY29sdW1uID0+IGNvbHVtbi5nZXRDb2xEZWYoKS5rZXlDcmVhdG9yKSA/PyBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVHJhbnNhY3Rpb24oZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG5cbiAgICAgICAgZGV0YWlscy50cmFuc2FjdGlvbnMuZm9yRWFjaCh0cmFuID0+IHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGFsbG93IGJhdGNoIHJlbW92ZXIgZm9yIHRyZWUgZGF0YSBhcyB0cmVlIGRhdGEgdXNlcyBGaWxsZXIgTm9kZXMsXG4gICAgICAgICAgICAvLyBhbmQgY3JlYXRpbmcvZGVsZXRpbmcgZmlsbGVyIG5vZGVzIG5lZWRzIHRvIGJlIGRvbmUgYWxvbmdzaWRlIHRoZSBub2RlIGRlbGV0aW5nXG4gICAgICAgICAgICAvLyBhbmQgbW92aW5nLiBpZiB3ZSB3YW50IHRvIEJhdGNoIFJlbW92ZXIgd29ya2luZyB3aXRoIHRyZWUgZGF0YSB0aGVuIHdvdWxkIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIGNvbnNpZGVyIGhvdyBGaWxsZXIgTm9kZXMgd291bGQgYmUgaW1wYWN0ZWQgKGl0J3MgcG9zc2libGUgdGhhdCBpdCBjYW4gYmUgZWFzaWx5XG4gICAgICAgICAgICAvLyBtb2RpZmllZCB0byB3b3JrLCBob3dldmVyIGZvciBub3cgSSBkb24ndCBoYXZlIHRoZSBicmFpbiBlbmVyZ3kgdG8gd29yayBpdCBhbGwgb3V0KS5cbiAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVtb3ZlciA9ICFkZXRhaWxzLnVzaW5nVHJlZURhdGEgPyBuZXcgQmF0Y2hSZW1vdmVyKCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIC8vIHRoZSBvcmRlciBoZXJlIG9mIFthZGQsIHJlbW92ZSwgdXBkYXRlXSBuZWVkcyB0byBiZSB0aGUgc2FtZSBhcyBpbiBDbGllbnRTaWRlTm9kZU1hbmFnZXIsXG4gICAgICAgICAgICAvLyBhcyB0aGUgb3JkZXIgaXMgaW1wb3J0YW50IHdoZW4gYSByZWNvcmQgd2l0aCB0aGUgc2FtZSBpZCBpcyBhZGRlZCBhbmQgcmVtb3ZlZCBpbiB0aGUgc2FtZVxuICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICBpZiAoXy5leGlzdHNBbmROb3RFbXB0eSh0cmFuLnJlbW92ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU5vZGVzKHRyYW4ucmVtb3ZlIGFzIFJvd05vZGVbXSwgZGV0YWlscywgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmV4aXN0c0FuZE5vdEVtcHR5KHRyYW4udXBkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZU5vZGVzSW5Xcm9uZ1BhdGgodHJhbi51cGRhdGUgYXMgUm93Tm9kZVtdLCBkZXRhaWxzLCBiYXRjaFJlbW92ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZXhpc3RzQW5kTm90RW1wdHkodHJhbi5hZGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnROb2Rlcyh0cmFuLmFkZCBhcyBSb3dOb2RlW10sIGRldGFpbHMsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG11c3QgZmx1c2ggaGVyZSwgYW5kIG5vdCBhbGxvdyBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQsXG4gICAgICAgICAgICAvLyBhcyBlYWNoIHRyYW5zYWN0aW9uIG11c3QgZmluaXNoIGxlYXZpbmcgdGhlIGRhdGEgaW4gYSBjb25zaXN0ZW50IHN0YXRlLlxuICAgICAgICAgICAgaWYgKGJhdGNoUmVtb3Zlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHNXaXRoQ2hpbGRyZW5SZW1vdmVkID0gYmF0Y2hSZW1vdmVyLmdldEFsbFBhcmVudHMoKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIGJhdGNoUmVtb3Zlci5mbHVzaCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlHcm91cHMocGFyZW50c1dpdGhDaGlsZHJlblJlbW92ZWQsIGRldGFpbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZGV0YWlscy5yb3dOb2RlT3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydENoaWxkcmVuKGRldGFpbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gZG9pbmcgZGVsdGEgdXBkYXRlcywgZWcgUmVkdXgsIGtlZXBzIG5vZGVzIGluIHJpZ2h0IG9yZGVyXG4gICAgcHJpdmF0ZSBzb3J0Q2hpbGRyZW4oZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG4gICAgICAgIGRldGFpbHMuY2hhbmdlZFBhdGguZm9yRWFjaENoYW5nZWROb2RlRGVwdGhGaXJzdChub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZHJlbkFmdGVyR3JvdXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpZFNvcnQgPSBfLnNvcnRSb3dOb2Rlc0J5T3JkZXIobm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAhLCBkZXRhaWxzLnJvd05vZGVPcmRlcik7XG4gICAgICAgICAgICBpZiAoZGlkU29ydCkge1xuICAgICAgICAgICAgICAgIGRldGFpbHMuY2hhbmdlZFBhdGguYWRkUGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZmFsc2UsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3JkZXJHcm91cHMoZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkZXRhaWxzLmluaXRpYWxHcm91cE9yZGVyQ29tcGFyYXRvcjtcbiAgICAgICAgaWYgKF8uZXhpc3RzKGNvbXBhcmF0b3IpKSB7IHJlY3Vyc2l2ZVNvcnQoZGV0YWlscy5yb290Tm9kZSk7IH1cblxuICAgICAgICBmdW5jdGlvbiByZWN1cnNpdmVTb3J0KHJvd05vZGU6IFJvd05vZGUpOiB2b2lkIHtcbiAgICAgICAgICAgIGNvbnN0IGRvU29ydCA9IF8uZXhpc3RzKHJvd05vZGUuY2hpbGRyZW5BZnRlckdyb3VwKSAmJlxuICAgICAgICAgICAgICAgIC8vIHdlIG9ubHkgd2FudCB0byBzb3J0IGdyb3Vwcywgc28gd2UgZG8gbm90IHNvcnQgbGVhZnMgKGEgbGVhZiBncm91cCBoYXMgbGVhZnMgYXMgY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgIXJvd05vZGUubGVhZkdyb3VwO1xuXG4gICAgICAgICAgICBpZiAoZG9Tb3J0KSB7XG4gICAgICAgICAgICAgICAgcm93Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAhLnNvcnQoKG5vZGVBLCBub2RlQikgPT4gY29tcGFyYXRvciEoeyBub2RlQSwgbm9kZUIgfSkpO1xuICAgICAgICAgICAgICAgIHJvd05vZGUuY2hpbGRyZW5BZnRlckdyb3VwIS5mb3JFYWNoKChjaGlsZE5vZGU6IFJvd05vZGUpID0+IHJlY3Vyc2l2ZVNvcnQoY2hpbGROb2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4aXN0aW5nUGF0aEZvck5vZGUobm9kZTogUm93Tm9kZSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogR3JvdXBJbmZvW10ge1xuICAgICAgICBjb25zdCByZXM6IEdyb3VwSW5mb1tdID0gW107XG5cbiAgICAgICAgLy8gd2hlbiBkb2luZyB0cmVlIGRhdGEsIHRoZSBub2RlIGlzIHBhcnQgb2YgdGhlIHBhdGgsXG4gICAgICAgIC8vIGJ1dCB3aGVuIGRvaW5nIGdyaWQgZ3JvdXBpbmcsIHRoZSBub2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwYXRoIHNvIHdlIHN0YXJ0IHdpdGggdGhlIHBhcmVudC5cbiAgICAgICAgbGV0IHBvaW50ZXIgPSBkZXRhaWxzLnVzaW5nVHJlZURhdGEgPyBub2RlIDogbm9kZS5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwb2ludGVyICYmIHBvaW50ZXIgIT09IGRldGFpbHMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IHBvaW50ZXIua2V5ISxcbiAgICAgICAgICAgICAgICByb3dHcm91cENvbHVtbjogcG9pbnRlci5yb3dHcm91cENvbHVtbixcbiAgICAgICAgICAgICAgICBmaWVsZDogcG9pbnRlci5maWVsZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVOb2Rlc0luV3JvbmdQYXRoKGNoaWxkTm9kZXM6IFJvd05vZGVbXSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBiYXRjaFJlbW92ZXI6IEJhdGNoUmVtb3ZlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goY2hpbGROb2RlID0+IHtcblxuICAgICAgICAgICAgLy8gd2UgYWRkIG5vZGUsIGV2ZW4gaWYgcGFyZW50IGhhcyBub3QgY2hhbmdlZCwgYXMgdGhlIGRhdGEgY291bGQgaGF2ZVxuICAgICAgICAgICAgLy8gY2hhbmdlZCwgaGVuY2UgYWdncmVnYXRpb25zIHdpbGwgYmUgd3JvbmdcbiAgICAgICAgICAgIGlmIChkZXRhaWxzLmNoYW5nZWRQYXRoLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzLmNoYW5nZWRQYXRoLmFkZFBhcmVudE5vZGUoY2hpbGROb2RlLnBhcmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZm9Ub0tleU1hcHBlciA9IChpdGVtOiBHcm91cEluZm8pID0+IGl0ZW0ua2V5O1xuICAgICAgICAgICAgY29uc3Qgb2xkUGF0aDogc3RyaW5nW10gPSB0aGlzLmdldEV4aXN0aW5nUGF0aEZvck5vZGUoY2hpbGROb2RlLCBkZXRhaWxzKS5tYXAoaW5mb1RvS2V5TWFwcGVyKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGg6IHN0cmluZ1tdID0gdGhpcy5nZXRHcm91cEluZm8oY2hpbGROb2RlLCBkZXRhaWxzKS5tYXAoaW5mb1RvS2V5TWFwcGVyKTtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZUluQ29ycmVjdFBhdGggPSBfLmFyZUVxdWFsKG9sZFBhdGgsIG5ld1BhdGgpO1xuXG4gICAgICAgICAgICBpZiAoIW5vZGVJbkNvcnJlY3RQYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlTm9kZShjaGlsZE5vZGUsIGRldGFpbHMsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZU5vZGUoY2hpbGROb2RlOiBSb3dOb2RlLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGJhdGNoUmVtb3ZlcjogQmF0Y2hSZW1vdmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVOb2Rlc0luU3RhZ2VzKFtjaGlsZE5vZGVdLCBkZXRhaWxzLCBiYXRjaFJlbW92ZXIpO1xuICAgICAgICB0aGlzLmluc2VydE9uZU5vZGUoY2hpbGROb2RlLCBkZXRhaWxzLCB0cnVlLCBiYXRjaFJlbW92ZXIpO1xuXG4gICAgICAgIC8vIGhhY2sgLSBpZiB3ZSBkaWRuJ3QgZG8gdGhpcywgdGhlbiByZW5hbWluZyBhIHRyZWUgaXRlbSAoaWUgY2hhbmdpbmcgcm93Tm9kZS5rZXkpIHdvdWxkbid0IGdldFxuICAgICAgICAvLyByZWZyZXNoZWQgaW50byB0aGUgZ3VpLlxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byBraWNrIG9mZiB0aGUgZXZlbnQgdGhhdCByb3dDb21wIGxpc3RlbnMgdG8gZm9yIHJlZnJlc2guIHRoaXMgaW4gdHVyblxuICAgICAgICAvLyB0aGVuIHdpbGwgZ2V0IGVhY2ggY2VsbCBpbiB0aGUgcm93IHRvIHJlZnJlc2ggLSB3aGljaCBpcyB3aGF0IHdlIG5lZWQgYXMgd2UgZG9uJ3Qga25vdyB3aGljaFxuICAgICAgICAvLyBjb2x1bW5zIHdpbGwgYmUgZGlzcGxheWluZyB0aGUgcm93Tm9kZS5rZXkgaW5mby5cbiAgICAgICAgY2hpbGROb2RlLnNldERhdGEoY2hpbGROb2RlLmRhdGEpO1xuXG4gICAgICAgIC8vIHdlIGFkZCBib3RoIG9sZCBhbmQgbmV3IHBhcmVudHMgdG8gY2hhbmdlZCBwYXRoLCBhcyBib3RoIHdpbGwgbmVlZCB0byBiZSByZWZyZXNoZWQuXG4gICAgICAgIC8vIHdlIGFscmVhZHkgYWRkZWQgdGhlIG9sZCBwYXJlbnQgKGluIGNhbGxpbmcgbWV0aG9kKSwgc28ganVzdCBhZGQgdGhlIG5ldyBwYXJlbnQgaGVyZVxuICAgICAgICBpZiAoZGV0YWlscy5jaGFuZ2VkUGF0aC5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXJlbnQgPSBjaGlsZE5vZGUucGFyZW50O1xuICAgICAgICAgICAgZGV0YWlscy5jaGFuZ2VkUGF0aC5hZGRQYXJlbnROb2RlKG5ld1BhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU5vZGVzKGxlYWZSb3dOb2RlczogUm93Tm9kZVtdLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGJhdGNoUmVtb3ZlcjogQmF0Y2hSZW1vdmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlTm9kZXNJblN0YWdlcyhsZWFmUm93Tm9kZXMsIGRldGFpbHMsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgIGlmIChkZXRhaWxzLmNoYW5nZWRQYXRoLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIGxlYWZSb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gZGV0YWlscy5jaGFuZ2VkUGF0aC5hZGRQYXJlbnROb2RlKHJvd05vZGUucGFyZW50KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU5vZGVzSW5TdGFnZXMobGVhZlJvd05vZGVzOiBSb3dOb2RlW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgYmF0Y2hSZW1vdmVyOiBCYXRjaFJlbW92ZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVOb2Rlc0Zyb21QYXJlbnRzKGxlYWZSb3dOb2RlcywgZGV0YWlscywgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgaWYgKGRldGFpbHMudXNpbmdUcmVlRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5wb3N0UmVtb3ZlQ3JlYXRlRmlsbGVyTm9kZXMobGVhZlJvd05vZGVzLCBkZXRhaWxzKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBub3QgVHJlZURhdGEsIHRoZW4gcmVtb3ZlRW1wdHlHcm91cHMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBCYXRjaFJlbW92ZXIgaXMgZmx1c2hlZC5cbiAgICAgICAgICAgIC8vIEhvd2V2ZXIgZm9yIFRyZWVEYXRhLCB0aGVyZSBpcyBubyBCYXRjaFJlbW92ZXIsIHNvIHdlIGhhdmUgdG8gY2FsbCByZW1vdmVFbXB0eUdyb3VwcyBoZXJlLlxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhcmVudHMgPSBsZWFmUm93Tm9kZXMubWFwKG4gPT4gbi5wYXJlbnQhKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlHcm91cHMobm9kZVBhcmVudHMsIGRldGFpbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JFYWNoUGFyZW50R3JvdXAoZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBncm91cDogUm93Tm9kZSwgY2FsbGJhY2s6IChwYXJlbnQ6IFJvd05vZGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHBvaW50ZXI6IFJvd05vZGUgfCBudWxsID0gZ3JvdXA7XG4gICAgICAgIHdoaWxlIChwb2ludGVyICYmIHBvaW50ZXIgIT09IGRldGFpbHMucm9vdE5vZGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBvaW50ZXIpO1xuICAgICAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb2Rlc0Zyb21QYXJlbnRzKG5vZGVzVG9SZW1vdmU6IFJvd05vZGVbXSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBwcm92aWRlZDogQmF0Y2hSZW1vdmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgd2l0aCBCYXRjaFJlbW92ZXIgYXMgb3B0aW9uYWwuIGlmIGl0IGlzIG1pc3NlZCwgd2UgY3JlYXRlZCBhIGxvY2FsIHZlcnNpb25cbiAgICAgICAgLy8gYW5kIGZsdXNoIGl0IGF0IHRoZSBlbmQuIGlmIG9uZSBpcyBwcm92aWRlZCwgd2UgYWRkIHRvIHRoZSBwcm92aWRlZCBvbmUgYW5kIGl0IGdldHMgZmx1c2hlZCBlbHNld2hlcmUuXG4gICAgICAgIGNvbnN0IGJhdGNoUmVtb3ZlcklzTG9jYWwgPSBwcm92aWRlZCA9PSBudWxsO1xuICAgICAgICBjb25zdCBiYXRjaFJlbW92ZXJUb1VzZSA9IHByb3ZpZGVkID8gcHJvdmlkZWQgOiBuZXcgQmF0Y2hSZW1vdmVyKCk7XG5cbiAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKG5vZGVUb1JlbW92ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21QYXJlbnQobm9kZVRvUmVtb3ZlLCBiYXRjaFJlbW92ZXJUb1VzZSk7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIGFsbExlYWZDaGlsZHJlbi4gd2UgY2xlYXIgZG93biBhbGwgcGFyZW50cyBFWENFUFQgdGhlIFJvb3QgTm9kZSwgYXNcbiAgICAgICAgICAgIC8vIHRoZSBDbGllbnRTaWRlTm9kZU1hbmFnZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBSb290IE5vZGUuXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hQYXJlbnRHcm91cChkZXRhaWxzLCBub2RlVG9SZW1vdmUucGFyZW50ISwgcGFyZW50Tm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgYmF0Y2hSZW1vdmVyVG9Vc2UucmVtb3ZlRnJvbUFsbExlYWZDaGlsZHJlbihwYXJlbnROb2RlLCBub2RlVG9SZW1vdmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChiYXRjaFJlbW92ZXJJc0xvY2FsKSB7XG4gICAgICAgICAgICBiYXRjaFJlbW92ZXJUb1VzZS5mbHVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3N0UmVtb3ZlQ3JlYXRlRmlsbGVyTm9kZXMobm9kZXNUb1JlbW92ZTogUm93Tm9kZVtdLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiB2b2lkIHtcbiAgICAgICAgbm9kZXNUb1JlbW92ZS5mb3JFYWNoKG5vZGVUb1JlbW92ZSA9PiB7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vdCBncm91cCwgYW5kIGNoaWxkcmVuIGFyZSBwcmVzZW50LCBuZWVkIHRvIG1vdmUgY2hpbGRyZW4gdG8gYSBncm91cC5cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpZiBubyBjaGlsZHJlbiwgd2UgY2FuIGp1c3QgcmVtb3ZlIHdpdGhvdXQgcmVwbGFjaW5nLlxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZVdpdGhHcm91cCA9IG5vZGVUb1JlbW92ZS5oYXNDaGlsZHJlbigpO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoR3JvdXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRQYXRoID0gdGhpcy5nZXRFeGlzdGluZ1BhdGhGb3JOb2RlKG5vZGVUb1JlbW92ZSwgZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBqdXN0IHJlbW92ZWQgdGhlIHVzZXJHcm91cCwgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gbmV3IHN1cHBvcnQgZ3JvdXBcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSB0aGlzLmZpbmRQYXJlbnRGb3JOb2RlKG5vZGVUb1JlbW92ZSwgb2xkUGF0aCwgZGV0YWlscyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGVzZSBwcm9wZXJ0aWVzIGFyZSB0aGUgb25lcyB0aGF0IHdpbGwgYmUgaW5jb3JyZWN0IGluIHRoZSBuZXdseSBjcmVhdGVkIGdyb3VwLFxuICAgICAgICAgICAgICAgIC8vIHNvIGNvcHkgdGhlbSBmcm9tIHRoZSBvbGQgY2hpbGROb2RlXG4gICAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlLmV4cGFuZGVkID0gbm9kZVRvUmVtb3ZlLmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIG5ld0dyb3VwTm9kZS5hbGxMZWFmQ2hpbGRyZW4gPSBub2RlVG9SZW1vdmUuYWxsTGVhZkNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIG5ld0dyb3VwTm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAgPSBub2RlVG9SZW1vdmUuY2hpbGRyZW5BZnRlckdyb3VwO1xuICAgICAgICAgICAgICAgIG5ld0dyb3VwTm9kZS5jaGlsZHJlbk1hcHBlZCA9IG5vZGVUb1JlbW92ZS5jaGlsZHJlbk1hcHBlZDtcbiAgICAgICAgICAgICAgICBuZXdHcm91cE5vZGUudXBkYXRlSGFzQ2hpbGRyZW4oKTtcblxuICAgICAgICAgICAgICAgIG5ld0dyb3VwTm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAhLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnBhcmVudCA9IG5ld0dyb3VwTm9kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVFbXB0eUdyb3Vwcyhwb3NzaWJsZUVtcHR5R3JvdXBzOiBSb3dOb2RlW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IHZvaWQge1xuICAgICAgICAvLyB3ZSBkbyB0aGlzIG11bHRpcGxlIHRpbWVzLCBhcyB3aGVuIHdlIHJlbW92ZSBncm91cHMsIHRoYXQgbWVhbnMgdGhlIHBhcmVudCBvZiBqdXN0IHJlbW92ZWRcbiAgICAgICAgLy8gZ3JvdXAgY2FuIHRoZW4gYmUgZW1wdHkuIHRvIGdldCBhcm91bmQgdGhpcywgaWYgd2UgcmVtb3ZlLCB0aGVuIHdlIGNoZWNrIGV2ZXJ5dGhpbmcgYWdhaW4gZm9yXG4gICAgICAgIC8vIG5ld2x5IGVtcHRpZWQgZ3JvdXBzLiB0aGUgbWF4IG51bWJlciBvZiB0aW1lcyB0aGlzIHdpbGwgZXhlY3V0ZSBpcyB0aGUgZGVwdGggb2YgdGhlIGdyb3VwIHRyZWUuXG4gICAgICAgIGxldCBjaGVja0FnYWluID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBncm91cFNob3VsZEJlUmVtb3ZlZCA9IChyb3dOb2RlOiBSb3dOb2RlKTogYm9vbGVhbiA9PiB7XG5cbiAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIHdoaWxlIGxvb3AgYmVsb3csIGl0J3MgcG9zc2libGUgd2UgYWxyZWFkeSBtb3ZlZCB0aGUgbm9kZSxcbiAgICAgICAgICAgIC8vIHNvIGRvdWJsZSBjaGVjayBiZWZvcmUgdHJ5aW5nIHRvIHJlbW92ZSBhZ2Fpbi5cbiAgICAgICAgICAgIGNvbnN0IG1hcEtleSA9IHRoaXMuZ2V0Q2hpbGRyZW5NYXBwZWRLZXkocm93Tm9kZS5rZXkhLCByb3dOb2RlLnJvd0dyb3VwQ29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd05vZGUgPSByb3dOb2RlLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQWxyZWFkeVJlbW92ZWQgPSAocGFyZW50Um93Tm9kZSAmJiBwYXJlbnRSb3dOb2RlLmNoaWxkcmVuTWFwcGVkKSA/XG4gICAgICAgICAgICAgICAgIXBhcmVudFJvd05vZGUuY2hpbGRyZW5NYXBwZWRbbWFwS2V5XSA6IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChncm91cEFscmVhZHlSZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm90IGxpbmtlZCwgdGhlbiBncm91cCB3YXMgYWxyZWFkeSByZW1vdmVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgc3RpbGwgbm90IHJlbW92ZWQsIHRoZW4gd2UgcmVtb3ZlIGlmIHRoaXMgZ3JvdXAgaXMgZW1wdHlcbiAgICAgICAgICAgIHJldHVybiAhIXJvd05vZGUuaXNFbXB0eVJvd0dyb3VwTm9kZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlIChjaGVja0FnYWluKSB7XG4gICAgICAgICAgICBjaGVja0FnYWluID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlbW92ZXI6IEJhdGNoUmVtb3ZlciA9IG5ldyBCYXRjaFJlbW92ZXIoKTtcbiAgICAgICAgICAgIHBvc3NpYmxlRW1wdHlHcm91cHMuZm9yRWFjaChwb3NzaWJsZUVtcHR5R3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBlbXB0eSBncm91cHNcbiAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hQYXJlbnRHcm91cChkZXRhaWxzLCBwb3NzaWJsZUVtcHR5R3JvdXAsIHJvd05vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBTaG91bGRCZVJlbW92ZWQocm93Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tUGFyZW50KHJvd05vZGUsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZW1vdmUgc2VsZWN0aW9uIG9uIGZpbGxlciBub2RlcyBoZXJlLCBhcyB0aGUgc2VsZWN0aW9uIHdvdWxkIG5vdCBiZSByZW1vdmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBSb3dOb2RlTWFuYWdlciwgYXMgZmlsbGVyIG5vZGVzIGRvbid0IGV4aXN0IG9uIHRoZSBSb3dOb2RlTWFuYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Tm9kZS5zZXRTZWxlY3RlZFBhcmFtcyh7IG5ld1ZhbHVlOiBmYWxzZSwgc291cmNlOiAncm93R3JvdXBDaGFuZ2VkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiYXRjaFJlbW92ZXIuZmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZXMgdGhlIG5vZGUgZnJvbSB0aGUgcGFyZW50IGJ5OlxuICAgIC8vIGEpIHJlbW92aW5nIGZyb20gY2hpbGRyZW5BZnRlckdyb3VwICh1c2luZyBiYXRjaFJlbW92ZXIgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGltbWVkaWF0ZWx5KVxuICAgIC8vIGIpIHJlbW92aW5nIGZyb20gY2hpbGRyZW5NYXBwZWQgKGltbWVkaWF0ZWx5KVxuICAgIC8vIGMpIHNldFJvd1RvcChudWxsKSAtIGFzIHRoZSByb3dSZW5kZXJlciB1c2VzIHRoaXMgdG8ga25vdyB0aGUgUm93Tm9kZSBpcyBubyBsb25nZXIgbmVlZGVkXG4gICAgLy8gZCkgc2V0Um93SW5kZXgobnVsbCkgLSBhcyB0aGUgcm93Tm9kZSB3aWxsIG5vIGxvbmdlciBiZSBkaXNwbGF5ZWQuXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tUGFyZW50KGNoaWxkOiBSb3dOb2RlLCBiYXRjaFJlbW92ZXI/OiBCYXRjaFJlbW92ZXIpIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGJhdGNoUmVtb3Zlcikge1xuICAgICAgICAgICAgICAgIGJhdGNoUmVtb3Zlci5yZW1vdmVGcm9tQ2hpbGRyZW5BZnRlckdyb3VwKGNoaWxkLnBhcmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfLnJlbW92ZUZyb21BcnJheShjaGlsZC5wYXJlbnQuY2hpbGRyZW5BZnRlckdyb3VwISwgY2hpbGQpO1xuICAgICAgICAgICAgICAgIGNoaWxkLnBhcmVudC51cGRhdGVIYXNDaGlsZHJlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcEtleSA9IHRoaXMuZ2V0Q2hpbGRyZW5NYXBwZWRLZXkoY2hpbGQua2V5ISwgY2hpbGQucm93R3JvdXBDb2x1bW4pO1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50ICYmIGNoaWxkLnBhcmVudC5jaGlsZHJlbk1hcHBlZCkge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LmNoaWxkcmVuTWFwcGVkW21hcEtleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHRyYW5zaXRpb24sIHNlZSByb3dDb21wIHJlbW92ZUZpcnN0UGFzc0Z1bmNzLiB3aGVuIGRvaW5nIGFuaW1hdGlvbiBhbmRcbiAgICAgICAgLy8gcmVtb3ZlLCBpZiByb3dUb3AgaXMgc3RpbGwgcHJlc2VudCwgdGhlIHJvd0NvbXAgdGhpbmtzIGl0J3MganVzdCBtb3ZlZCBwb3NpdGlvbi5cbiAgICAgICAgY2hpbGQuc2V0Um93VG9wKG51bGwpO1xuICAgICAgICBjaGlsZC5zZXRSb3dJbmRleChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvUGFyZW50KGNoaWxkOiBSb3dOb2RlLCBwYXJlbnQ6IFJvd05vZGUgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1hcEtleSA9IHRoaXMuZ2V0Q2hpbGRyZW5NYXBwZWRLZXkoY2hpbGQua2V5ISwgY2hpbGQucm93R3JvdXBDb2x1bW4pO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbk1hcHBlZCAhPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuTWFwcGVkIVttYXBLZXldID0gY2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW5BZnRlckdyb3VwIS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIHBhcmVudC51cGRhdGVIYXNDaGlsZHJlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcmVHcm91cENvbHNFcXVhbChkMTogR3JvdXBpbmdEZXRhaWxzLCBkMjogR3JvdXBpbmdEZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkMSA9PSBudWxsIHx8IGQyID09IG51bGwgfHwgZDEucGl2b3RNb2RlICE9PSBkMi5waXZvdE1vZGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgcmV0dXJuIF8uYXJlRXF1YWwoZDEuZ3JvdXBlZENvbHMsIGQyLmdyb3VwZWRDb2xzKSAmJiBfLmFyZUVxdWFsKGQxLmtleUNyZWF0b3JzLCBkMi5rZXlDcmVhdG9ycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FsbEdyb3VwRGF0YUFmdGVyQ29sc0NoYW5nZWQoZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgcmVjdXJzZSA9IChyb3dOb2RlczogUm93Tm9kZVtdIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyb3dOb2RlcykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMZWFmTm9kZSA9ICFkZXRhaWxzLnVzaW5nVHJlZURhdGEgJiYgIXJvd05vZGUuZ3JvdXA7XG4gICAgICAgICAgICAgICAgaWYgKGlzTGVhZk5vZGUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmZvOiBHcm91cEluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiByb3dOb2RlLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IHJvd05vZGUua2V5ISxcbiAgICAgICAgICAgICAgICAgICAgcm93R3JvdXBDb2x1bW46IHJvd05vZGUucm93R3JvdXBDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIGxlYWZOb2RlOiByb3dOb2RlLmFsbExlYWZDaGlsZHJlblswXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBEYXRhKHJvd05vZGUsIGdyb3VwSW5mbywgZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgcmVjdXJzZShyb3dOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWN1cnNlKGRldGFpbHMucm9vdE5vZGUuY2hpbGRyZW5BZnRlckdyb3VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3RndW5SZXNldEV2ZXJ5dGhpbmcoZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBhZnRlckNvbHVtbnNDaGFuZ2VkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHRoaXMubm9DaGFuZ2VJbkdyb3VwaW5nQ29sdW1ucyhkZXRhaWxzLCBhZnRlckNvbHVtbnNDaGFuZ2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ3JvdXBzIGFyZSBhYm91dCB0byBnZXQgZGlzcG9zZWQsIHNvIG5lZWQgdG8gZGVzZWxlY3QgYW55IHRoYXQgYXJlIHNlbGVjdGVkXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5maWx0ZXJGcm9tU2VsZWN0aW9uKChub2RlOiBSb3dOb2RlKSA9PiBub2RlICYmICFub2RlLmdyb3VwKTtcblxuICAgICAgICBjb25zdCB7IHJvb3ROb2RlLCBncm91cGVkQ29scyB9ID0gZGV0YWlscztcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgbm90IGNyZWF0aW5nIHRoZSByb290IG5vZGUgZWFjaCB0aW1lLCB3ZSBoYXZlIHRoZSBsb2dpY1xuICAgICAgICAvLyBoZXJlIHRvIGNoYW5nZSBsZWFmR3JvdXAgb25jZS5cbiAgICAgICAgLy8gd2Ugc2V0IC5sZWFmR3JvdXAgdG8gZmFsc2UgZm9yIHRyZWUgZGF0YSwgYXMgLmxlYWZHcm91cCBpcyBvbmx5IHVzZWQgd2hlbiBwaXZvdGluZywgYW5kIHBpdm90aW5nXG4gICAgICAgIC8vIGlzbid0IGFsbG93ZWQgd2l0aCB0cmVlRGF0YSwgc28gdGhlIGdyaWQgbmV2ZXIgYWN0dWFsbHkgdXNlIC5sZWFmR3JvdXAgd2hlbiBkb2luZyB0cmVlRGF0YS5cbiAgICAgICAgcm9vdE5vZGUubGVhZkdyb3VwID0gZGV0YWlscy51c2luZ1RyZWVEYXRhID8gZmFsc2UgOiBncm91cGVkQ29scy5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgLy8gd2UgYXJlIGRvaW5nIGV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoLCBzbyByZXNldCBjaGlsZHJlbkFmdGVyR3JvdXAgYW5kIGNoaWxkcmVuTWFwcGVkIGZyb20gdGhlIHJvb3ROb2RlXG4gICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IFtdO1xuICAgICAgICByb290Tm9kZS5jaGlsZHJlbk1hcHBlZCA9IHt9O1xuICAgICAgICByb290Tm9kZS51cGRhdGVIYXNDaGlsZHJlbigpO1xuXG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSByb290Tm9kZS5zaWJsaW5nO1xuICAgICAgICBpZiAoc2libGluZykge1xuICAgICAgICAgICAgc2libGluZy5jaGlsZHJlbkFmdGVyR3JvdXAgPSByb290Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXA7XG4gICAgICAgICAgICBzaWJsaW5nLmNoaWxkcmVuTWFwcGVkID0gcm9vdE5vZGUuY2hpbGRyZW5NYXBwZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluc2VydE5vZGVzKHJvb3ROb2RlLmFsbExlYWZDaGlsZHJlbiwgZGV0YWlscywgZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9DaGFuZ2VJbkdyb3VwaW5nQ29sdW1ucyhkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGFmdGVyQ29sdW1uc0NoYW5nZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgbGV0IG5vRnVydGhlclByb2Nlc3NpbmdOZWVkZWQgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBncm91cERpc3BsYXlDb2x1bW5zID0gdGhpcy5jb2x1bW5Nb2RlbC5nZXRHcm91cERpc3BsYXlDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwRGlzcGxheUNvbElkcyA9IGdyb3VwRGlzcGxheUNvbHVtbnMgP1xuICAgICAgICAgICAgZ3JvdXBEaXNwbGF5Q29sdW1ucy5tYXAoYyA9PiBjLmdldElkKCkpLmpvaW4oJy0nKSA6ICcnO1xuXG4gICAgICAgIGlmIChhZnRlckNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAvLyB3ZSBvbmx5IG5lZWQgdG8gcmVkbyBncm91cGluZyBpZiBkb2luZyBub3JtYWwgZ3JvdXBpbmcgKGllIG5vdCB0cmVlIGRhdGEpXG4gICAgICAgICAgICAvLyBhbmQgdGhlIGdyb3VwIGNvbHMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAgICAgbm9GdXJ0aGVyUHJvY2Vzc2luZ05lZWRlZCA9IGRldGFpbHMudXNpbmdUcmVlRGF0YSB8fCB0aGlzLmFyZUdyb3VwQ29sc0VxdWFsKGRldGFpbHMsIHRoaXMub2xkR3JvdXBpbmdEZXRhaWxzKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIGdyb3VwIGRpc3BsYXkgY29scyBoYXZlIGNoYW5nZWQsIHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgcm93Tm9kZS5ncm91cERhdGFcbiAgICAgICAgICAgIC8vIChyZWdhcmRsZXNzIG9mIHRyZWUgZGF0YSBvciByb3cgZ3JvdXBpbmcpXG4gICAgICAgICAgICBpZiAodGhpcy5vbGRHcm91cERpc3BsYXlDb2xJZHMgIT09IG5ld0dyb3VwRGlzcGxheUNvbElkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbGxHcm91cERhdGFBZnRlckNvbHNDaGFuZ2VkKGRldGFpbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbGRHcm91cGluZ0RldGFpbHMgPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLm9sZEdyb3VwRGlzcGxheUNvbElkcyA9IG5ld0dyb3VwRGlzcGxheUNvbElkcztcblxuICAgICAgICByZXR1cm4gbm9GdXJ0aGVyUHJvY2Vzc2luZ05lZWRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydE5vZGVzKG5ld1Jvd05vZGVzOiBSb3dOb2RlW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgaXNNb3ZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5ld1Jvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydE9uZU5vZGUocm93Tm9kZSwgZGV0YWlscywgaXNNb3ZlKTtcbiAgICAgICAgICAgIGlmIChkZXRhaWxzLmNoYW5nZWRQYXRoLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzLmNoYW5nZWRQYXRoLmFkZFBhcmVudE5vZGUocm93Tm9kZS5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydE9uZU5vZGUoY2hpbGROb2RlOiBSb3dOb2RlLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGlzTW92ZTogYm9vbGVhbiwgYmF0Y2hSZW1vdmVyPzogQmF0Y2hSZW1vdmVyKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgcGF0aDogR3JvdXBJbmZvW10gPSB0aGlzLmdldEdyb3VwSW5mbyhjaGlsZE5vZGUsIGRldGFpbHMpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGhpcy5maW5kUGFyZW50Rm9yTm9kZShjaGlsZE5vZGUsIHBhdGgsIGRldGFpbHMsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgIGlmICghcGFyZW50R3JvdXAuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQUcgR3JpZDogZHVwbGljYXRlIGdyb3VwIGtleXMgZm9yIHJvdyBkYXRhLCBrZXlzIHNob3VsZCBiZSB1bmlxdWVgLFxuICAgICAgICAgICAgICAgIFtwYXJlbnRHcm91cC5kYXRhLCBjaGlsZE5vZGUuZGF0YV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbHMudXNpbmdUcmVlRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zd2FwR3JvdXBXaXRoVXNlck5vZGUocGFyZW50R3JvdXAsIGNoaWxkTm9kZSwgaXNNb3ZlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5wYXJlbnQgPSBwYXJlbnRHcm91cDtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5sZXZlbCA9IHBhdGgubGVuZ3RoO1xuICAgICAgICAgICAgcGFyZW50R3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwIS5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICBwYXJlbnRHcm91cC51cGRhdGVIYXNDaGlsZHJlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kUGFyZW50Rm9yTm9kZShjaGlsZE5vZGU6IFJvd05vZGUsIHBhdGg6IEdyb3VwSW5mb1tdLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGJhdGNoUmVtb3Zlcj86IEJhdGNoUmVtb3Zlcik6IFJvd05vZGUge1xuICAgICAgICBsZXQgbmV4dE5vZGU6IFJvd05vZGUgPSBkZXRhaWxzLnJvb3ROb2RlO1xuXG4gICAgICAgIHBhdGguZm9yRWFjaCgoZ3JvdXBJbmZvLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSB0aGlzLmdldE9yQ3JlYXRlTmV4dE5vZGUobmV4dE5vZGUsIGdyb3VwSW5mbywgbGV2ZWwsIGRldGFpbHMpO1xuICAgICAgICAgICAgLy8gbm9kZSBnZXRzIGFkZGVkIHRvIGFsbCBncm91cCBub2Rlcy5cbiAgICAgICAgICAgIC8vIG5vdGU6IHdlIGRvIG5vdCBhZGQgdG8gcm9vdE5vZGUgaGVyZSwgYXMgdGhlIHJvb3ROb2RlIGlzIHRoZSBtYXN0ZXIgbGlzdCBvZiByb3dOb2Rlc1xuXG4gICAgICAgICAgICBpZiAoIWJhdGNoUmVtb3Zlcj8uaXNSZW1vdmVGcm9tQWxsTGVhZkNoaWxkcmVuKG5leHROb2RlLCBjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUuYWxsTGVhZkNoaWxkcmVuLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQsIHByZXZlbnQgdGhhdFxuICAgICAgICAgICAgICAgIGJhdGNoUmVtb3Zlcj8ucHJldmVudFJlbW92ZUZyb21BbGxMZWFmQ2hpbGRyZW4obmV4dE5vZGUsIGNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0Tm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN3YXBHcm91cFdpdGhVc2VyTm9kZShmaWxsZXJHcm91cDogUm93Tm9kZSwgdXNlckdyb3VwOiBSb3dOb2RlLCBpc01vdmU6IGJvb2xlYW4pIHtcbiAgICAgICAgdXNlckdyb3VwLnBhcmVudCA9IGZpbGxlckdyb3VwLnBhcmVudDtcbiAgICAgICAgdXNlckdyb3VwLmtleSA9IGZpbGxlckdyb3VwLmtleTtcbiAgICAgICAgdXNlckdyb3VwLmZpZWxkID0gZmlsbGVyR3JvdXAuZmllbGQ7XG4gICAgICAgIHVzZXJHcm91cC5ncm91cERhdGEgPSBmaWxsZXJHcm91cC5ncm91cERhdGE7XG4gICAgICAgIHVzZXJHcm91cC5sZXZlbCA9IGZpbGxlckdyb3VwLmxldmVsO1xuICAgICAgICAvLyBBRy0zNDQxIC0gcHJlc2VydmUgdGhlIGV4aXN0aW5nIGV4cGFuZGVkIHN0YXR1cyBvZiB0aGUgbm9kZSBpZiB3ZSdyZSBtb3ZpbmcgaXQsIHNvIHRoYXRcbiAgICAgICAgLy8geW91IGNhbiBkcmFnIGEgc3ViIHRyZWUgZnJvbSBvbmUgcGFyZW50IHRvIGFub3RoZXIgd2l0aG91dCBjaGFuZ2luZyBpdHMgZXhwYW5zaW9uXG4gICAgICAgIGlmICghaXNNb3ZlKSB7XG4gICAgICAgICAgICB1c2VyR3JvdXAuZXhwYW5kZWQgPSBmaWxsZXJHcm91cC5leHBhbmRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHNldCAubGVhZkdyb3VwIHRvIGZhbHNlIGZvciB0cmVlIGRhdGEsIGFzIC5sZWFmR3JvdXAgaXMgb25seSB1c2VkIHdoZW4gcGl2b3RpbmcsIGFuZCBwaXZvdGluZ1xuICAgICAgICAvLyBpc24ndCBhbGxvd2VkIHdpdGggdHJlZURhdGEsIHNvIHRoZSBncmlkIG5ldmVyIGFjdHVhbGx5IHVzZSAubGVhZkdyb3VwIHdoZW4gZG9pbmcgdHJlZURhdGEuXG4gICAgICAgIHVzZXJHcm91cC5sZWFmR3JvdXAgPSBmaWxsZXJHcm91cC5sZWFmR3JvdXA7XG5cbiAgICAgICAgLy8gYWx3YXlzIG51bGwgZm9yIHVzZXJHcm91cHMsIGFzIHJvdyBncm91cGluZyBpcyBub3QgYWxsb3dlZCB3aGVuIGRvaW5nIHRyZWUgZGF0YVxuICAgICAgICB1c2VyR3JvdXAucm93R3JvdXBJbmRleCA9IGZpbGxlckdyb3VwLnJvd0dyb3VwSW5kZXg7XG5cbiAgICAgICAgdXNlckdyb3VwLmFsbExlYWZDaGlsZHJlbiA9IGZpbGxlckdyb3VwLmFsbExlYWZDaGlsZHJlbjtcbiAgICAgICAgdXNlckdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IGZpbGxlckdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cDtcbiAgICAgICAgdXNlckdyb3VwLmNoaWxkcmVuTWFwcGVkID0gZmlsbGVyR3JvdXAuY2hpbGRyZW5NYXBwZWQ7XG4gICAgICAgIHVzZXJHcm91cC5zaWJsaW5nID0gZmlsbGVyR3JvdXAuc2libGluZztcbiAgICAgICAgdXNlckdyb3VwLnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tUGFyZW50KGZpbGxlckdyb3VwKTtcbiAgICAgICAgdXNlckdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cCEuZm9yRWFjaCgocm93Tm9kZTogUm93Tm9kZSkgPT4gcm93Tm9kZS5wYXJlbnQgPSB1c2VyR3JvdXApO1xuICAgICAgICB0aGlzLmFkZFRvUGFyZW50KHVzZXJHcm91cCwgZmlsbGVyR3JvdXAucGFyZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlTmV4dE5vZGUocGFyZW50R3JvdXA6IFJvd05vZGUsIGdyb3VwSW5mbzogR3JvdXBJbmZvLCBsZXZlbDogbnVtYmVyLFxuICAgICAgICBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiBSb3dOb2RlIHtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldENoaWxkcmVuTWFwcGVkS2V5KGdyb3VwSW5mby5rZXksIGdyb3VwSW5mby5yb3dHcm91cENvbHVtbik7XG4gICAgICAgIGxldCBuZXh0Tm9kZSA9IHBhcmVudEdyb3VwLmNoaWxkcmVuTWFwcGVkID8gcGFyZW50R3JvdXAuY2hpbGRyZW5NYXBwZWRba2V5XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IHRoaXMuY3JlYXRlR3JvdXAoZ3JvdXBJbmZvLCBwYXJlbnRHcm91cCwgbGV2ZWwsIGRldGFpbHMpO1xuICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBuZXcgZ3JvdXAgdG8gdGhlIHBhcmVudFxuICAgICAgICAgICAgdGhpcy5hZGRUb1BhcmVudChuZXh0Tm9kZSwgcGFyZW50R3JvdXApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR3JvdXAoZ3JvdXBJbmZvOiBHcm91cEluZm8sIHBhcmVudDogUm93Tm9kZSwgbGV2ZWw6IG51bWJlciwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogUm93Tm9kZSB7XG4gICAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IG5ldyBSb3dOb2RlKHRoaXMuYmVhbnMpO1xuXG4gICAgICAgIGdyb3VwTm9kZS5ncm91cCA9IHRydWU7XG4gICAgICAgIGdyb3VwTm9kZS5maWVsZCA9IGdyb3VwSW5mby5maWVsZDtcbiAgICAgICAgZ3JvdXBOb2RlLnJvd0dyb3VwQ29sdW1uID0gZ3JvdXBJbmZvLnJvd0dyb3VwQ29sdW1uO1xuXG4gICAgICAgIHRoaXMuc2V0R3JvdXBEYXRhKGdyb3VwTm9kZSwgZ3JvdXBJbmZvLCBkZXRhaWxzKTtcblxuICAgICAgICBncm91cE5vZGUua2V5ID0gZ3JvdXBJbmZvLmtleTtcbiAgICAgICAgZ3JvdXBOb2RlLmlkID0gdGhpcy5jcmVhdGVHcm91cElkKGdyb3VwTm9kZSwgcGFyZW50LCBkZXRhaWxzLnVzaW5nVHJlZURhdGEsIGxldmVsKTtcblxuICAgICAgICBncm91cE5vZGUubGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgZ3JvdXBOb2RlLmxlYWZHcm91cCA9IGRldGFpbHMudXNpbmdUcmVlRGF0YSA/IGZhbHNlIDogbGV2ZWwgPT09IChkZXRhaWxzLmdyb3VwZWRDb2xDb3VudCAtIDEpO1xuXG4gICAgICAgIGdyb3VwTm9kZS5hbGxMZWFmQ2hpbGRyZW4gPSBbXTtcblxuICAgICAgICAvLyB3aHkgaXMgdGhpcyBkb25lIGhlcmU/IHdlIGFyZSBub3QgdXBkYXRpbmcgdGhlIGNoaWxkcmVuIGNvdW50IGFzIHdlIGdvLFxuICAgICAgICAvLyBpIHN1c3BlY3QgdGhpcyBpcyB1cGRhdGVkIGluIHRoZSBmaWx0ZXIgc3RhZ2VcbiAgICAgICAgZ3JvdXBOb2RlLnNldEFsbENoaWxkcmVuQ291bnQoMCk7XG5cbiAgICAgICAgZ3JvdXBOb2RlLnJvd0dyb3VwSW5kZXggPSBkZXRhaWxzLnVzaW5nVHJlZURhdGEgPyBudWxsIDogbGV2ZWw7XG5cbiAgICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IFtdO1xuICAgICAgICBncm91cE5vZGUuY2hpbGRyZW5NYXBwZWQgPSB7fTtcbiAgICAgICAgZ3JvdXBOb2RlLnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG5cbiAgICAgICAgZ3JvdXBOb2RlLnBhcmVudCA9IGRldGFpbHMuaW5jbHVkZVBhcmVudHMgPyBwYXJlbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0RXhwYW5kZWRJbml0aWFsVmFsdWUoZGV0YWlscywgZ3JvdXBOb2RlKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBOb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR3JvdXBJZChub2RlOiBSb3dOb2RlLCBwYXJlbnQ6IFJvd05vZGUsIHVzaW5nVHJlZURhdGE6IGJvb2xlYW4sIGxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgY3JlYXRlR3JvdXBJZDogKG5vZGU6IFJvd05vZGUsIHBhcmVudDogUm93Tm9kZSB8IG51bGwsIGxldmVsOiBudW1iZXIpID0+IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGlmICh1c2luZ1RyZWVEYXRhKSB7XG4gICAgICAgICAgICBjcmVhdGVHcm91cElkID0gKG5vZGUsIHBhcmVudCwgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPCAwKSB7IHJldHVybiBudWxsOyB9IC8vIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50ID8gY3JlYXRlR3JvdXBJZChwYXJlbnQsIHBhcmVudC5wYXJlbnQsIGxldmVsIC0gMSkgOiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYXJlbnRJZCA9PSBudWxsID8gJycgOiBwYXJlbnRJZCArICctJ30ke2xldmVsfS0ke25vZGUua2V5fWA7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3JlYXRlR3JvdXBJZCA9IChub2RlLCBwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUucm93R3JvdXBDb2x1bW4pIHsgcmV0dXJuIG51bGw7IH0gLy8gcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnQgPyBjcmVhdGVHcm91cElkKHBhcmVudCwgcGFyZW50LnBhcmVudCwgMCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtwYXJlbnRJZCA9PSBudWxsID8gJycgOiBwYXJlbnRJZCArICctJ30ke25vZGUucm93R3JvdXBDb2x1bW4uZ2V0Q29sSWQoKX0tJHtub2RlLmtleX1gO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHB1dCAncm93LWdyb3VwLScgYmVmb3JlIHRoZSBncm91cCBpZCwgc28gaXQgZG9lc24ndCBjbGFzaCB3aXRoIHN0YW5kYXJkIHJvdyBpZCdzLiB3ZSBhbHNvIHVzZSAndC0nIGFuZCAnYi0nXG4gICAgICAgIC8vIGZvciB0b3AgcGlubmVkIGFuZCBib3R0b20gcGlubmVkIHJvd3MuXG4gICAgICAgIHJldHVybiBSb3dOb2RlLklEX1BSRUZJWF9ST1dfR1JPVVAgKyBjcmVhdGVHcm91cElkKG5vZGUsIHBhcmVudCwgbGV2ZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0R3JvdXBEYXRhKGdyb3VwTm9kZTogUm93Tm9kZSwgZ3JvdXBJbmZvOiBHcm91cEluZm8sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IHZvaWQge1xuICAgICAgICBncm91cE5vZGUuZ3JvdXBEYXRhID0ge307XG4gICAgICAgIGNvbnN0IGdyb3VwRGlzcGxheUNvbHM6IENvbHVtbltdID0gdGhpcy5jb2x1bW5Nb2RlbC5nZXRHcm91cERpc3BsYXlDb2x1bW5zKCk7XG4gICAgICAgIGdyb3VwRGlzcGxheUNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgLy8gbmV3R3JvdXAucm93R3JvdXBDb2x1bW49bnVsbCB3aGVuIHdvcmtpbmcgb2ZmIEdyb3VwSW5mbywgYW5kIHdlIGFsd2F5cyBkaXNwbGF5IHRoZSBncm91cCBpbiB0aGUgZ3JvdXAgY29sdW1uXG4gICAgICAgICAgICAvLyBpZiByb3dHcm91cENvbHVtbiBpcyBwcmVzZW50LCB0aGVuIGl0J3MgZ3JpZCByb3cgZ3JvdXBpbmcgYW5kIHdlIG9ubHkgaW5jbHVkZSBpZiBjb25maWd1cmF0aW9uIHNheXMgc29cbiAgICAgICAgICAgIGNvbnN0IGlzVHJlZURhdGEgPSBkZXRhaWxzLnVzaW5nVHJlZURhdGE7XG4gICAgICAgICAgICBpZiAoaXNUcmVlRGF0YSkge1xuICAgICAgICAgICAgICAgIGdyb3VwTm9kZS5ncm91cERhdGEhW2NvbC5nZXRDb2xJZCgpXSA9IGdyb3VwSW5mby5rZXk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBncm91cENvbHVtbiA9IGdyb3VwTm9kZS5yb3dHcm91cENvbHVtbjtcbiAgICAgICAgICAgIGNvbnN0IGlzUm93R3JvdXBEaXNwbGF5ZWQgPSBncm91cENvbHVtbiAhPT0gbnVsbCAmJiBjb2wuaXNSb3dHcm91cERpc3BsYXllZChncm91cENvbHVtbi5nZXRJZCgpKTtcbiAgICAgICAgICAgIGlmIChpc1Jvd0dyb3VwRGlzcGxheWVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuc3VwcHJlc3NHcm91cE1haW50YWluVmFsdWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZS5ncm91cERhdGEhW2NvbC5nZXRDb2xJZCgpXSA9IGdyb3VwSW5mby5rZXk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbWFpbnRhaW4gZ3JvdXAgdmFsdWUgdHlwZSwgZ2V0IHRoZSB2YWx1ZSBmcm9tIGFueSBsZWFmIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZS5ncm91cERhdGEhW2NvbC5nZXRDb2xJZCgpXSA9IHRoaXMudmFsdWVTZXJ2aWNlLmdldFZhbHVlKGdyb3VwQ29sdW1uLCBncm91cEluZm8ubGVhZk5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbk1hcHBlZEtleShrZXk6IHN0cmluZywgcm93R3JvdXBDb2x1bW46IENvbHVtbiB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBpZiAocm93R3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdyb3VwaW5nIGJ5IGNvbHVtbnNcbiAgICAgICAgICAgIHJldHVybiByb3dHcm91cENvbHVtbi5nZXRJZCgpICsgJy0nICsga2V5O1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWUgZGF0YSAtIHdlIGRvbid0IGhhdmUgcm93R3JvdXBDb2x1bW5zXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFeHBhbmRlZEluaXRpYWxWYWx1ZShkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGdyb3VwTm9kZTogUm93Tm9kZSk6IHZvaWQge1xuICAgICAgICAvLyBpZiBwaXZvdGluZyB0aGUgbGVhZiBncm91cCBpcyBuZXZlciBleHBhbmRlZCBhcyB3ZSBkbyBub3Qgc2hvdyBsZWFmIHJvd3NcbiAgICAgICAgaWYgKGRldGFpbHMucGl2b3RNb2RlICYmIGdyb3VwTm9kZS5sZWFmR3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwTm9kZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXNlIGNhbGxiYWNrIGlmIGV4aXN0c1xuICAgICAgICBjb25zdCB1c2VyQ2FsbGJhY2sgPSBkZXRhaWxzLmlzR3JvdXBPcGVuQnlEZWZhdWx0O1xuICAgICAgICBpZiAodXNlckNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFdpdGhvdXRHcmlkQ29tbW9uPElzR3JvdXBPcGVuQnlEZWZhdWx0UGFyYW1zPiA9IHtcbiAgICAgICAgICAgICAgICByb3dOb2RlOiBncm91cE5vZGUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGdyb3VwTm9kZS5maWVsZCEsXG4gICAgICAgICAgICAgICAga2V5OiBncm91cE5vZGUua2V5ISxcbiAgICAgICAgICAgICAgICBsZXZlbDogZ3JvdXBOb2RlLmxldmVsLFxuICAgICAgICAgICAgICAgIHJvd0dyb3VwQ29sdW1uOiBncm91cE5vZGUucm93R3JvdXBDb2x1bW4hXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ3JvdXBOb2RlLmV4cGFuZGVkID0gdXNlckNhbGxiYWNrKHBhcmFtcykgPT0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzZSBleHBhbmRCeURlZmF1bHQgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHsgZXhwYW5kQnlEZWZhdWx0IH0gPSBkZXRhaWxzO1xuICAgICAgICBpZiAoZGV0YWlscy5leHBhbmRCeURlZmF1bHQgPT09IC0xKSB7XG4gICAgICAgICAgICBncm91cE5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3RoZXJ3aXNlXG4gICAgICAgIGdyb3VwTm9kZS5leHBhbmRlZCA9IGdyb3VwTm9kZS5sZXZlbCA8IGV4cGFuZEJ5RGVmYXVsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyb3VwSW5mbyhyb3dOb2RlOiBSb3dOb2RlLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiBHcm91cEluZm9bXSB7XG4gICAgICAgIGlmIChkZXRhaWxzLnVzaW5nVHJlZURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEdyb3VwSW5mb0Zyb21DYWxsYmFjayhyb3dOb2RlLCBkZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHcm91cEluZm9Gcm9tR3JvdXBDb2x1bW5zKHJvd05vZGUsIGRldGFpbHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBJbmZvRnJvbUNhbGxiYWNrKHJvd05vZGU6IFJvd05vZGUsIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IEdyb3VwSW5mb1tdIHsgICAgICAgIFxuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSB8IG51bGwgPSBkZXRhaWxzLmdldERhdGFQYXRoID8gZGV0YWlscy5nZXREYXRhUGF0aChyb3dOb2RlLmRhdGEpIDogbnVsbDtcblxuICAgICAgICBpZiAoa2V5cyA9PT0gbnVsbCB8fCBrZXlzID09PSB1bmRlZmluZWQgfHwga2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF8ud2Fybk9uY2UoYGdldERhdGFQYXRoKCkgc2hvdWxkIG5vdCByZXR1cm4gYW4gZW1wdHkgcGF0aCBmb3IgZGF0YSAke3Jvd05vZGUuZGF0YX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cEluZm9NYXBwZXIgPSAoa2V5OiBzdHJpbmcgfCBudWxsKSA9PiAoeyBrZXksIGZpZWxkOiBudWxsLCByb3dHcm91cENvbHVtbjogbnVsbCB9KSBhcyBHcm91cEluZm87XG4gICAgICAgIHJldHVybiBrZXlzID8ga2V5cy5tYXAoZ3JvdXBJbmZvTWFwcGVyKSA6IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBJbmZvRnJvbUdyb3VwQ29sdW1ucyhyb3dOb2RlOiBSb3dOb2RlLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpIHtcbiAgICAgICAgY29uc3QgcmVzOiBHcm91cEluZm9bXSA9IFtdO1xuICAgICAgICBkZXRhaWxzLmdyb3VwZWRDb2xzLmZvckVhY2goZ3JvdXBDb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGtleTogc3RyaW5nID0gdGhpcy52YWx1ZVNlcnZpY2UuZ2V0S2V5Rm9yTm9kZShncm91cENvbCwgcm93Tm9kZSk7XG4gICAgICAgICAgICBsZXQga2V5RXhpc3RzID0ga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdW5kZWZpbmVkICYmIGtleSAhPT0gJyc7XG5cbiAgICAgICAgICAgIC8vIHVuYmFsYW5jZWQgdHJlZSBhbmQgcGl2b3QgbW9kZSBkb24ndCB3b3JrIHRvZ2V0aGVyIC0gbm90IGJlY2F1c2Ugb2YgdGhlIGdyaWQsIGl0IGRvZXNuJ3QgbWFrZVxuICAgICAgICAgICAgLy8gbWF0aGVtYXRpY2FsIHNlbnNlIGFzIHlvdSBhcmUgYnVpbGRpbmcgdXAgYSBjdWJlLiBzbyBpZiBwaXZvdCBtb2RlLCB3ZSBwdXQgaW4gYSBibGFuayBrZXkgd2hlcmUgbWlzc2luZy5cbiAgICAgICAgICAgIC8vIHRoaXMga2VlcHMgdGhlIHRyZWUgYmFsYW5jZWQgYW5kIGhlbmNlIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGdyb3VwLlxuICAgICAgICAgICAgY29uc3QgY3JlYXRlR3JvdXBGb3JFbXB0eSA9IGRldGFpbHMucGl2b3RNb2RlIHx8ICFkZXRhaWxzLmdyb3VwQWxsb3dVbmJhbGFuY2VkO1xuICAgICAgICAgICAgaWYgKGNyZWF0ZUdyb3VwRm9yRW1wdHkgJiYgIWtleUV4aXN0cykge1xuICAgICAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICAgICAgICAgIGtleUV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrZXlFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGdyb3VwQ29sLmdldENvbERlZigpLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICByb3dHcm91cENvbHVtbjogZ3JvdXBDb2wsXG4gICAgICAgICAgICAgICAgICAgIGxlYWZOb2RlOiByb3dOb2RlLFxuICAgICAgICAgICAgICAgIH0gYXMgR3JvdXBJbmZvO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59Il19
|
|
623
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9ncmlkL3Jvdy1ncm91cGluZy9ncm91cC1zdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILENBQUMsRUFDRCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFPUixPQUFPLEVBV1YsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUErQnZDLElBQU0sVUFBVSxHQUFoQixNQUFNLFVBQVcsU0FBUSxRQUFRO0lBaUI3QixPQUFPLENBQUMsTUFBMEI7UUFFckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQztZQUM3RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBWSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFdBQXdCO1FBQ25ELFdBQVcsQ0FBQyw0QkFBNEIsQ0FB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QUFDO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQXZzQnFDO0lBQWpDLFNBQVMsQ0FBQyxhQUFhLENBQUM7K0NBQWtDO0FBQ25CO0lBQXZDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztxREFBOEM7QUFDMUM7SUFBbEMsU0FBUyxDQUFDLGNBQWMsQ0FBQztnREFBb0M7QUFDbEM7SUFBM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQzt5Q0FBc0I7QUFDRjtJQUF0QyxTQUFTLENBQUMsa0JBQWtCLENBQUM7b0RBQTZDO0FBTmxFLFVBQVU7SUFEdEIsSUFBSSxDQUFDLFlBQVksQ0FBQztHQUNOLFVBQVUsQ0F5c0J0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgXyxcbiAgICBBdXRvd2lyZWQsXG4gICAgQmVhbixcbiAgICBCZWFuU3R1YixcbiAgICBDaGFuZ2VkUGF0aCxcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTW9kZWwsXG4gICAgR2V0RGF0YVBhdGgsXG4gICAgSVJvd05vZGVTdGFnZSxcbiAgICBJc0dyb3VwT3BlbkJ5RGVmYXVsdFBhcmFtcyxcbiAgICBSb3dOb2RlLFxuICAgIFJvd05vZGVUcmFuc2FjdGlvbixcbiAgICBTZWxlY3RhYmxlU2VydmljZSxcbiAgICBTdGFnZUV4ZWN1dGVQYXJhbXMsXG4gICAgVmFsdWVTZXJ2aWNlLFxuICAgIEJlYW5zLFxuICAgIElTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIFdpdGhvdXRHcmlkQ29tbW9uLFxuICAgIEluaXRpYWxHcm91cE9yZGVyQ29tcGFyYXRvclBhcmFtcyxcbiAgICBHcmlkT3B0aW9ucyxcbiAgICBLZXlDcmVhdG9yUGFyYW1zXG59IGZyb20gXCJAYWctZ3JpZC1jb21tdW5pdHkvY29yZVwiO1xuaW1wb3J0IHsgQmF0Y2hSZW1vdmVyIH0gZnJvbSBcIi4vYmF0Y2hSZW1vdmVyXCI7XG5cbmludGVyZmFjZSBHcm91cEluZm8ge1xuICAgIGtleTogc3RyaW5nOyAvLyBlLmcuICdJcmVsYW5kJ1xuICAgIGZpZWxkOiBzdHJpbmcgfCBudWxsOyAvLyBlLmcuICdjb3VudHJ5J1xuICAgIHJvd0dyb3VwQ29sdW1uOiBDb2x1bW4gfCBudWxsO1xuICAgIGxlYWZOb2RlPzogUm93Tm9kZTtcbn1cblxuaW50ZXJmYWNlIEdyb3VwaW5nRGV0YWlscyB7XG4gICAgcGl2b3RNb2RlOiBib29sZWFuO1xuICAgIGluY2x1ZGVQYXJlbnRzOiBib29sZWFuO1xuICAgIGV4cGFuZEJ5RGVmYXVsdDogbnVtYmVyO1xuICAgIGNoYW5nZWRQYXRoOiBDaGFuZ2VkUGF0aDtcbiAgICByb290Tm9kZTogUm93Tm9kZTtcbiAgICBncm91cGVkQ29sczogQ29sdW1uW107XG4gICAgZ3JvdXBlZENvbENvdW50OiBudW1iZXI7XG4gICAgdHJhbnNhY3Rpb25zOiBSb3dOb2RlVHJhbnNhY3Rpb25bXTtcbiAgICByb3dOb2RlT3JkZXI6IHsgW2lkOiBzdHJpbmddOiBudW1iZXI7IH07XG4gICAgXG4gICAgZ3JvdXBBbGxvd1VuYmFsYW5jZWQ6IGJvb2xlYW47XG4gICAgaXNHcm91cE9wZW5CeURlZmF1bHQ6IChwYXJhbXM6IFdpdGhvdXRHcmlkQ29tbW9uPElzR3JvdXBPcGVuQnlEZWZhdWx0UGFyYW1zPikgPT4gYm9vbGVhbjtcbiAgICBpbml0aWFsR3JvdXBPcmRlckNvbXBhcmF0b3I6IChwYXJhbXM6IFdpdGhvdXRHcmlkQ29tbW9uPEluaXRpYWxHcm91cE9yZGVyQ29tcGFyYXRvclBhcmFtcz4pID0+IG51bWJlcjtcbiAgICBcbiAgICB1c2luZ1RyZWVEYXRhOiBib29sZWFuO1xuICAgIHN1cHByZXNzR3JvdXBNYWludGFpblZhbHVlVHlwZTogYm9vbGVhbjtcbiAgICBnZXREYXRhUGF0aDogR2V0RGF0YVBhdGggfCB1bmRlZmluZWQ7XG4gICAga2V5Q3JlYXRvcnM6ICgoKHBhcmFtczogS2V5Q3JlYXRvclBhcmFtcykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZClbXTtcbn1cblxuQEJlYW4oJ2dyb3VwU3RhZ2UnKVxuZXhwb3J0IGNsYXNzIEdyb3VwU3RhZ2UgZXh0ZW5kcyBCZWFuU3R1YiBpbXBsZW1lbnRzIElSb3dOb2RlU3RhZ2Uge1xuXG4gICAgQEF1dG93aXJlZCgnY29sdW1uTW9kZWwnKSBwcml2YXRlIGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDtcbiAgICBAQXV0b3dpcmVkKCdzZWxlY3RhYmxlU2VydmljZScpIHByaXZhdGUgc2VsZWN0YWJsZVNlcnZpY2U6IFNlbGVjdGFibGVTZXJ2aWNlO1xuICAgIEBBdXRvd2lyZWQoJ3ZhbHVlU2VydmljZScpIHByaXZhdGUgdmFsdWVTZXJ2aWNlOiBWYWx1ZVNlcnZpY2U7XG4gICAgQEF1dG93aXJlZCgnYmVhbnMnKSBwcml2YXRlIGJlYW5zOiBCZWFucztcbiAgICBAQXV0b3dpcmVkKCdzZWxlY3Rpb25TZXJ2aWNlJykgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlOiBJU2VsZWN0aW9uU2VydmljZTtcblxuICAgIC8vIHdoZW4gZ3JvdXBpbmcsIHRoZXNlIGl0ZW1zIGFyZSBvZiBub3RlOlxuICAgIC8vIHJvd05vZGUucGFyZW50OiBSb3dOb2RlOiBzZXQgdG8gdGhlIHBhcmVudFxuICAgIC8vIHJvd05vZGUuY2hpbGRyZW5BZnRlckdyb3VwOiBSb3dOb2RlW10gPSB0aGUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgZ3JvdXBcbiAgICAvLyByb3dOb2RlLmNoaWxkcmVuTWFwcGVkOiBzdHJpbmc9PlJvd05vZGUgPSBjaGlsZHJlbiBtYXBwZWQgYnkgZ3JvdXAga2V5ICh3aGVuIGdyb3Vwcykgb3IgYW4gZW1wdHkgbWFwIGlmIGxlYWYgZ3JvdXAgKHRoaXMgaXMgdGhlbiB1c2VkIGJ5IHBpdm90KVxuICAgIC8vIGZvciBsZWFmIGdyb3Vwcywgcm93Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAgPSByb3dOb2RlLmFsbExlYWZDaGlsZHJlbjtcblxuICAgIHByaXZhdGUgb2xkR3JvdXBpbmdEZXRhaWxzOiBHcm91cGluZ0RldGFpbHM7XG4gICAgcHJpdmF0ZSBvbGRHcm91cERpc3BsYXlDb2xJZHM6IHN0cmluZztcblxuICAgIHB1YmxpYyBleGVjdXRlKHBhcmFtczogU3RhZ2VFeGVjdXRlUGFyYW1zKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgZGV0YWlscyA9IHRoaXMuY3JlYXRlR3JvdXBpbmdEZXRhaWxzKHBhcmFtcyk7XG5cbiAgICAgICAgaWYgKGRldGFpbHMudHJhbnNhY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYW5zYWN0aW9uKGRldGFpbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJDb2xzQ2hhbmdlZCA9IHBhcmFtcy5hZnRlckNvbHVtbnNDaGFuZ2VkID09PSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zaG90Z3VuUmVzZXRFdmVyeXRoaW5nKGRldGFpbHMsIGFmdGVyQ29sc0NoYW5nZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZXRhaWxzLnVzaW5nVHJlZURhdGEpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGRvIGdyb3VwIHNvcnRpbmcgZm9yIHRyZWUgZGF0YVxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkxlYWZzQW5kR3JvdXBzKHBhcmFtcy5jaGFuZ2VkUGF0aCEpO1xuICAgICAgICAgICAgdGhpcy5vcmRlckdyb3VwcyhkZXRhaWxzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZVNlcnZpY2UudXBkYXRlU2VsZWN0YWJsZUFmdGVyR3JvdXBpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uTGVhZnNBbmRHcm91cHMoY2hhbmdlZFBhdGg6IENoYW5nZWRQYXRoKSB7XG4gICAgICAgIGNoYW5nZWRQYXRoLmZvckVhY2hDaGFuZ2VkTm9kZURlcHRoRmlyc3QoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuQWZ0ZXJHcm91cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlYWZOb2RlczogUm93Tm9kZVtdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBOb2RlczogUm93Tm9kZVtdID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHVuYmFsYW5jZWROb2RlOiBSb3dOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3cuY2hpbGRyZW5BZnRlckdyb3VwPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWZOb2Rlcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93LmtleSA9PT0gJycgJiYgIXVuYmFsYW5jZWROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5iYWxhbmNlZE5vZGUgPSByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZXMucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodW5iYWxhbmNlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBOb2Rlcy5wdXNoKHVuYmFsYW5jZWROb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwID0gWy4uLmxlYWZOb2RlcywgLi4uZ3JvdXBOb2Rlc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwaW5nRGV0YWlscyhwYXJhbXM6IFN0YWdlRXhlY3V0ZVBhcmFtcyk6IEdyb3VwaW5nRGV0YWlscyB7XG4gICAgICAgIGNvbnN0IHsgcm93Tm9kZSwgY2hhbmdlZFBhdGgsIHJvd05vZGVUcmFuc2FjdGlvbnMsIHJvd05vZGVPcmRlciB9ID0gcGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IHVzaW5nVHJlZURhdGEgPSB0aGlzLmdvcy5nZXQoJ3RyZWVEYXRhJyk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBlZENvbHMgPSB1c2luZ1RyZWVEYXRhID8gbnVsbCA6IHRoaXMuY29sdW1uTW9kZWwuZ2V0Um93R3JvdXBDb2x1bW5zKCk7XG5cbiAgICAgICAgY29uc3QgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzID0ge1xuICAgICAgICAgICAgLy8gc29tZW9uZSBjb21wbGFpbmVkIHRoYXQgdGhlIHBhcmVudCBhdHRyaWJ1dGUgd2FzIGNhdXNpbmcgc29tZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgICAvLyB0byBicmVhayBpbiBhbiBhbmd1bGFyIGFkZC1vbi4gIFRha2luZyB0aGUgcGFyZW50IG91dCBicmVha3MgYSBjeWNsaWMgZGVwZW5kZW5jeSwgaGVuY2UgdGhpcyBmbGFnIGdvdCBpbnRyb2R1Y2VkLlxuICAgICAgICAgICAgaW5jbHVkZVBhcmVudHM6ICF0aGlzLmdvcy5nZXQoJ3N1cHByZXNzUGFyZW50c0luUm93Tm9kZXMnKSxcbiAgICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdDogdGhpcy5nb3MuZ2V0KCdncm91cERlZmF1bHRFeHBhbmRlZCcpLFxuICAgICAgICAgICAgZ3JvdXBlZENvbHM6IGdyb3VwZWRDb2xzISxcbiAgICAgICAgICAgIHJvb3ROb2RlOiByb3dOb2RlLFxuICAgICAgICAgICAgcGl2b3RNb2RlOiB0aGlzLmNvbHVtbk1vZGVsLmlzUGl2b3RNb2RlKCksXG4gICAgICAgICAgICBncm91cGVkQ29sQ291bnQ6IHVzaW5nVHJlZURhdGEgfHwgIWdyb3VwZWRDb2xzID8gMCA6IGdyb3VwZWRDb2xzLmxlbmd0aCxcbiAgICAgICAgICAgIHJvd05vZGVPcmRlcjogcm93Tm9kZU9yZGVyISxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uczogcm93Tm9kZVRyYW5zYWN0aW9ucyEsXG4gICAgICAgICAgICAvLyBpZiBubyB0cmFuc2FjdGlvbiwgdGhlbiBpdCdzIHNob3RndW4sIGNoYW5nZWQgcGF0aCB3b3VsZCBiZSAnbm90IGFjdGl2ZScgYXQgdGhpcyBwb2ludCBhbnl3YXlcbiAgICAgICAgICAgIGNoYW5nZWRQYXRoOiBjaGFuZ2VkUGF0aCEsXG4gICAgICAgICAgICBncm91cEFsbG93VW5iYWxhbmNlZDogIHRoaXMuZ29zLmdldCgnZ3JvdXBBbGxvd1VuYmFsYW5jZWQnKSxcbiAgICAgICAgICAgIGlzR3JvdXBPcGVuQnlEZWZhdWx0OiB0aGlzLmdvcy5nZXRDYWxsYmFjaygnaXNHcm91cE9wZW5CeURlZmF1bHQnKSBhcyBhbnksXG4gICAgICAgICAgICBpbml0aWFsR3JvdXBPcmRlckNvbXBhcmF0b3I6IHRoaXMuZ29zLmdldENhbGxiYWNrKCdpbml0aWFsR3JvdXBPcmRlckNvbXBhcmF0b3InKSBhcyBhbnksXG4gICAgICAgICAgICB1c2luZ1RyZWVEYXRhOiB1c2luZ1RyZWVEYXRhLFxuICAgICAgICAgICAgc3VwcHJlc3NHcm91cE1haW50YWluVmFsdWVUeXBlOiB0aGlzLmdvcy5nZXQoJ3N1cHByZXNzR3JvdXBNYWludGFpblZhbHVlVHlwZScpLFxuICAgICAgICAgICAgZ2V0RGF0YVBhdGg6IHVzaW5nVHJlZURhdGEgPyB0aGlzLmdvcy5nZXQoJ2dldERhdGFQYXRoJykgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBrZXlDcmVhdG9yczogZ3JvdXBlZENvbHM/Lm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpLmtleUNyZWF0b3IpID8/IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUcmFuc2FjdGlvbihkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiB2b2lkIHtcblxuICAgICAgICBkZXRhaWxzLnRyYW5zYWN0aW9ucy5mb3JFYWNoKHRyYW4gPT4ge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWxsb3cgYmF0Y2ggcmVtb3ZlciBmb3IgdHJlZSBkYXRhIGFzIHRyZWUgZGF0YSB1c2VzIEZpbGxlciBOb2RlcyxcbiAgICAgICAgICAgIC8vIGFuZCBjcmVhdGluZy9kZWxldGluZyBmaWxsZXIgbm9kZXMgbmVlZHMgdG8gYmUgZG9uZSBhbG9uZ3NpZGUgdGhlIG5vZGUgZGVsZXRpbmdcbiAgICAgICAgICAgIC8vIGFuZCBtb3ZpbmcuIGlmIHdlIHdhbnQgdG8gQmF0Y2ggUmVtb3ZlciB3b3JraW5nIHdpdGggdHJlZSBkYXRhIHRoZW4gd291bGQgbmVlZFxuICAgICAgICAgICAgLy8gdG8gY29uc2lkZXIgaG93IEZpbGxlciBOb2RlcyB3b3VsZCBiZSBpbXBhY3RlZCAoaXQncyBwb3NzaWJsZSB0aGF0IGl0IGNhbiBiZSBlYXNpbHlcbiAgICAgICAgICAgIC8vIG1vZGlmaWVkIHRvIHdvcmssIGhvd2V2ZXIgZm9yIG5vdyBJIGRvbid0IGhhdmUgdGhlIGJyYWluIGVuZXJneSB0byB3b3JrIGl0IGFsbCBvdXQpLlxuICAgICAgICAgICAgY29uc3QgYmF0Y2hSZW1vdmVyID0gIWRldGFpbHMudXNpbmdUcmVlRGF0YSA/IG5ldyBCYXRjaFJlbW92ZXIoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgLy8gdGhlIG9yZGVyIGhlcmUgb2YgW2FkZCwgcmVtb3ZlLCB1cGRhdGVdIG5lZWRzIHRvIGJlIHRoZSBzYW1lIGFzIGluIENsaWVudFNpZGVOb2RlTWFuYWdlcixcbiAgICAgICAgICAgIC8vIGFzIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQgd2hlbiBhIHJlY29yZCB3aXRoIHRoZSBzYW1lIGlkIGlzIGFkZGVkIGFuZCByZW1vdmVkIGluIHRoZSBzYW1lXG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbi5cbiAgICAgICAgICAgIGlmIChfLmV4aXN0c0FuZE5vdEVtcHR5KHRyYW4ucmVtb3ZlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTm9kZXModHJhbi5yZW1vdmUgYXMgUm93Tm9kZVtdLCBkZXRhaWxzLCBiYXRjaFJlbW92ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZXhpc3RzQW5kTm90RW1wdHkodHJhbi51cGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlTm9kZXNJbldyb25nUGF0aCh0cmFuLnVwZGF0ZSBhcyBSb3dOb2RlW10sIGRldGFpbHMsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5leGlzdHNBbmROb3RFbXB0eSh0cmFuLmFkZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydE5vZGVzKHRyYW4uYWRkIGFzIFJvd05vZGVbXSwgZGV0YWlscywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbXVzdCBmbHVzaCBoZXJlLCBhbmQgbm90IGFsbG93IGFub3RoZXIgdHJhbnNhY3Rpb24gdG8gYmUgYXBwbGllZCxcbiAgICAgICAgICAgIC8vIGFzIGVhY2ggdHJhbnNhY3Rpb24gbXVzdCBmaW5pc2ggbGVhdmluZyB0aGUgZGF0YSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuXG4gICAgICAgICAgICBpZiAoYmF0Y2hSZW1vdmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50c1dpdGhDaGlsZHJlblJlbW92ZWQgPSBiYXRjaFJlbW92ZXIuZ2V0QWxsUGFyZW50cygpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgYmF0Y2hSZW1vdmVyLmZsdXNoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eUdyb3VwcyhwYXJlbnRzV2l0aENoaWxkcmVuUmVtb3ZlZCwgZGV0YWlscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkZXRhaWxzLnJvd05vZGVPcmRlcikge1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hpbGRyZW4oZGV0YWlscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIHVzZWQgd2hlbiBkb2luZyBkZWx0YSB1cGRhdGVzLCBlZyBSZWR1eCwga2VlcHMgbm9kZXMgaW4gcmlnaHQgb3JkZXJcbiAgICBwcml2YXRlIHNvcnRDaGlsZHJlbihkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiB2b2lkIHtcbiAgICAgICAgZGV0YWlscy5jaGFuZ2VkUGF0aC5mb3JFYWNoQ2hhbmdlZE5vZGVEZXB0aEZpcnN0KG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlkU29ydCA9IF8uc29ydFJvd05vZGVzQnlPcmRlcihub2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCEsIGRldGFpbHMucm93Tm9kZU9yZGVyKTtcbiAgICAgICAgICAgIGlmIChkaWRTb3J0KSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5jaGFuZ2VkUGF0aC5hZGRQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcmRlckdyb3VwcyhkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tcGFyYXRvciA9IGRldGFpbHMuaW5pdGlhbEdyb3VwT3JkZXJDb21wYXJhdG9yO1xuICAgICAgICBpZiAoXy5leGlzdHMoY29tcGFyYXRvcikpIHsgcmVjdXJzaXZlU29ydChkZXRhaWxzLnJvb3ROb2RlKTsgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZVNvcnQocm93Tm9kZTogUm93Tm9kZSk6IHZvaWQge1xuICAgICAgICAgICAgY29uc3QgZG9Tb3J0ID0gXy5leGlzdHMocm93Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXApICYmXG4gICAgICAgICAgICAgICAgLy8gd2Ugb25seSB3YW50IHRvIHNvcnQgZ3JvdXBzLCBzbyB3ZSBkbyBub3Qgc29ydCBsZWFmcyAoYSBsZWFmIGdyb3VwIGhhcyBsZWFmcyBhcyBjaGlsZHJlbilcbiAgICAgICAgICAgICAgICAhcm93Tm9kZS5sZWFmR3JvdXA7XG5cbiAgICAgICAgICAgIGlmIChkb1NvcnQpIHtcbiAgICAgICAgICAgICAgICByb3dOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCEuc29ydCgobm9kZUEsIG5vZGVCKSA9PiBjb21wYXJhdG9yISh7IG5vZGVBLCBub2RlQiB9KSk7XG4gICAgICAgICAgICAgICAgcm93Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXAhLmZvckVhY2goKGNoaWxkTm9kZTogUm93Tm9kZSkgPT4gcmVjdXJzaXZlU29ydChjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhpc3RpbmdQYXRoRm9yTm9kZShub2RlOiBSb3dOb2RlLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiBHcm91cEluZm9bXSB7XG4gICAgICAgIGNvbnN0IHJlczogR3JvdXBJbmZvW10gPSBbXTtcblxuICAgICAgICAvLyB3aGVuIGRvaW5nIHRyZWUgZGF0YSwgdGhlIG5vZGUgaXMgcGFydCBvZiB0aGUgcGF0aCxcbiAgICAgICAgLy8gYnV0IHdoZW4gZG9pbmcgZ3JpZCBncm91cGluZywgdGhlIG5vZGUgaXMgbm90IHBhcnQgb2YgdGhlIHBhdGggc28gd2Ugc3RhcnQgd2l0aCB0aGUgcGFyZW50LlxuICAgICAgICBsZXQgcG9pbnRlciA9IGRldGFpbHMudXNpbmdUcmVlRGF0YSA/IG5vZGUgOiBub2RlLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHBvaW50ZXIgJiYgcG9pbnRlciAhPT0gZGV0YWlscy5yb290Tm9kZSkge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogcG9pbnRlci5rZXkhLFxuICAgICAgICAgICAgICAgIHJvd0dyb3VwQ29sdW1uOiBwb2ludGVyLnJvd0dyb3VwQ29sdW1uLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBwb2ludGVyLmZpZWxkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXMucmV2ZXJzZSgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZU5vZGVzSW5Xcm9uZ1BhdGgoY2hpbGROb2RlczogUm93Tm9kZVtdLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGJhdGNoUmVtb3ZlcjogQmF0Y2hSZW1vdmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaChjaGlsZE5vZGUgPT4ge1xuXG4gICAgICAgICAgICAvLyB3ZSBhZGQgbm9kZSwgZXZlbiBpZiBwYXJlbnQgaGFzIG5vdCBjaGFuZ2VkLCBhcyB0aGUgZGF0YSBjb3VsZCBoYXZlXG4gICAgICAgICAgICAvLyBjaGFuZ2VkLCBoZW5jZSBhZ2dyZWdhdGlvbnMgd2lsbCBiZSB3cm9uZ1xuICAgICAgICAgICAgaWYgKGRldGFpbHMuY2hhbmdlZFBhdGguaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgIGRldGFpbHMuY2hhbmdlZFBhdGguYWRkUGFyZW50Tm9kZShjaGlsZE5vZGUucGFyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5mb1RvS2V5TWFwcGVyID0gKGl0ZW06IEdyb3VwSW5mbykgPT4gaXRlbS5rZXk7XG4gICAgICAgICAgICBjb25zdCBvbGRQYXRoOiBzdHJpbmdbXSA9IHRoaXMuZ2V0RXhpc3RpbmdQYXRoRm9yTm9kZShjaGlsZE5vZGUsIGRldGFpbHMpLm1hcChpbmZvVG9LZXlNYXBwZXIpO1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aDogc3RyaW5nW10gPSB0aGlzLmdldEdyb3VwSW5mbyhjaGlsZE5vZGUsIGRldGFpbHMpLm1hcChpbmZvVG9LZXlNYXBwZXIpO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlSW5Db3JyZWN0UGF0aCA9IF8uYXJlRXF1YWwob2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICAgICAgICAgIGlmICghbm9kZUluQ29ycmVjdFBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVOb2RlKGNoaWxkTm9kZSwgZGV0YWlscywgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlTm9kZShjaGlsZE5vZGU6IFJvd05vZGUsIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgYmF0Y2hSZW1vdmVyOiBCYXRjaFJlbW92ZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcblxuICAgICAgICB0aGlzLnJlbW92ZU5vZGVzSW5TdGFnZXMoW2NoaWxkTm9kZV0sIGRldGFpbHMsIGJhdGNoUmVtb3Zlcik7XG4gICAgICAgIHRoaXMuaW5zZXJ0T25lTm9kZShjaGlsZE5vZGUsIGRldGFpbHMsIHRydWUsIGJhdGNoUmVtb3Zlcik7XG5cbiAgICAgICAgLy8gaGFjayAtIGlmIHdlIGRpZG4ndCBkbyB0aGlzLCB0aGVuIHJlbmFtaW5nIGEgdHJlZSBpdGVtIChpZSBjaGFuZ2luZyByb3dOb2RlLmtleSkgd291bGRuJ3QgZ2V0XG4gICAgICAgIC8vIHJlZnJlc2hlZCBpbnRvIHRoZSBndWkuXG4gICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIHRvIGtpY2sgb2ZmIHRoZSBldmVudCB0aGF0IHJvd0NvbXAgbGlzdGVucyB0byBmb3IgcmVmcmVzaC4gdGhpcyBpbiB0dXJuXG4gICAgICAgIC8vIHRoZW4gd2lsbCBnZXQgZWFjaCBjZWxsIGluIHRoZSByb3cgdG8gcmVmcmVzaCAtIHdoaWNoIGlzIHdoYXQgd2UgbmVlZCBhcyB3ZSBkb24ndCBrbm93IHdoaWNoXG4gICAgICAgIC8vIGNvbHVtbnMgd2lsbCBiZSBkaXNwbGF5aW5nIHRoZSByb3dOb2RlLmtleSBpbmZvLlxuICAgICAgICBjaGlsZE5vZGUuc2V0RGF0YShjaGlsZE5vZGUuZGF0YSk7XG5cbiAgICAgICAgLy8gd2UgYWRkIGJvdGggb2xkIGFuZCBuZXcgcGFyZW50cyB0byBjaGFuZ2VkIHBhdGgsIGFzIGJvdGggd2lsbCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAgICAgICAgLy8gd2UgYWxyZWFkeSBhZGRlZCB0aGUgb2xkIHBhcmVudCAoaW4gY2FsbGluZyBtZXRob2QpLCBzbyBqdXN0IGFkZCB0aGUgbmV3IHBhcmVudCBoZXJlXG4gICAgICAgIGlmIChkZXRhaWxzLmNoYW5nZWRQYXRoLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmVudCA9IGNoaWxkTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICBkZXRhaWxzLmNoYW5nZWRQYXRoLmFkZFBhcmVudE5vZGUobmV3UGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm9kZXMobGVhZlJvd05vZGVzOiBSb3dOb2RlW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgYmF0Y2hSZW1vdmVyOiBCYXRjaFJlbW92ZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVOb2Rlc0luU3RhZ2VzKGxlYWZSb3dOb2RlcywgZGV0YWlscywgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgaWYgKGRldGFpbHMuY2hhbmdlZFBhdGguaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbGVhZlJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiBkZXRhaWxzLmNoYW5nZWRQYXRoLmFkZFBhcmVudE5vZGUocm93Tm9kZS5wYXJlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm9kZXNJblN0YWdlcyhsZWFmUm93Tm9kZXM6IFJvd05vZGVbXSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBiYXRjaFJlbW92ZXI6IEJhdGNoUmVtb3ZlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZU5vZGVzRnJvbVBhcmVudHMobGVhZlJvd05vZGVzLCBkZXRhaWxzLCBiYXRjaFJlbW92ZXIpO1xuICAgICAgICBpZiAoZGV0YWlscy51c2luZ1RyZWVEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3RSZW1vdmVDcmVhdGVGaWxsZXJOb2RlcyhsZWFmUm93Tm9kZXMsIGRldGFpbHMpO1xuXG4gICAgICAgICAgICAvLyBXaGVuIG5vdCBUcmVlRGF0YSwgdGhlbiByZW1vdmVFbXB0eUdyb3VwcyBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIEJhdGNoUmVtb3ZlciBpcyBmbHVzaGVkLlxuICAgICAgICAgICAgLy8gSG93ZXZlciBmb3IgVHJlZURhdGEsIHRoZXJlIGlzIG5vIEJhdGNoUmVtb3Zlciwgc28gd2UgaGF2ZSB0byBjYWxsIHJlbW92ZUVtcHR5R3JvdXBzIGhlcmUuXG4gICAgICAgICAgICBjb25zdCBub2RlUGFyZW50cyA9IGxlYWZSb3dOb2Rlcy5tYXAobiA9PiBuLnBhcmVudCEpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eUdyb3Vwcyhub2RlUGFyZW50cywgZGV0YWlscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZvckVhY2hQYXJlbnRHcm91cChkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGdyb3VwOiBSb3dOb2RlLCBjYWxsYmFjazogKHBhcmVudDogUm93Tm9kZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgcG9pbnRlcjogUm93Tm9kZSB8IG51bGwgPSBncm91cDtcbiAgICAgICAgd2hpbGUgKHBvaW50ZXIgJiYgcG9pbnRlciAhPT0gZGV0YWlscy5yb290Tm9kZSkge1xuICAgICAgICAgICAgY2FsbGJhY2socG9pbnRlcik7XG4gICAgICAgICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU5vZGVzRnJvbVBhcmVudHMobm9kZXNUb1JlbW92ZTogUm93Tm9kZVtdLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIHByb3ZpZGVkOiBCYXRjaFJlbW92ZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRoIEJhdGNoUmVtb3ZlciBhcyBvcHRpb25hbC4gaWYgaXQgaXMgbWlzc2VkLCB3ZSBjcmVhdGVkIGEgbG9jYWwgdmVyc2lvblxuICAgICAgICAvLyBhbmQgZmx1c2ggaXQgYXQgdGhlIGVuZC4gaWYgb25lIGlzIHByb3ZpZGVkLCB3ZSBhZGQgdG8gdGhlIHByb3ZpZGVkIG9uZSBhbmQgaXQgZ2V0cyBmbHVzaGVkIGVsc2V3aGVyZS5cbiAgICAgICAgY29uc3QgYmF0Y2hSZW1vdmVySXNMb2NhbCA9IHByb3ZpZGVkID09IG51bGw7XG4gICAgICAgIGNvbnN0IGJhdGNoUmVtb3ZlclRvVXNlID0gcHJvdmlkZWQgPyBwcm92aWRlZCA6IG5ldyBCYXRjaFJlbW92ZXIoKTtcblxuICAgICAgICBub2Rlc1RvUmVtb3ZlLmZvckVhY2gobm9kZVRvUmVtb3ZlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVBhcmVudChub2RlVG9SZW1vdmUsIGJhdGNoUmVtb3ZlclRvVXNlKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gYWxsTGVhZkNoaWxkcmVuLiB3ZSBjbGVhciBkb3duIGFsbCBwYXJlbnRzIEVYQ0VQVCB0aGUgUm9vdCBOb2RlLCBhc1xuICAgICAgICAgICAgLy8gdGhlIENsaWVudFNpZGVOb2RlTWFuYWdlciBpcyByZXNwb25zaWJsZSBmb3IgdGhlIFJvb3QgTm9kZS5cbiAgICAgICAgICAgIHRoaXMuZm9yRWFjaFBhcmVudEdyb3VwKGRldGFpbHMsIG5vZGVUb1JlbW92ZS5wYXJlbnQhLCBwYXJlbnROb2RlID0+IHtcbiAgICAgICAgICAgICAgICBiYXRjaFJlbW92ZXJUb1VzZS5yZW1vdmVGcm9tQWxsTGVhZkNoaWxkcmVuKHBhcmVudE5vZGUsIG5vZGVUb1JlbW92ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGJhdGNoUmVtb3ZlcklzTG9jYWwpIHtcbiAgICAgICAgICAgIGJhdGNoUmVtb3ZlclRvVXNlLmZsdXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc3RSZW1vdmVDcmVhdGVGaWxsZXJOb2Rlcyhub2Rlc1RvUmVtb3ZlOiBSb3dOb2RlW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IHZvaWQge1xuICAgICAgICBub2Rlc1RvUmVtb3ZlLmZvckVhY2gobm9kZVRvUmVtb3ZlID0+IHtcblxuICAgICAgICAgICAgLy8gaWYgbm90IGdyb3VwLCBhbmQgY2hpbGRyZW4gYXJlIHByZXNlbnQsIG5lZWQgdG8gbW92ZSBjaGlsZHJlbiB0byBhIGdyb3VwLlxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIG5vIGNoaWxkcmVuLCB3ZSBjYW4ganVzdCByZW1vdmUgd2l0aG91dCByZXBsYWNpbmcuXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlV2l0aEdyb3VwID0gbm9kZVRvUmVtb3ZlLmhhc0NoaWxkcmVuKCk7XG4gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhHcm91cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFBhdGggPSB0aGlzLmdldEV4aXN0aW5nUGF0aEZvck5vZGUobm9kZVRvUmVtb3ZlLCBkZXRhaWxzKTtcbiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGp1c3QgcmVtb3ZlZCB0aGUgdXNlckdyb3VwLCB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBuZXcgc3VwcG9ydCBncm91cFxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IHRoaXMuZmluZFBhcmVudEZvck5vZGUobm9kZVRvUmVtb3ZlLCBvbGRQYXRoLCBkZXRhaWxzKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIHByb3BlcnRpZXMgYXJlIHRoZSBvbmVzIHRoYXQgd2lsbCBiZSBpbmNvcnJlY3QgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgZ3JvdXAsXG4gICAgICAgICAgICAgICAgLy8gc28gY29weSB0aGVtIGZyb20gdGhlIG9sZCBjaGlsZE5vZGVcbiAgICAgICAgICAgICAgICBuZXdHcm91cE5vZGUuZXhwYW5kZWQgPSBub2RlVG9SZW1vdmUuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlLmFsbExlYWZDaGlsZHJlbiA9IG5vZGVUb1JlbW92ZS5hbGxMZWFmQ2hpbGRyZW47XG4gICAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IG5vZGVUb1JlbW92ZS5jaGlsZHJlbkFmdGVyR3JvdXA7XG4gICAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlLmNoaWxkcmVuTWFwcGVkID0gbm9kZVRvUmVtb3ZlLmNoaWxkcmVuTWFwcGVkO1xuICAgICAgICAgICAgICAgIG5ld0dyb3VwTm9kZS51cGRhdGVIYXNDaGlsZHJlbigpO1xuXG4gICAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cCEuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUucGFyZW50ID0gbmV3R3JvdXBOb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUVtcHR5R3JvdXBzKHBvc3NpYmxlRW1wdHlHcm91cHM6IFJvd05vZGVbXSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG4gICAgICAgIC8vIHdlIGRvIHRoaXMgbXVsdGlwbGUgdGltZXMsIGFzIHdoZW4gd2UgcmVtb3ZlIGdyb3VwcywgdGhhdCBtZWFucyB0aGUgcGFyZW50IG9mIGp1c3QgcmVtb3ZlZFxuICAgICAgICAvLyBncm91cCBjYW4gdGhlbiBiZSBlbXB0eS4gdG8gZ2V0IGFyb3VuZCB0aGlzLCBpZiB3ZSByZW1vdmUsIHRoZW4gd2UgY2hlY2sgZXZlcnl0aGluZyBhZ2FpbiBmb3JcbiAgICAgICAgLy8gbmV3bHkgZW1wdGllZCBncm91cHMuIHRoZSBtYXggbnVtYmVyIG9mIHRpbWVzIHRoaXMgd2lsbCBleGVjdXRlIGlzIHRoZSBkZXB0aCBvZiB0aGUgZ3JvdXAgdHJlZS5cbiAgICAgICAgbGV0IGNoZWNrQWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwU2hvdWxkQmVSZW1vdmVkID0gKHJvd05vZGU6IFJvd05vZGUpOiBib29sZWFuID0+IHtcblxuICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgd2hpbGUgbG9vcCBiZWxvdywgaXQncyBwb3NzaWJsZSB3ZSBhbHJlYWR5IG1vdmVkIHRoZSBub2RlLFxuICAgICAgICAgICAgLy8gc28gZG91YmxlIGNoZWNrIGJlZm9yZSB0cnlpbmcgdG8gcmVtb3ZlIGFnYWluLlxuICAgICAgICAgICAgY29uc3QgbWFwS2V5ID0gdGhpcy5nZXRDaGlsZHJlbk1hcHBlZEtleShyb3dOb2RlLmtleSEsIHJvd05vZGUucm93R3JvdXBDb2x1bW4pO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Um93Tm9kZSA9IHJvd05vZGUucGFyZW50O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBBbHJlYWR5UmVtb3ZlZCA9IChwYXJlbnRSb3dOb2RlICYmIHBhcmVudFJvd05vZGUuY2hpbGRyZW5NYXBwZWQpID9cbiAgICAgICAgICAgICAgICAhcGFyZW50Um93Tm9kZS5jaGlsZHJlbk1hcHBlZFttYXBLZXldIDogdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwQWxyZWFkeVJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QgbGlua2VkLCB0aGVuIGdyb3VwIHdhcyBhbHJlYWR5IHJlbW92ZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBzdGlsbCBub3QgcmVtb3ZlZCwgdGhlbiB3ZSByZW1vdmUgaWYgdGhpcyBncm91cCBpcyBlbXB0eVxuICAgICAgICAgICAgcmV0dXJuICEhcm93Tm9kZS5pc0VtcHR5Um93R3JvdXBOb2RlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgd2hpbGUgKGNoZWNrQWdhaW4pIHtcbiAgICAgICAgICAgIGNoZWNrQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVtb3ZlcjogQmF0Y2hSZW1vdmVyID0gbmV3IEJhdGNoUmVtb3ZlcigpO1xuICAgICAgICAgICAgcG9zc2libGVFbXB0eUdyb3Vwcy5mb3JFYWNoKHBvc3NpYmxlRW1wdHlHcm91cCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGdyb3Vwc1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaFBhcmVudEdyb3VwKGRldGFpbHMsIHBvc3NpYmxlRW1wdHlHcm91cCwgcm93Tm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cFNob3VsZEJlUmVtb3ZlZChyb3dOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21QYXJlbnQocm93Tm9kZSwgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlbW92ZSBzZWxlY3Rpb24gb24gZmlsbGVyIG5vZGVzIGhlcmUsIGFzIHRoZSBzZWxlY3Rpb24gd291bGQgbm90IGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIFJvd05vZGVNYW5hZ2VyLCBhcyBmaWxsZXIgbm9kZXMgZG9uJ3QgZXhpc3Qgb24gdGhlIFJvd05vZGVNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dOb2RlLnNldFNlbGVjdGVkUGFyYW1zKHsgbmV3VmFsdWU6IGZhbHNlLCBzb3VyY2U6ICdyb3dHcm91cENoYW5nZWQnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJhdGNoUmVtb3Zlci5mbHVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIHRoZSBwYXJlbnQgYnk6XG4gICAgLy8gYSkgcmVtb3ZpbmcgZnJvbSBjaGlsZHJlbkFmdGVyR3JvdXAgKHVzaW5nIGJhdGNoUmVtb3ZlciBpZiBwcmVzZW50LCBvdGhlcndpc2UgaW1tZWRpYXRlbHkpXG4gICAgLy8gYikgcmVtb3ZpbmcgZnJvbSBjaGlsZHJlbk1hcHBlZCAoaW1tZWRpYXRlbHkpXG4gICAgLy8gYykgc2V0Um93VG9wKG51bGwpIC0gYXMgdGhlIHJvd1JlbmRlcmVyIHVzZXMgdGhpcyB0byBrbm93IHRoZSBSb3dOb2RlIGlzIG5vIGxvbmdlciBuZWVkZWRcbiAgICAvLyBkKSBzZXRSb3dJbmRleChudWxsKSAtIGFzIHRoZSByb3dOb2RlIHdpbGwgbm8gbG9uZ2VyIGJlIGRpc3BsYXllZC5cbiAgICBwcml2YXRlIHJlbW92ZUZyb21QYXJlbnQoY2hpbGQ6IFJvd05vZGUsIGJhdGNoUmVtb3Zlcj86IEJhdGNoUmVtb3Zlcikge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoYmF0Y2hSZW1vdmVyKSB7XG4gICAgICAgICAgICAgICAgYmF0Y2hSZW1vdmVyLnJlbW92ZUZyb21DaGlsZHJlbkFmdGVyR3JvdXAoY2hpbGQucGFyZW50LCBjaGlsZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF8ucmVtb3ZlRnJvbUFycmF5KGNoaWxkLnBhcmVudC5jaGlsZHJlbkFmdGVyR3JvdXAhLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50LnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFwS2V5ID0gdGhpcy5nZXRDaGlsZHJlbk1hcHBlZEtleShjaGlsZC5rZXkhLCBjaGlsZC5yb3dHcm91cENvbHVtbik7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQgJiYgY2hpbGQucGFyZW50LmNoaWxkcmVuTWFwcGVkKSB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQuY2hpbGRyZW5NYXBwZWRbbWFwS2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgdHJhbnNpdGlvbiwgc2VlIHJvd0NvbXAgcmVtb3ZlRmlyc3RQYXNzRnVuY3MuIHdoZW4gZG9pbmcgYW5pbWF0aW9uIGFuZFxuICAgICAgICAvLyByZW1vdmUsIGlmIHJvd1RvcCBpcyBzdGlsbCBwcmVzZW50LCB0aGUgcm93Q29tcCB0aGlua3MgaXQncyBqdXN0IG1vdmVkIHBvc2l0aW9uLlxuICAgICAgICBjaGlsZC5zZXRSb3dUb3AobnVsbCk7XG4gICAgICAgIGNoaWxkLnNldFJvd0luZGV4KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9QYXJlbnQoY2hpbGQ6IFJvd05vZGUsIHBhcmVudDogUm93Tm9kZSB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWFwS2V5ID0gdGhpcy5nZXRDaGlsZHJlbk1hcHBlZEtleShjaGlsZC5rZXkhLCBjaGlsZC5yb3dHcm91cENvbHVtbik7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuTWFwcGVkICE9IG51bGw7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW5NYXBwZWQhW21hcEtleV0gPSBjaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbkFmdGVyR3JvdXAhLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgcGFyZW50LnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUdyb3VwQ29sc0VxdWFsKGQxOiBHcm91cGluZ0RldGFpbHMsIGQyOiBHcm91cGluZ0RldGFpbHMpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGQxID09IG51bGwgfHwgZDIgPT0gbnVsbCB8fCBkMS5waXZvdE1vZGUgIT09IGQyLnBpdm90TW9kZSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICByZXR1cm4gXy5hcmVFcXVhbChkMS5ncm91cGVkQ29scywgZDIuZ3JvdXBlZENvbHMpICYmIF8uYXJlRXF1YWwoZDEua2V5Q3JlYXRvcnMsIGQyLmtleUNyZWF0b3JzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrQWxsR3JvdXBEYXRhQWZ0ZXJDb2xzQ2hhbmdlZChkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiB2b2lkIHtcblxuICAgICAgICBjb25zdCByZWN1cnNlID0gKHJvd05vZGVzOiBSb3dOb2RlW10gfCBudWxsKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJvd05vZGVzKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xlYWZOb2RlID0gIWRldGFpbHMudXNpbmdUcmVlRGF0YSAmJiAhcm93Tm9kZS5ncm91cDtcbiAgICAgICAgICAgICAgICBpZiAoaXNMZWFmTm9kZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEluZm86IEdyb3VwSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHJvd05vZGUuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGtleTogcm93Tm9kZS5rZXkhLFxuICAgICAgICAgICAgICAgICAgICByb3dHcm91cENvbHVtbjogcm93Tm9kZS5yb3dHcm91cENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbGVhZk5vZGU6IHJvd05vZGUuYWxsTGVhZkNoaWxkcmVuWzBdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcm91cERhdGEocm93Tm9kZSwgZ3JvdXBJbmZvLCBkZXRhaWxzKTtcbiAgICAgICAgICAgICAgICByZWN1cnNlKHJvd05vZGUuY2hpbGRyZW5BZnRlckdyb3VwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlY3Vyc2UoZGV0YWlscy5yb290Tm9kZS5jaGlsZHJlbkFmdGVyR3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdGd1blJlc2V0RXZlcnl0aGluZyhkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMsIGFmdGVyQ29sdW1uc0NoYW5nZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgICAgICBpZiAodGhpcy5ub0NoYW5nZUluR3JvdXBpbmdDb2x1bW5zKGRldGFpbHMsIGFmdGVyQ29sdW1uc0NoYW5nZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBncm91cHMgYXJlIGFib3V0IHRvIGdldCBkaXNwb3NlZCwgc28gbmVlZCB0byBkZXNlbGVjdCBhbnkgdGhhdCBhcmUgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmZpbHRlckZyb21TZWxlY3Rpb24oKG5vZGU6IFJvd05vZGUpID0+IG5vZGUgJiYgIW5vZGUuZ3JvdXApO1xuXG4gICAgICAgIGNvbnN0IHsgcm9vdE5vZGUsIGdyb3VwZWRDb2xzIH0gPSBkZXRhaWxzO1xuICAgICAgICAvLyBiZWNhdXNlIHdlIGFyZSBub3QgY3JlYXRpbmcgdGhlIHJvb3Qgbm9kZSBlYWNoIHRpbWUsIHdlIGhhdmUgdGhlIGxvZ2ljXG4gICAgICAgIC8vIGhlcmUgdG8gY2hhbmdlIGxlYWZHcm91cCBvbmNlLlxuICAgICAgICAvLyB3ZSBzZXQgLmxlYWZHcm91cCB0byBmYWxzZSBmb3IgdHJlZSBkYXRhLCBhcyAubGVhZkdyb3VwIGlzIG9ubHkgdXNlZCB3aGVuIHBpdm90aW5nLCBhbmQgcGl2b3RpbmdcbiAgICAgICAgLy8gaXNuJ3QgYWxsb3dlZCB3aXRoIHRyZWVEYXRhLCBzbyB0aGUgZ3JpZCBuZXZlciBhY3R1YWxseSB1c2UgLmxlYWZHcm91cCB3aGVuIGRvaW5nIHRyZWVEYXRhLlxuICAgICAgICByb290Tm9kZS5sZWFmR3JvdXAgPSBkZXRhaWxzLnVzaW5nVHJlZURhdGEgPyBmYWxzZSA6IGdyb3VwZWRDb2xzLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAvLyB3ZSBhcmUgZG9pbmcgZXZlcnl0aGluZyBmcm9tIHNjcmF0Y2gsIHNvIHJlc2V0IGNoaWxkcmVuQWZ0ZXJHcm91cCBhbmQgY2hpbGRyZW5NYXBwZWQgZnJvbSB0aGUgcm9vdE5vZGVcbiAgICAgICAgcm9vdE5vZGUuY2hpbGRyZW5BZnRlckdyb3VwID0gW107XG4gICAgICAgIHJvb3ROb2RlLmNoaWxkcmVuTWFwcGVkID0ge307XG4gICAgICAgIHJvb3ROb2RlLnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG5cbiAgICAgICAgY29uc3Qgc2libGluZyA9IHJvb3ROb2RlLnNpYmxpbmc7XG4gICAgICAgIGlmIChzaWJsaW5nKSB7XG4gICAgICAgICAgICBzaWJsaW5nLmNoaWxkcmVuQWZ0ZXJHcm91cCA9IHJvb3ROb2RlLmNoaWxkcmVuQWZ0ZXJHcm91cDtcbiAgICAgICAgICAgIHNpYmxpbmcuY2hpbGRyZW5NYXBwZWQgPSByb290Tm9kZS5jaGlsZHJlbk1hcHBlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zZXJ0Tm9kZXMocm9vdE5vZGUuYWxsTGVhZkNoaWxkcmVuLCBkZXRhaWxzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub0NoYW5nZUluR3JvdXBpbmdDb2x1bW5zKGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgYWZ0ZXJDb2x1bW5zQ2hhbmdlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgbm9GdXJ0aGVyUHJvY2Vzc2luZ05lZWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwRGlzcGxheUNvbHVtbnMgPSB0aGlzLmNvbHVtbk1vZGVsLmdldEdyb3VwRGlzcGxheUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBEaXNwbGF5Q29sSWRzID0gZ3JvdXBEaXNwbGF5Q29sdW1ucyA/XG4gICAgICAgICAgICBncm91cERpc3BsYXlDb2x1bW5zLm1hcChjID0+IGMuZ2V0SWQoKSkuam9pbignLScpIDogJyc7XG5cbiAgICAgICAgaWYgKGFmdGVyQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWRvIGdyb3VwaW5nIGlmIGRvaW5nIG5vcm1hbCBncm91cGluZyAoaWUgbm90IHRyZWUgZGF0YSlcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgZ3JvdXAgY29scyBoYXZlIGNoYW5nZWQuXG4gICAgICAgICAgICBub0Z1cnRoZXJQcm9jZXNzaW5nTmVlZGVkID0gZGV0YWlscy51c2luZ1RyZWVEYXRhIHx8IHRoaXMuYXJlR3JvdXBDb2xzRXF1YWwoZGV0YWlscywgdGhpcy5vbGRHcm91cGluZ0RldGFpbHMpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZ3JvdXAgZGlzcGxheSBjb2xzIGhhdmUgY2hhbmdlZCwgdGhlbiB3ZSBuZWVkIHRvIHVwZGF0ZSByb3dOb2RlLmdyb3VwRGF0YVxuICAgICAgICAgICAgLy8gKHJlZ2FyZGxlc3Mgb2YgdHJlZSBkYXRhIG9yIHJvdyBncm91cGluZylcbiAgICAgICAgICAgIGlmICh0aGlzLm9sZEdyb3VwRGlzcGxheUNvbElkcyAhPT0gbmV3R3JvdXBEaXNwbGF5Q29sSWRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FsbEdyb3VwRGF0YUFmdGVyQ29sc0NoYW5nZWQoZGV0YWlscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9sZEdyb3VwaW5nRGV0YWlscyA9IGRldGFpbHM7XG4gICAgICAgIHRoaXMub2xkR3JvdXBEaXNwbGF5Q29sSWRzID0gbmV3R3JvdXBEaXNwbGF5Q29sSWRzO1xuXG4gICAgICAgIHJldHVybiBub0Z1cnRoZXJQcm9jZXNzaW5nTmVlZGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0Tm9kZXMobmV3Um93Tm9kZXM6IFJvd05vZGVbXSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzLCBpc01vdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbmV3Um93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0T25lTm9kZShyb3dOb2RlLCBkZXRhaWxzLCBpc01vdmUpO1xuICAgICAgICAgICAgaWYgKGRldGFpbHMuY2hhbmdlZFBhdGguaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgIGRldGFpbHMuY2hhbmdlZFBhdGguYWRkUGFyZW50Tm9kZShyb3dOb2RlLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0T25lTm9kZShjaGlsZE5vZGU6IFJvd05vZGUsIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgaXNNb3ZlOiBib29sZWFuLCBiYXRjaFJlbW92ZXI/OiBCYXRjaFJlbW92ZXIpOiB2b2lkIHtcblxuICAgICAgICBjb25zdCBwYXRoOiBHcm91cEluZm9bXSA9IHRoaXMuZ2V0R3JvdXBJbmZvKGNoaWxkTm9kZSwgZGV0YWlscyk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50R3JvdXAgPSB0aGlzLmZpbmRQYXJlbnRGb3JOb2RlKGNoaWxkTm9kZSwgcGF0aCwgZGV0YWlscywgYmF0Y2hSZW1vdmVyKTtcbiAgICAgICAgaWYgKCFwYXJlbnRHcm91cC5ncm91cCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBBRyBHcmlkOiBkdXBsaWNhdGUgZ3JvdXAga2V5cyBmb3Igcm93IGRhdGEsIGtleXMgc2hvdWxkIGJlIHVuaXF1ZWAsXG4gICAgICAgICAgICAgICAgW3BhcmVudEdyb3VwLmRhdGEsIGNoaWxkTm9kZS5kYXRhXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlscy51c2luZ1RyZWVEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnN3YXBHcm91cFdpdGhVc2VyTm9kZShwYXJlbnRHcm91cCwgY2hpbGROb2RlLCBpc01vdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGROb2RlLnBhcmVudCA9IHBhcmVudEdyb3VwO1xuICAgICAgICAgICAgY2hpbGROb2RlLmxldmVsID0gcGF0aC5sZW5ndGg7XG4gICAgICAgICAgICBwYXJlbnRHcm91cC5jaGlsZHJlbkFmdGVyR3JvdXAhLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgICAgIHBhcmVudEdyb3VwLnVwZGF0ZUhhc0NoaWxkcmVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRQYXJlbnRGb3JOb2RlKGNoaWxkTm9kZTogUm93Tm9kZSwgcGF0aDogR3JvdXBJbmZvW10sIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgYmF0Y2hSZW1vdmVyPzogQmF0Y2hSZW1vdmVyKTogUm93Tm9kZSB7XG4gICAgICAgIGxldCBuZXh0Tm9kZTogUm93Tm9kZSA9IGRldGFpbHMucm9vdE5vZGU7XG5cbiAgICAgICAgcGF0aC5mb3JFYWNoKChncm91cEluZm8sIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IHRoaXMuZ2V0T3JDcmVhdGVOZXh0Tm9kZShuZXh0Tm9kZSwgZ3JvdXBJbmZvLCBsZXZlbCwgZGV0YWlscyk7XG4gICAgICAgICAgICAvLyBub2RlIGdldHMgYWRkZWQgdG8gYWxsIGdyb3VwIG5vZGVzLlxuICAgICAgICAgICAgLy8gbm90ZTogd2UgZG8gbm90IGFkZCB0byByb290Tm9kZSBoZXJlLCBhcyB0aGUgcm9vdE5vZGUgaXMgdGhlIG1hc3RlciBsaXN0IG9mIHJvd05vZGVzXG5cbiAgICAgICAgICAgIGlmICghYmF0Y2hSZW1vdmVyPy5pc1JlbW92ZUZyb21BbGxMZWFmQ2hpbGRyZW4obmV4dE5vZGUsIGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZS5hbGxMZWFmQ2hpbGRyZW4ucHVzaChjaGlsZE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIG5vZGUgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCwgcHJldmVudCB0aGF0XG4gICAgICAgICAgICAgICAgYmF0Y2hSZW1vdmVyPy5wcmV2ZW50UmVtb3ZlRnJvbUFsbExlYWZDaGlsZHJlbihuZXh0Tm9kZSwgY2hpbGROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3dhcEdyb3VwV2l0aFVzZXJOb2RlKGZpbGxlckdyb3VwOiBSb3dOb2RlLCB1c2VyR3JvdXA6IFJvd05vZGUsIGlzTW92ZTogYm9vbGVhbikge1xuICAgICAgICB1c2VyR3JvdXAucGFyZW50ID0gZmlsbGVyR3JvdXAucGFyZW50O1xuICAgICAgICB1c2VyR3JvdXAua2V5ID0gZmlsbGVyR3JvdXAua2V5O1xuICAgICAgICB1c2VyR3JvdXAuZmllbGQgPSBmaWxsZXJHcm91cC5maWVsZDtcbiAgICAgICAgdXNlckdyb3VwLmdyb3VwRGF0YSA9IGZpbGxlckdyb3VwLmdyb3VwRGF0YTtcbiAgICAgICAgdXNlckdyb3VwLmxldmVsID0gZmlsbGVyR3JvdXAubGV2ZWw7XG4gICAgICAgIC8vIEFHLTM0NDEgLSBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgZXhwYW5kZWQgc3RhdHVzIG9mIHRoZSBub2RlIGlmIHdlJ3JlIG1vdmluZyBpdCwgc28gdGhhdFxuICAgICAgICAvLyB5b3UgY2FuIGRyYWcgYSBzdWIgdHJlZSBmcm9tIG9uZSBwYXJlbnQgdG8gYW5vdGhlciB3aXRob3V0IGNoYW5naW5nIGl0cyBleHBhbnNpb25cbiAgICAgICAgaWYgKCFpc01vdmUpIHtcbiAgICAgICAgICAgIHVzZXJHcm91cC5leHBhbmRlZCA9IGZpbGxlckdyb3VwLmV4cGFuZGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2Ugc2V0IC5sZWFmR3JvdXAgdG8gZmFsc2UgZm9yIHRyZWUgZGF0YSwgYXMgLmxlYWZHcm91cCBpcyBvbmx5IHVzZWQgd2hlbiBwaXZvdGluZywgYW5kIHBpdm90aW5nXG4gICAgICAgIC8vIGlzbid0IGFsbG93ZWQgd2l0aCB0cmVlRGF0YSwgc28gdGhlIGdyaWQgbmV2ZXIgYWN0dWFsbHkgdXNlIC5sZWFmR3JvdXAgd2hlbiBkb2luZyB0cmVlRGF0YS5cbiAgICAgICAgdXNlckdyb3VwLmxlYWZHcm91cCA9IGZpbGxlckdyb3VwLmxlYWZHcm91cDtcblxuICAgICAgICAvLyBhbHdheXMgbnVsbCBmb3IgdXNlckdyb3VwcywgYXMgcm93IGdyb3VwaW5nIGlzIG5vdCBhbGxvd2VkIHdoZW4gZG9pbmcgdHJlZSBkYXRhXG4gICAgICAgIHVzZXJHcm91cC5yb3dHcm91cEluZGV4ID0gZmlsbGVyR3JvdXAucm93R3JvdXBJbmRleDtcblxuICAgICAgICB1c2VyR3JvdXAuYWxsTGVhZkNoaWxkcmVuID0gZmlsbGVyR3JvdXAuYWxsTGVhZkNoaWxkcmVuO1xuICAgICAgICB1c2VyR3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwID0gZmlsbGVyR3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwO1xuICAgICAgICB1c2VyR3JvdXAuY2hpbGRyZW5NYXBwZWQgPSBmaWxsZXJHcm91cC5jaGlsZHJlbk1hcHBlZDtcbiAgICAgICAgdXNlckdyb3VwLnNpYmxpbmcgPSBmaWxsZXJHcm91cC5zaWJsaW5nO1xuICAgICAgICB1c2VyR3JvdXAudXBkYXRlSGFzQ2hpbGRyZW4oKTtcblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21QYXJlbnQoZmlsbGVyR3JvdXApO1xuICAgICAgICB1c2VyR3JvdXAuY2hpbGRyZW5BZnRlckdyb3VwIS5mb3JFYWNoKChyb3dOb2RlOiBSb3dOb2RlKSA9PiByb3dOb2RlLnBhcmVudCA9IHVzZXJHcm91cCk7XG4gICAgICAgIHRoaXMuYWRkVG9QYXJlbnQodXNlckdyb3VwLCBmaWxsZXJHcm91cC5wYXJlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVOZXh0Tm9kZShwYXJlbnRHcm91cDogUm93Tm9kZSwgZ3JvdXBJbmZvOiBHcm91cEluZm8sIGxldmVsOiBudW1iZXIsXG4gICAgICAgIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IFJvd05vZGUge1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q2hpbGRyZW5NYXBwZWRLZXkoZ3JvdXBJbmZvLmtleSwgZ3JvdXBJbmZvLnJvd0dyb3VwQ29sdW1uKTtcbiAgICAgICAgbGV0IG5leHROb2RlID0gcGFyZW50R3JvdXAuY2hpbGRyZW5NYXBwZWQgPyBwYXJlbnRHcm91cC5jaGlsZHJlbk1hcHBlZFtrZXldIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gdGhpcy5jcmVhdGVHcm91cChncm91cEluZm8sIHBhcmVudEdyb3VwLCBsZXZlbCwgZGV0YWlscyk7XG4gICAgICAgICAgICAvLyBhdHRhY2ggdGhlIG5ldyBncm91cCB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICB0aGlzLmFkZFRvUGFyZW50KG5leHROb2RlLCBwYXJlbnRHcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cChncm91cEluZm86IEdyb3VwSW5mbywgcGFyZW50OiBSb3dOb2RlLCBsZXZlbDogbnVtYmVyLCBkZXRhaWxzOiBHcm91cGluZ0RldGFpbHMpOiBSb3dOb2RlIHtcbiAgICAgICAgY29uc3QgZ3JvdXBOb2RlID0gbmV3IFJvd05vZGUodGhpcy5iZWFucyk7XG5cbiAgICAgICAgZ3JvdXBOb2RlLmdyb3VwID0gdHJ1ZTtcbiAgICAgICAgZ3JvdXBOb2RlLmZpZWxkID0gZ3JvdXBJbmZvLmZpZWxkO1xuICAgICAgICBncm91cE5vZGUucm93R3JvdXBDb2x1bW4gPSBncm91cEluZm8ucm93R3JvdXBDb2x1bW47XG5cbiAgICAgICAgdGhpcy5zZXRHcm91cERhdGEoZ3JvdXBOb2RlLCBncm91cEluZm8sIGRldGFpbHMpO1xuXG4gICAgICAgIGdyb3VwTm9kZS5rZXkgPSBncm91cEluZm8ua2V5O1xuICAgICAgICBncm91cE5vZGUuaWQgPSB0aGlzLmNyZWF0ZUdyb3VwSWQoZ3JvdXBOb2RlLCBwYXJlbnQsIGRldGFpbHMudXNpbmdUcmVlRGF0YSwgbGV2ZWwpO1xuXG4gICAgICAgIGdyb3VwTm9kZS5sZXZlbCA9IGxldmVsO1xuICAgICAgICBncm91cE5vZGUubGVhZkdyb3VwID0gZGV0YWlscy51c2luZ1RyZWVEYXRhID8gZmFsc2UgOiBsZXZlbCA9PT0gKGRldGFpbHMuZ3JvdXBlZENvbENvdW50IC0gMSk7XG5cbiAgICAgICAgZ3JvdXBOb2RlLmFsbExlYWZDaGlsZHJlbiA9IFtdO1xuXG4gICAgICAgIC8vIHdoeSBpcyB0aGlzIGRvbmUgaGVyZT8gd2UgYXJlIG5vdCB1cGRhdGluZyB0aGUgY2hpbGRyZW4gY291bnQgYXMgd2UgZ28sXG4gICAgICAgIC8vIGkgc3VzcGVjdCB0aGlzIGlzIHVwZGF0ZWQgaW4gdGhlIGZpbHRlciBzdGFnZVxuICAgICAgICBncm91cE5vZGUuc2V0QWxsQ2hpbGRyZW5Db3VudCgwKTtcblxuICAgICAgICBncm91cE5vZGUucm93R3JvdXBJbmRleCA9IGRldGFpbHMudXNpbmdUcmVlRGF0YSA/IG51bGwgOiBsZXZlbDtcblxuICAgICAgICBncm91cE5vZGUuY2hpbGRyZW5BZnRlckdyb3VwID0gW107XG4gICAgICAgIGdyb3VwTm9kZS5jaGlsZHJlbk1hcHBlZCA9IHt9O1xuICAgICAgICBncm91cE5vZGUudXBkYXRlSGFzQ2hpbGRyZW4oKTtcblxuICAgICAgICBncm91cE5vZGUucGFyZW50ID0gZGV0YWlscy5pbmNsdWRlUGFyZW50cyA/IHBhcmVudCA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5zZXRFeHBhbmRlZEluaXRpYWxWYWx1ZShkZXRhaWxzLCBncm91cE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBncm91cE5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cElkKG5vZGU6IFJvd05vZGUsIHBhcmVudDogUm93Tm9kZSwgdXNpbmdUcmVlRGF0YTogYm9vbGVhbiwgbGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCBjcmVhdGVHcm91cElkOiAobm9kZTogUm93Tm9kZSwgcGFyZW50OiBSb3dOb2RlIHwgbnVsbCwgbGV2ZWw6IG51bWJlcikgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgaWYgKHVzaW5nVHJlZURhdGEpIHtcbiAgICAgICAgICAgIGNyZWF0ZUdyb3VwSWQgPSAobm9kZSwgcGFyZW50LCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHsgcmV0dXJuIG51bGw7IH0gLy8gcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnQgPyBjcmVhdGVHcm91cElkKHBhcmVudCwgcGFyZW50LnBhcmVudCwgbGV2ZWwgLSAxKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3BhcmVudElkID09IG51bGwgPyAnJyA6IHBhcmVudElkICsgJy0nfSR7bGV2ZWx9LSR7bm9kZS5rZXl9YDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVHcm91cElkID0gKG5vZGUsIHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5yb3dHcm91cENvbHVtbikgeyByZXR1cm4gbnVsbDsgfSAvLyByb290IG5vZGVcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudCA/IGNyZWF0ZUdyb3VwSWQocGFyZW50LCBwYXJlbnQucGFyZW50LCAwKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3BhcmVudElkID09IG51bGwgPyAnJyA6IHBhcmVudElkICsgJy0nfSR7bm9kZS5yb3dHcm91cENvbHVtbi5nZXRDb2xJZCgpfS0ke25vZGUua2V5fWA7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgcHV0ICdyb3ctZ3JvdXAtJyBiZWZvcmUgdGhlIGdyb3VwIGlkLCBzbyBpdCBkb2Vzbid0IGNsYXNoIHdpdGggc3RhbmRhcmQgcm93IGlkJ3MuIHdlIGFsc28gdXNlICd0LScgYW5kICdiLSdcbiAgICAgICAgLy8gZm9yIHRvcCBwaW5uZWQgYW5kIGJvdHRvbSBwaW5uZWQgcm93cy5cbiAgICAgICAgcmV0dXJuIFJvd05vZGUuSURfUFJFRklYX1JPV19HUk9VUCArIGNyZWF0ZUdyb3VwSWQobm9kZSwgcGFyZW50LCBsZXZlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRHcm91cERhdGEoZ3JvdXBOb2RlOiBSb3dOb2RlLCBncm91cEluZm86IEdyb3VwSW5mbywgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogdm9pZCB7XG4gICAgICAgIGdyb3VwTm9kZS5ncm91cERhdGEgPSB7fTtcbiAgICAgICAgY29uc3QgZ3JvdXBEaXNwbGF5Q29sczogQ29sdW1uW10gPSB0aGlzLmNvbHVtbk1vZGVsLmdldEdyb3VwRGlzcGxheUNvbHVtbnMoKTtcbiAgICAgICAgZ3JvdXBEaXNwbGF5Q29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAvLyBuZXdHcm91cC5yb3dHcm91cENvbHVtbj1udWxsIHdoZW4gd29ya2luZyBvZmYgR3JvdXBJbmZvLCBhbmQgd2UgYWx3YXlzIGRpc3BsYXkgdGhlIGdyb3VwIGluIHRoZSBncm91cCBjb2x1bW5cbiAgICAgICAgICAgIC8vIGlmIHJvd0dyb3VwQ29sdW1uIGlzIHByZXNlbnQsIHRoZW4gaXQncyBncmlkIHJvdyBncm91cGluZyBhbmQgd2Ugb25seSBpbmNsdWRlIGlmIGNvbmZpZ3VyYXRpb24gc2F5cyBzb1xuICAgICAgICAgICAgY29uc3QgaXNUcmVlRGF0YSA9IGRldGFpbHMudXNpbmdUcmVlRGF0YTtcbiAgICAgICAgICAgIGlmIChpc1RyZWVEYXRhKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOb2RlLmdyb3VwRGF0YSFbY29sLmdldENvbElkKCldID0gZ3JvdXBJbmZvLmtleTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gZ3JvdXBOb2RlLnJvd0dyb3VwQ29sdW1uO1xuICAgICAgICAgICAgY29uc3QgaXNSb3dHcm91cERpc3BsYXllZCA9IGdyb3VwQ29sdW1uICE9PSBudWxsICYmIGNvbC5pc1Jvd0dyb3VwRGlzcGxheWVkKGdyb3VwQ29sdW1uLmdldElkKCkpO1xuICAgICAgICAgICAgaWYgKGlzUm93R3JvdXBEaXNwbGF5ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5zdXBwcmVzc0dyb3VwTWFpbnRhaW5WYWx1ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBOb2RlLmdyb3VwRGF0YSFbY29sLmdldENvbElkKCldID0gZ3JvdXBJbmZvLmtleTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYWludGFpbiBncm91cCB2YWx1ZSB0eXBlLCBnZXQgdGhlIHZhbHVlIGZyb20gYW55IGxlYWYgbm9kZS5cbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBOb2RlLmdyb3VwRGF0YSFbY29sLmdldENvbElkKCldID0gdGhpcy52YWx1ZVNlcnZpY2UuZ2V0VmFsdWUoZ3JvdXBDb2x1bW4sIGdyb3VwSW5mby5sZWFmTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENoaWxkcmVuTWFwcGVkS2V5KGtleTogc3RyaW5nLCByb3dHcm91cENvbHVtbjogQ29sdW1uIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChyb3dHcm91cENvbHVtbikge1xuICAgICAgICAgICAgLy8gZ3JvdXBpbmcgYnkgY29sdW1uc1xuICAgICAgICAgICAgcmV0dXJuIHJvd0dyb3VwQ29sdW1uLmdldElkKCkgKyAnLScgKyBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJlZSBkYXRhIC0gd2UgZG9uJ3QgaGF2ZSByb3dHcm91cENvbHVtbnNcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEV4cGFuZGVkSW5pdGlhbFZhbHVlKGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscywgZ3JvdXBOb2RlOiBSb3dOb2RlKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHBpdm90aW5nIHRoZSBsZWFmIGdyb3VwIGlzIG5ldmVyIGV4cGFuZGVkIGFzIHdlIGRvIG5vdCBzaG93IGxlYWYgcm93c1xuICAgICAgICBpZiAoZGV0YWlscy5waXZvdE1vZGUgJiYgZ3JvdXBOb2RlLmxlYWZHcm91cCkge1xuICAgICAgICAgICAgZ3JvdXBOb2RlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1c2UgY2FsbGJhY2sgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHVzZXJDYWxsYmFjayA9IGRldGFpbHMuaXNHcm91cE9wZW5CeURlZmF1bHQ7XG4gICAgICAgIGlmICh1c2VyQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogV2l0aG91dEdyaWRDb21tb248SXNHcm91cE9wZW5CeURlZmF1bHRQYXJhbXM+ID0ge1xuICAgICAgICAgICAgICAgIHJvd05vZGU6IGdyb3VwTm9kZSxcbiAgICAgICAgICAgICAgICBmaWVsZDogZ3JvdXBOb2RlLmZpZWxkISxcbiAgICAgICAgICAgICAgICBrZXk6IGdyb3VwTm9kZS5rZXkhLFxuICAgICAgICAgICAgICAgIGxldmVsOiBncm91cE5vZGUubGV2ZWwsXG4gICAgICAgICAgICAgICAgcm93R3JvdXBDb2x1bW46IGdyb3VwTm9kZS5yb3dHcm91cENvbHVtbiFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBncm91cE5vZGUuZXhwYW5kZWQgPSB1c2VyQ2FsbGJhY2socGFyYW1zKSA9PSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXNlIGV4cGFuZEJ5RGVmYXVsdCBpZiBleGlzdHNcbiAgICAgICAgY29uc3QgeyBleHBhbmRCeURlZmF1bHQgfSA9IGRldGFpbHM7XG4gICAgICAgIGlmIChkZXRhaWxzLmV4cGFuZEJ5RGVmYXVsdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGdyb3VwTm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvdGhlcndpc2VcbiAgICAgICAgZ3JvdXBOb2RlLmV4cGFuZGVkID0gZ3JvdXBOb2RlLmxldmVsIDwgZXhwYW5kQnlEZWZhdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBJbmZvKHJvd05vZGU6IFJvd05vZGUsIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscyk6IEdyb3VwSW5mb1tdIHtcbiAgICAgICAgaWYgKGRldGFpbHMudXNpbmdUcmVlRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JvdXBJbmZvRnJvbUNhbGxiYWNrKHJvd05vZGUsIGRldGFpbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdyb3VwSW5mb0Zyb21Hcm91cENvbHVtbnMocm93Tm9kZSwgZGV0YWlscyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcm91cEluZm9Gcm9tQ2FsbGJhY2socm93Tm9kZTogUm93Tm9kZSwgZGV0YWlsczogR3JvdXBpbmdEZXRhaWxzKTogR3JvdXBJbmZvW10geyAgICAgICAgXG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdIHwgbnVsbCA9IGRldGFpbHMuZ2V0RGF0YVBhdGggPyBkZXRhaWxzLmdldERhdGFQYXRoKHJvd05vZGUuZGF0YSkgOiBudWxsO1xuXG4gICAgICAgIGlmIChrZXlzID09PSBudWxsIHx8IGtleXMgPT09IHVuZGVmaW5lZCB8fCBrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgXy53YXJuT25jZShgZ2V0RGF0YVBhdGgoKSBzaG91bGQgbm90IHJldHVybiBhbiBlbXB0eSBwYXRoIGZvciBkYXRhICR7cm93Tm9kZS5kYXRhfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwSW5mb01hcHBlciA9IChrZXk6IHN0cmluZyB8IG51bGwpID0+ICh7IGtleSwgZmllbGQ6IG51bGwsIHJvd0dyb3VwQ29sdW1uOiBudWxsIH0pIGFzIEdyb3VwSW5mbztcbiAgICAgICAgcmV0dXJuIGtleXMgPyBrZXlzLm1hcChncm91cEluZm9NYXBwZXIpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcm91cEluZm9Gcm9tR3JvdXBDb2x1bW5zKHJvd05vZGU6IFJvd05vZGUsIGRldGFpbHM6IEdyb3VwaW5nRGV0YWlscykge1xuICAgICAgICBjb25zdCByZXM6IEdyb3VwSW5mb1tdID0gW107XG4gICAgICAgIGRldGFpbHMuZ3JvdXBlZENvbHMuZm9yRWFjaChncm91cENvbCA9PiB7XG4gICAgICAgICAgICBsZXQga2V5OiBzdHJpbmcgPSB0aGlzLnZhbHVlU2VydmljZS5nZXRLZXlGb3JOb2RlKGdyb3VwQ29sLCByb3dOb2RlKTtcbiAgICAgICAgICAgIGxldCBrZXlFeGlzdHMgPSBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB1bmRlZmluZWQgJiYga2V5ICE9PSAnJztcblxuICAgICAgICAgICAgLy8gdW5iYWxhbmNlZCB0cmVlIGFuZCBwaXZvdCBtb2RlIGRvbid0IHdvcmsgdG9nZXRoZXIgLSBub3QgYmVjYXVzZSBvZiB0aGUgZ3JpZCwgaXQgZG9lc24ndCBtYWtlXG4gICAgICAgICAgICAvLyBtYXRoZW1hdGljYWwgc2Vuc2UgYXMgeW91IGFyZSBidWlsZGluZyB1cCBhIGN1YmUuIHNvIGlmIHBpdm90IG1vZGUsIHdlIHB1dCBpbiBhIGJsYW5rIGtleSB3aGVyZSBtaXNzaW5nLlxuICAgICAgICAgICAgLy8gdGhpcyBrZWVwcyB0aGUgdHJlZSBiYWxhbmNlZCBhbmQgaGVuY2UgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgZ3JvdXAuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVHcm91cEZvckVtcHR5ID0gZGV0YWlscy5waXZvdE1vZGUgfHwgIWRldGFpbHMuZ3JvdXBBbGxvd1VuYmFsYW5jZWQ7XG4gICAgICAgICAgICBpZiAoY3JlYXRlR3JvdXBGb3JFbXB0eSAmJiAha2V5RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgICAgICAgICAga2V5RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtleUV4aXN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogZ3JvdXBDb2wuZ2V0Q29sRGVmKCkuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHJvd0dyb3VwQ29sdW1uOiBncm91cENvbCxcbiAgICAgICAgICAgICAgICAgICAgbGVhZk5vZGU6IHJvd05vZGUsXG4gICAgICAgICAgICAgICAgfSBhcyBHcm91cEluZm87XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn0iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ModuleNames } from "@ag-grid-community/core";
|
|
2
2
|
import { GroupStage } from "./group-stage";
|
|
3
3
|
export var RowGroupingModule = {
|
|
4
|
-
version: '31.
|
|
4
|
+
version: '31.3.2',
|
|
5
5
|
moduleName: ModuleNames.RowGroupingModule,
|
|
6
6
|
beans: [GroupStage]
|
|
7
7
|
};
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWdyb3VwaW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL2dyaWQvcm93LWdyb3VwaW5nL3Jvdy1ncm91cGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxDQUFDLElBQUksaUJBQWlCLEdBQUc7SUFDN0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsVUFBVSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7SUFDekMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVOYW1lcyB9IGZyb20gXCJAYWctZ3JpZC1jb21tdW5pdHkvY29yZVwiO1xuaW1wb3J0IHsgR3JvdXBTdGFnZSB9IGZyb20gXCIuL2dyb3VwLXN0YWdlXCI7XG5cbmV4cG9ydCB2YXIgUm93R3JvdXBpbmdNb2R1bGUgPSB7XG4gIHZlcnNpb246ICczMS4zLjInLFxuICBtb2R1bGVOYW1lOiBNb2R1bGVOYW1lcy5Sb3dHcm91cGluZ01vZHVsZSxcbiAgYmVhbnM6IFtHcm91cFN0YWdlXVxufTtcbiJdfQ==
|
|
@@ -271,7 +271,7 @@ export class ObjectLinksComponent {
|
|
|
271
271
|
.subscribe(response => this.searchIcon = response.replace('<svg', '<svg focusable="false" class="search-icon"'));
|
|
272
272
|
}
|
|
273
273
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ObjectLinksComponent, deps: [{ token: i1.Router }, { token: i2.ReferenceService }, { token: i3.BackendService }, { token: i3.AppCacheService }, { token: i3.TranslateService }, { token: i4.GridService }, { token: i3.SystemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
274
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ObjectLinksComponent, selector: "eo-object-links", inputs: { dmsObject: "dmsObject" }, host: { listeners: { "click": "onClick($event)" } }, viewQueries: [{ propertyName: "gridIn", first: true, predicate: ["gridIn"], descendants: true }, { propertyName: "gridOut", first: true, predicate: ["gridOut"], descendants: true }], ngImport: i0, template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"button primary\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\" title=\"{{'eo.references.open.resultlist' | translate}}\">\n <span>{{'eo.references.open.resultlist' | translate}}</span>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n <div class=\"notfound\" *ngIf=\"(!inReferences?.length)\">{{'eo.references.object.notfound' | translate}}</div>\n\n <div class=\"grid-wrapper\" *ngIf=\"inReferences?.length\">\n <ag-grid-angular #gridIn [modules]=\"modules\" [gridOptions]=\"gridOptions\" class=\"ag-result\"></ag-grid-angular>\n </div>\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n <div class=\"notfound\" *ngIf=\"(!outReferences?.length)\">{{'eo.references.object.notfound' | translate}}</div>\n\n <div class=\"grid-wrapper\" *ngIf=\"outReferences?.length\">\n <ag-grid-angular #gridOut [modules]=\"modules\" [gridOptions]=\"gridOptions2\" class=\"ag-result\"></ag-grid-angular>\n </div>\n </div>\n\n </div>\n </ng-template>\n</div>", styles: [":host ::ng-deep ag-grid-angular{background:transparent}:host ::ng-deep .ag-pinned-left-cols-viewport{display:none!important}:host ::ng-deep ag-grid-angular.ag-theme-balham .ag-column-drop-horizontal:not(.ag-hidden){display:none!important}:host ::ng-deep .ag-center-cols-container{width:100%!important}:host ::ng-deep .ag-row{background:transparent!important}:host ::ng-deep ag-grid-angular.ag-theme-balham .ag-header{border:none}:host ::ng-deep .ag-row-group>.ag-cell-wrapper{height:100%;display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;background:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid var(--list-item-border-color)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon{display:inline-block;height:12px;width:12px;color:var(--color-black)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon-contracted{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==) center/12px 12px no-repeat}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon-expanded{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=) center/12px 12px no-repeat}:host ::ng-deep .ag-row-group>.ag-cell-wrapper>span.ag-group-value>span{display:flex;flex-flow:row nowrap;align-items:center}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-group-child-count{position:absolute;right:48px}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link{opacity:0;height:24px;width:24px;position:absolute;right:var(--app-pane-padding);background:var(--color-accent);border-radius:2px;transition:all .2s ease-in-out;margin-left:var(--app-pane-padding)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link svg{fill:var(--color-white)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link .search-icon{width:20px;margin-left:2px}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link:hover{background:var(--color-accent)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper:hover .search-link{opacity:1}:host ::ng-deep .ag-row-group>.ag-cell-wrapper span.ag-group-value{width:calc(100% - 110px);margin:0 calc(var(--app-pane-padding) * 2)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper span.ag-group-value img{height:24px;opacity:.5;margin-right:calc(var(--app-pane-padding) / 2)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-group-child-count{color:var(--text-color-caption);font-size:var(--font-caption)}:host ::ng-deep .ag-cell{width:100%!important;border-bottom:1px solid var(--list-item-border-color);background:var(--color-white)}:host ::ng-deep .content{pointer-events:none;overflow:hidden}:host ::ng-deep .content div{pointer-events:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host ::ng-deep .content .title{font-weight:var(--font-weight-bold)}:host ::ng-deep .content .description{opacity:.6;font-size:var(--font-caption)}:host ::ng-deep .ref-list-item{padding:0 var(--app-pane-padding) 0 calc(var(--app-pane-padding) * 4.3);cursor:pointer;height:100%;display:flex;align-items:center}:host ::ng-deep .ref-list-item a{display:flex;align-items:flex-start;text-decoration:none;color:var(--text-color-body);width:100%}:host ::ng-deep .ref-list-item .content{padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding)}:host ::ng-deep .ref-list-item:hover{background:var(--color-accent)}:host ::ng-deep .ref-list-item:hover .content{color:var(--color-white)}.eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
|
|
274
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ObjectLinksComponent, selector: "eo-object-links", inputs: { dmsObject: "dmsObject" }, host: { listeners: { "click": "onClick($event)" } }, viewQueries: [{ propertyName: "gridIn", first: true, predicate: ["gridIn"], descendants: true }, { propertyName: "gridOut", first: true, predicate: ["gridOut"], descendants: true }], ngImport: i0, template: "<div class=\"eo-references\">\n <div class=\"object-not-found\" *ngIf=\"!inReferences?.length && !outReferences?.length; else refContainer\">\n <div>{{'eo.references.object.notfound' | translate}}</div>\n </div>\n\n <ng-template #refContainer>\n <div class=\"form-buttons\">\n <div class=\"gridlabels\">\n <div class=\"gridlabel\" [ngClass]=\"{'active': showInReferences}\" (click)=\"switchListVisibilityTo('in')\"\n title=\"{{'eo.references.to.label' | translate}}\">\n <span>{{'eo.references.to.label' | translate}}</span>\n </div>\n <div class=\"gridlabel\" [ngClass]=\"{'active': showOutReferences}\" (click)=\"switchListVisibilityTo('out')\"\n title=\"{{'eo.references.from.label' | translate}}\">\n <span>{{'eo.references.from.label' | translate}}</span>\n </div>\n </div>\n <a class=\"button primary\" [routerLink]=\"'/result'\" [queryParams]=\"superQueryParams\" title=\"{{'eo.references.open.resultlist' | translate}}\">\n <span>{{'eo.references.open.resultlist' | translate}}</span>\n </a>\n </div>\n\n <div class=\"eo-references-lists\">\n\n <!-- list of inReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showInReferences}\">\n <div class=\"notfound\" *ngIf=\"(!inReferences?.length)\">{{'eo.references.object.notfound' | translate}}</div>\n\n <div class=\"grid-wrapper\" *ngIf=\"inReferences?.length\">\n <ag-grid-angular #gridIn [modules]=\"modules\" [gridOptions]=\"gridOptions\" class=\"ag-result\"></ag-grid-angular>\n </div>\n </div>\n\n <!-- list of outReferences -->\n <div class=\"resultlist-container\" [ngClass]=\"{'hidden': !showOutReferences}\">\n <div class=\"notfound\" *ngIf=\"(!outReferences?.length)\">{{'eo.references.object.notfound' | translate}}</div>\n\n <div class=\"grid-wrapper\" *ngIf=\"outReferences?.length\">\n <ag-grid-angular #gridOut [modules]=\"modules\" [gridOptions]=\"gridOptions2\" class=\"ag-result\"></ag-grid-angular>\n </div>\n </div>\n\n </div>\n </ng-template>\n</div>", styles: [":host ::ng-deep ag-grid-angular{background:transparent}:host ::ng-deep .ag-pinned-left-cols-viewport{display:none!important}:host ::ng-deep ag-grid-angular.ag-theme-balham .ag-column-drop-horizontal:not(.ag-hidden){display:none!important}:host ::ng-deep .ag-center-cols-container{width:100%!important}:host ::ng-deep .ag-row{background:transparent!important}:host ::ng-deep ag-grid-angular.ag-theme-balham .ag-header{border:none}:host ::ng-deep .ag-row-group>.ag-cell-wrapper{height:100%;display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;background:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);border-bottom:1px solid var(--list-item-border-color)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon{display:inline-block;height:12px;width:12px;color:var(--color-black)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon-contracted{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==) center/12px 12px no-repeat}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-icon-expanded{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=) center/12px 12px no-repeat}:host ::ng-deep .ag-row-group>.ag-cell-wrapper>span.ag-group-value>span{display:flex;flex-flow:row nowrap;align-items:center}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-group-child-count{position:absolute;right:48px}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link{opacity:0;height:24px;width:24px;position:absolute;right:var(--app-pane-padding);background:var(--color-accent);border-radius:2px;transition:all .2s ease-in-out;margin-left:var(--app-pane-padding)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link svg{fill:var(--color-white)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link .search-icon{width:20px;margin-left:2px}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .search-link:hover{background:var(--color-accent)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper:hover .search-link{opacity:1}:host ::ng-deep .ag-row-group>.ag-cell-wrapper span.ag-group-value{width:calc(100% - 110px);margin:0 calc(var(--app-pane-padding) * 2)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper span.ag-group-value img{height:24px;opacity:.5;margin-right:calc(var(--app-pane-padding) / 2)}:host ::ng-deep .ag-row-group>.ag-cell-wrapper .ag-group-child-count{color:var(--text-color-caption);font-size:var(--font-caption)}:host ::ng-deep .ag-cell{width:100%!important;border-bottom:1px solid var(--list-item-border-color);background:var(--color-white)}:host ::ng-deep .content{pointer-events:none;overflow:hidden}:host ::ng-deep .content div{pointer-events:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host ::ng-deep .content .title{font-weight:var(--font-weight-bold)}:host ::ng-deep .content .description{opacity:.6;font-size:var(--font-caption)}:host ::ng-deep .ref-list-item{padding:0 var(--app-pane-padding) 0 calc(var(--app-pane-padding) * 4.3);cursor:pointer;height:100%;display:flex;align-items:center}:host ::ng-deep .ref-list-item a{display:flex;align-items:flex-start;text-decoration:none;color:var(--text-color-body);width:100%}:host ::ng-deep .ref-list-item .content{padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding)}:host ::ng-deep .ref-list-item:hover{background:var(--color-accent)}:host ::ng-deep .ref-list-item:hover .content{color:var(--color-white)}.eo-references{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding);height:calc(100% - var(--app-pane-padding) * 2);box-sizing:border-box;display:flex;flex-flow:column}.eo-references .hidden{display:none!important}.eo-references .object-not-found{height:100%;display:flex;justify-content:center;align-items:center}.eo-references .object-not-found div{color:var(--text-color-caption)}.eo-references .form-buttons{width:100%;padding:calc(var(--app-pane-padding) / 2);height:44px;display:flex;justify-content:space-between;background:var(--color-white);box-sizing:border-box}.eo-references .form-buttons .gridlabels{display:flex;width:60%}.eo-references .form-buttons .gridlabel{border:1px solid var(--list-item-border-color);border-radius:4px;padding:0 calc(var(--app-pane-padding) / 2);display:flex;align-items:center;color:var(--text-color-caption);cursor:pointer;margin-right:calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;overflow:hidden}.eo-references .form-buttons .gridlabel span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .form-buttons .gridlabel:hover{color:var(--text-color-body);border-color:#0003}.eo-references .form-buttons .active{color:var(--text-color-body);border-color:#0003;background-color:var(--panel-background-grey)}.eo-references .form-buttons a.button{display:flex;align-items:center;overflow:hidden}.eo-references .form-buttons a.button span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eo-references .eo-references-lists{flex:1;overflow:hidden;border-top:4px solid rgba(var(--color-black-rgb),.2)}.eo-references .eo-references-lists .resultlist-container{display:flex;flex-flow:column;height:100%;width:100%}.eo-references .eo-references-lists .resultlist-container .notfound{color:var(--text-color-caption);display:flex;align-items:center;justify-content:center;height:100%}.eo-references .eo-references-lists .ag-result{position:absolute;inset:0}.eo-references .eo-references-lists .grid-wrapper{position:relative;flex:1}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
|
|
275
275
|
}
|
|
276
276
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ObjectLinksComponent, decorators: [{
|
|
277
277
|
type: Component,
|