verben-workflow-ui 0.5.67 → 0.5.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -3
- package/esm2022/src/lib/components/workflow-designer/stage-node/stage-node.component.mjs +3 -3
- package/esm2022/src/lib/components/workflows/workflows.facade.mjs +6 -6
- package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +4 -4
- package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
- package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs +5 -5
- package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs.map +1 -1
- package/package.json +34 -34
|
@@ -190,11 +190,11 @@ export class StageNodeComponent {
|
|
|
190
190
|
console.log('Stage properties updated:', stageData);
|
|
191
191
|
}
|
|
192
192
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
193
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", isSubflow: "isSubflow", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled", showShieldDialog: "showShieldDialog", showEscalationDialog: "showEscalationDialog", showFormDialog: "showFormDialog" }, ngImport: i0, template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"
|
|
193
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", isSubflow: "isSubflow", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled", showShieldDialog: "showShieldDialog", showEscalationDialog: "showEscalationDialog", showFormDialog: "showFormDialog" }, ngImport: i0, template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"#000000\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
194
194
|
}
|
|
195
195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, decorators: [{
|
|
196
196
|
type: Component,
|
|
197
|
-
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"
|
|
197
|
+
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"#000000\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"] }]
|
|
198
198
|
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }], propDecorators: { node: [{
|
|
199
199
|
type: Input
|
|
200
200
|
}], isStartNode: [{
|
|
@@ -214,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
214
214
|
}], showFormDialog: [{
|
|
215
215
|
type: Output
|
|
216
216
|
}] } });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBVXhGLE1BQU0sT0FBTyxrQkFBa0I7SUErQ25CO0lBQ0E7SUEvQ0QsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRWhELElBQUksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFO1lBQ2pD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QUFDO0lBQ3RELENBQUM7d0dBM09VLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhZQ2hCL0IsMHRLQTZGQTs7NEZEN0VhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSx1QkFBdUI7NEhBS3hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFjSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUlHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYWxhdGlvblR5cGUsIEZvcm0sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6Z1tsaWItc3RhZ2Utbm9kZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWdlLW5vZGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFnZU5vZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBub2RlITogTm9kZTtcbiAgQElucHV0KCkgaXNTdGFydE5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTdWJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzU3ViZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgdGhpcy5ub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCAnU3ViZmxvdyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUuc3RhZ2VEYXRhPy5OYW1lIHx8ICdTdGFnZSc7XG4gIH1cblxuICBnZXQgdHJ1bmNhdGVkRGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZS5sZW5ndGggPiAxMlxuICAgICAgPyB0aGlzLmRpc3BsYXlOYW1lLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJ1xuICAgICAgOiB0aGlzLmRpc3BsYXlOYW1lO1xuICB9XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcGFyYWxsZWxFeGVjdXRpb25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc291cmNlTm9kZUlkOiBzdHJpbmc7XG4gICAgaXNQYXJhbGxlbDogYm9vbGVhbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNob3dTaGllbGREaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNob3dFc2NhbGF0aW9uRGlhbG9nID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2hvd0Zvcm1EaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gUHJvcGVydGllcyBmb3IgaWNvbiBjbGljayBldmVudHNcbiAgc2hvd0Zvcm1Qb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93VGltZXJQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0aW9uUG9wdXBMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb2RlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3Jtc0xpc3Q6IEZvcm1bXSA9IFtdO1xuICBpc0xvYWRpbmdGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIGZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3RhZ2Ugbm9kZSBpbml0aWFsaXplZCB3aXRoOicsIHRoaXMubm9kZSk7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgdGhpcyBzdGFnZSBoYXMgbXVsdGlwbGUgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3RhZ2VzXG4gIHVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSB0aGlzLm5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIHRoaXMubm9kZS5oYXNQYXJhbGxlbFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMuZXZlcnkoXG4gICAgICAobmQpID0+IG5kPy5ub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1BhcmFsbGVsRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPT09IHRydWU7XG4gIH1cblxuICBzZWxlY3RGb3JtKGZvcm06IEZvcm0gfCBudWxsKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZDtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd0Zvcm1Qb3B1cCA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgIHN0YWdlRGF0YTogdGhpcy5ub2RlLnN0YWdlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUZvcm1Qb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gdGhpcy5mb3JtUG9wdXBYID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAvLyB0aGlzLmZvcm1Qb3B1cFkgPSByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm1EaWFsb2cuZW1pdChldmVudCk7XG5cbiAgICAvLyAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIC8vIGlmICghdGhpcy5zaG93Rm9ybVBvcHVwKSB7XG4gICAgLy8gICB0aGlzLmlzTG9hZGluZ0Zvcm1zID0gdHJ1ZTtcbiAgICAvLyAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAvLyAgICAgLmdldEZvcm1zKClcbiAgICAvLyAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5mb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLnNob3dGb3JtUG9wdXAgPSAhdGhpcy5zaG93Rm9ybVBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlU2hpZWxkUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NoaWVsZCBpY29uIGNsaWNrZWQgZm9yIG5vZGU6JywgdGhpcy5ub2RlLmlkKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWdlRGF0YSwgdGhpcy5ub2RlKTtcbiAgICB0aGlzLnNob3dTaGllbGREaWFsb2cuZW1pdCh0aGlzLm5vZGUuaWQpO1xuICB9XG5cbiAgdG9nZ2xlVGltZXJQb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5zaG93VGltZXJQb3B1cCA9ICF0aGlzLnNob3dUaW1lclBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uUG9wdXAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQ7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nLmVtaXQoe1xuICAgICAgICBzdGFnZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlLk9uRW50cnksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0O1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZy5lbWl0KHtcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZS5PbkV4aXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHBhcmFsbGVsIGV4ZWN1dGlvbiBzdGF0ZVxuICAgIGNvbnN0IG5ld1BhcmFsbGVsU3RhdGUgPSAhdGhpcy5pc1BhcmFsbGVsRXhlY3V0aW9uO1xuXG4gICAgLy8gVXBkYXRlIHRoaXMgbm9kZSdzIHN0YWdlIGRhdGFcbiAgICBpZiAoIXRoaXMubm9kZS5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmhhc1BhcmFsbGVsU3RhZ2VzID0gbmV3UGFyYWxsZWxTdGF0ZTtcblxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubWFwKChzdywgaSkgPT4ge1xuICAgICAgc3cubm9kZXMgPSBzdz8ubm9kZXM/Lm1hcCgoc3dOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGNvbm5lY3RlZFN0YWdlTm9kZXNcbiAgICAgICAgICAubWFwKChjb25uZWN0ZWQpID0+IGNvbm5lY3RlZD8ubm9kZSlcbiAgICAgICAgICAuZmluZCgobmRlKSA9PiBuZGU/LmlkID09PSBzd05vZGUuaWQpO1xuICAgICAgICBpZiAoZm91bmROb2RlPy5zdGFnZURhdGEpIHtcbiAgICAgICAgICBmb3VuZE5vZGUuc3RhZ2VEYXRhLklzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzd05vZGU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN3O1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7bmV3UGFyYWxsZWxTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgIH0gZm9yIG5vZGU6YCxcbiAgICAgIHRoaXMubm9kZS5pZFxuICAgICk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGNvbm5lY3Rpb25zIGNoYW5nZVxuICByZWZyZXNoU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPikge1xuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTaGFwZTogUmVjdGFuZ2xlIGZvciBzdGFnZSwgSGV4YWdvbiBmb3Igc3ViZmxvdyAtLT5cbiAgQGlmIChpc1N1YmZsb3cpIHtcbiAgPHN2ZzpwYXRoIFthdHRyLmRdPVwiXG4gICAgICAnTSAxICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgTCAnICtcbiAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICcgMSBMICcgK1xuICAgICAgKG5vZGUud2lkdGggLSAxKSArXG4gICAgICAnICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgViAnICtcbiAgICAgIChub2RlLmhlaWdodCAqIDMpIC8gNCArXG4gICAgICAnIEwgJyArXG4gICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAnICcgK1xuICAgICAgKG5vZGUuaGVpZ2h0IC0gMSkgK1xuICAgICAgJyBMIDEgJyArXG4gICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgJyBaJ1xuICAgIFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogYWxsXCI+PC9zdmc6cGF0aD5cbiAgfSBAZWxzZSB7XG4gIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aFwiIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBhbGxcIj48L3N2ZzpyZWN0PlxuICB9XG5cbiAgPCEtLSBUb3AtbGVmdCBpY29uOiBTdGFnZSBmb3JtIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZUZvcm1Qb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDYpXCI+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0IHg9XCItMlwiIHk9XCItMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgW2F0dHIuZmlsbF09XCJub2RlLnN0YWdlRGF0YT8uZm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBUb3AtcmlnaHQgaWNvbjogU2hpZWxkIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIiBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyAobm9kZS53aWR0aCAtIDMwKSArICcsIDYpJ1wiPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdCB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG5cbiAgICA8c3ZnOnBhdGggZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Db2RlKSB7XG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ2xlZnQnLCAkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBSaWdodC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgMzgpJ1wiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG4gIH1cblxuICA8IS0tIEJvdHRvbS1sZWZ0IGljb246IERvdWJsZSBzbGFzaCB0ZXh0IC0tPlxuICA8c3ZnOmcgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiIChjbGljayk9XCJ0b2dnbGVDb2RlUG9wdXAoJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoNiwgJyArIChub2RlLmhlaWdodCAtIDE2KSArICcpJ1wiPlxuICAgIDxzdmc6dGV4dCBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIiBmb250LXdlaWdodD1cIjUwMFwiIGZvbnQtc2l6ZT1cIjE2cHhcIlxuICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIiBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCI+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlVGltZXJQb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCI+XG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTExLjUgM0MxNC4wMTk2IDMgMTYuNDM1OSA0LjAwMDg5IDE4LjIxNzUgNS43ODI0OUMxOS45OTkxIDcuNTY0MDggMjEgOS45ODA0NCAyMSAxMi41QzIxIDE1LjAxOTYgMTkuOTk5MSAxNy40MzU5IDE4LjIxNzUgMTkuMjE3NUMxNi40MzU5IDIwLjk5OTEgMTQuMDE5NiAyMiAxMS41IDIyQzguOTgwNDQgMjIgNi41NjQwOCAyMC45OTkxIDQuNzgyNDkgMTkuMjE3NUMzLjAwMDg5IDE3LjQzNTkgMiAxNS4wMTk2IDIgMTIuNUMyIDkuOTgwNDQgMy4wMDA4OSA3LjU2NDA4IDQuNzgyNDkgNS43ODI0OUM2LjU2NDA4IDQuMDAwODkgOC45ODA0NCAzIDExLjUgM1pNMTEuNSA0QzkuMjQ1NjYgNCA3LjA4MzY1IDQuODk1NTMgNS40ODk1OSA2LjQ4OTU5QzMuODk1NTMgOC4wODM2NSAzIDEwLjI0NTcgMyAxMi41QzMgMTQuNzU0MyAzLjg5NTUzIDE2LjkxNjMgNS40ODk1OSAxOC41MTA0QzcuMDgzNjUgMjAuMTA0NSA5LjI0NTY2IDIxIDExLjUgMjFDMTIuNjE2MiAyMSAxMy43MjE1IDIwLjc4MDEgMTQuNzUyOCAyMC4zNTNDMTUuNzg0MSAxOS45MjU4IDE2LjcyMTEgMTkuMjk5NyAxNy41MTA0IDE4LjUxMDRDMTguMjk5NyAxNy43MjExIDE4LjkyNTggMTYuNzg0MSAxOS4zNTMgMTUuNzUyOEMxOS43ODAxIDE0LjcyMTUgMjAgMTMuNjE2MiAyMCAxMi41QzIwIDEwLjI0NTcgMTkuMTA0NSA4LjA4MzY1IDE3LjUxMDQgNi40ODk1OUMxNS45MTYzIDQuODk1NTMgMTMuNzU0MyA0IDExLjUgNFpNMTEgN0gxMlYxMi40MkwxNi43IDE1LjEzTDE2LjIgMTZMMTEgMTNWN1pcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dCBbYXR0ci54XT1cIm5vZGUud2lkdGggLyAyXCIgW2F0dHIueV09XCJub2RlLmhlaWdodCAvIDJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGRvbWluYW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICBbYXR0ci5mb250LXNpemVdPVwiaXNTdWJmbG93ID8gJzEwJyA6ICcxNCdcIiBmaWxsPVwiIzAwMDAwMFwiPlxuICAgIHt7IHRydW5jYXRlZERpc3BsYXlOYW1lIH19XG4gIDwvc3ZnOnRleHQ+XG48L3N2ZzpnPlxuXG48IS0tIDxsaWItc3RhZ2UtZGlhbG9nXG4gIFt2aXNpYmxlXT1cInNob3dTaGllbGRQb3B1cCgpXCJcbiAgW3N0YWdlRGF0YV09XCJub2RlLnN0YWdlRGF0YSB8fCB7fVwiXG4gIChjbG9zZWQpPVwic2hvd1NoaWVsZFBvcHVwLnNldChmYWxzZSlcIlxuICAoc2F2ZWQpPVwib25TdGFnZVByb3BlcnRpZXNTYXZlZCgkZXZlbnQpXCJcbj48L2xpYi1zdGFnZS1kaWFsb2c+IC0tPlxuIl19
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBVXhGLE1BQU0sT0FBTyxrQkFBa0I7SUErQ25CO0lBQ0E7SUEvQ0QsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRWhELElBQUksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ1Msc0JBQXNCLEdBQUcsSUFBSSxZQUFZLEVBRy9DLENBQUM7SUFDSyx3QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFHakQsQ0FBQztJQUNLLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDOUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBRzdDLENBQUM7SUFDSyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztJQUUxRCxtQ0FBbUM7SUFDbkMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUMvQixjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLG1CQUFtQixHQUFZLEtBQUssQ0FBQztJQUNyQyxvQkFBb0IsR0FBWSxLQUFLLENBQUM7SUFDdEMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUUvQixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBQ3ZCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBRXZCLFlBQ1UsS0FBNEIsRUFDNUIsV0FBZ0M7UUFEaEMsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO0lBQ3RDLENBQUM7SUFFTCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtGQUFrRjtJQUNsRix5QkFBeUI7UUFDdkIsa0VBQWtFO1FBQ2xFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUN2RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDN0MsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQjthQUM1QyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN6RCxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQ3JELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSwwQkFBMEI7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixLQUFLLElBQUksQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQztJQUM5QyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWlCO1FBQzFCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLHVCQUF1QjtZQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWtCO1FBQ2hDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXhCLDRDQUE0QztZQUM1QyxrRUFBa0U7WUFDbEUsZ0RBQWdEO1lBQ2hELCtDQUErQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsNENBQTRDO1FBQzVDLDZCQUE2QjtRQUM3QixnQ0FBZ0M7UUFDaEMscUJBQXFCO1FBQ3JCLGtCQUFrQjtRQUNsQiw0QkFBNEI7UUFDNUIsMENBQTBDO1FBQzFDLHFDQUFxQztRQUNyQyxTQUFTO1FBQ1QsMEJBQTBCO1FBQzFCLHNEQUFzRDtRQUN0RCxxQ0FBcUM7UUFDckMsVUFBVTtRQUNWLElBQUk7UUFFSiw0Q0FBNEM7SUFDOUMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWtCO1FBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWtCO1FBQ2pDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBc0IsRUFBRSxLQUFrQjtRQUMxRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxjQUFjLENBQUMsT0FBTzthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyQixJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU07YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBa0I7UUFDaEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRW5ELGdDQUFnQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ3ZELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM3QyxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3pELE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4RCxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sU0FBUyxHQUFHLG1CQUFtQjtxQkFDbEMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO3FCQUNuQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDekIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3BELENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FDVCxzQkFBc0IsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFDckQsWUFBWSxFQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsMkRBQTJEO0lBQzNELFlBQVk7UUFDVixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBaUM7UUFDdEQsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7d0dBM09VLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhZQ2hCL0IsOHBLQTZGQTs7NEZEN0VhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSx1QkFBdUI7NEhBS3hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFjSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUlHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYWxhdGlvblR5cGUsIEZvcm0sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6Z1tsaWItc3RhZ2Utbm9kZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWdlLW5vZGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFnZU5vZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBub2RlITogTm9kZTtcbiAgQElucHV0KCkgaXNTdGFydE5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTdWJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzU3ViZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgdGhpcy5ub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCAnU3ViZmxvdyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUuc3RhZ2VEYXRhPy5OYW1lIHx8ICdTdGFnZSc7XG4gIH1cblxuICBnZXQgdHJ1bmNhdGVkRGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZS5sZW5ndGggPiAxMlxuICAgICAgPyB0aGlzLmRpc3BsYXlOYW1lLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJ1xuICAgICAgOiB0aGlzLmRpc3BsYXlOYW1lO1xuICB9XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcGFyYWxsZWxFeGVjdXRpb25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc291cmNlTm9kZUlkOiBzdHJpbmc7XG4gICAgaXNQYXJhbGxlbDogYm9vbGVhbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNob3dTaGllbGREaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNob3dFc2NhbGF0aW9uRGlhbG9nID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2hvd0Zvcm1EaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gUHJvcGVydGllcyBmb3IgaWNvbiBjbGljayBldmVudHNcbiAgc2hvd0Zvcm1Qb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93VGltZXJQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0aW9uUG9wdXBMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb2RlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3Jtc0xpc3Q6IEZvcm1bXSA9IFtdO1xuICBpc0xvYWRpbmdGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIGZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3RhZ2Ugbm9kZSBpbml0aWFsaXplZCB3aXRoOicsIHRoaXMubm9kZSk7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgdGhpcyBzdGFnZSBoYXMgbXVsdGlwbGUgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3RhZ2VzXG4gIHVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSB0aGlzLm5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIHRoaXMubm9kZS5oYXNQYXJhbGxlbFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMuZXZlcnkoXG4gICAgICAobmQpID0+IG5kPy5ub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1BhcmFsbGVsRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPT09IHRydWU7XG4gIH1cblxuICBzZWxlY3RGb3JtKGZvcm06IEZvcm0gfCBudWxsKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZDtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd0Zvcm1Qb3B1cCA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgIHN0YWdlRGF0YTogdGhpcy5ub2RlLnN0YWdlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUZvcm1Qb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gdGhpcy5mb3JtUG9wdXBYID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAvLyB0aGlzLmZvcm1Qb3B1cFkgPSByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm1EaWFsb2cuZW1pdChldmVudCk7XG5cbiAgICAvLyAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIC8vIGlmICghdGhpcy5zaG93Rm9ybVBvcHVwKSB7XG4gICAgLy8gICB0aGlzLmlzTG9hZGluZ0Zvcm1zID0gdHJ1ZTtcbiAgICAvLyAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAvLyAgICAgLmdldEZvcm1zKClcbiAgICAvLyAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5mb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLnNob3dGb3JtUG9wdXAgPSAhdGhpcy5zaG93Rm9ybVBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlU2hpZWxkUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NoaWVsZCBpY29uIGNsaWNrZWQgZm9yIG5vZGU6JywgdGhpcy5ub2RlLmlkKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWdlRGF0YSwgdGhpcy5ub2RlKTtcbiAgICB0aGlzLnNob3dTaGllbGREaWFsb2cuZW1pdCh0aGlzLm5vZGUuaWQpO1xuICB9XG5cbiAgdG9nZ2xlVGltZXJQb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5zaG93VGltZXJQb3B1cCA9ICF0aGlzLnNob3dUaW1lclBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uUG9wdXAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQ7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nLmVtaXQoe1xuICAgICAgICBzdGFnZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlLk9uRW50cnksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0O1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZy5lbWl0KHtcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZS5PbkV4aXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHBhcmFsbGVsIGV4ZWN1dGlvbiBzdGF0ZVxuICAgIGNvbnN0IG5ld1BhcmFsbGVsU3RhdGUgPSAhdGhpcy5pc1BhcmFsbGVsRXhlY3V0aW9uO1xuXG4gICAgLy8gVXBkYXRlIHRoaXMgbm9kZSdzIHN0YWdlIGRhdGFcbiAgICBpZiAoIXRoaXMubm9kZS5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmhhc1BhcmFsbGVsU3RhZ2VzID0gbmV3UGFyYWxsZWxTdGF0ZTtcblxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubWFwKChzdywgaSkgPT4ge1xuICAgICAgc3cubm9kZXMgPSBzdz8ubm9kZXM/Lm1hcCgoc3dOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGNvbm5lY3RlZFN0YWdlTm9kZXNcbiAgICAgICAgICAubWFwKChjb25uZWN0ZWQpID0+IGNvbm5lY3RlZD8ubm9kZSlcbiAgICAgICAgICAuZmluZCgobmRlKSA9PiBuZGU/LmlkID09PSBzd05vZGUuaWQpO1xuICAgICAgICBpZiAoZm91bmROb2RlPy5zdGFnZURhdGEpIHtcbiAgICAgICAgICBmb3VuZE5vZGUuc3RhZ2VEYXRhLklzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzd05vZGU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN3O1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7bmV3UGFyYWxsZWxTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgIH0gZm9yIG5vZGU6YCxcbiAgICAgIHRoaXMubm9kZS5pZFxuICAgICk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGNvbm5lY3Rpb25zIGNoYW5nZVxuICByZWZyZXNoU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPikge1xuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTaGFwZTogUmVjdGFuZ2xlIGZvciBzdGFnZSwgSGV4YWdvbiBmb3Igc3ViZmxvdyAtLT5cbiAgQGlmIChpc1N1YmZsb3cpIHtcbiAgPHN2ZzpwYXRoIFthdHRyLmRdPVwiXG4gICAgICAnTSAxICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgTCAnICtcbiAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICcgMSBMICcgK1xuICAgICAgKG5vZGUud2lkdGggLSAxKSArXG4gICAgICAnICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgViAnICtcbiAgICAgIChub2RlLmhlaWdodCAqIDMpIC8gNCArXG4gICAgICAnIEwgJyArXG4gICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAnICcgK1xuICAgICAgKG5vZGUuaGVpZ2h0IC0gMSkgK1xuICAgICAgJyBMIDEgJyArXG4gICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgJyBaJ1xuICAgIFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCI+PC9zdmc6cGF0aD5cbiAgfSBAZWxzZSB7XG4gIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aFwiIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIj48L3N2ZzpyZWN0PlxuICB9XG5cbiAgPCEtLSBUb3AtbGVmdCBpY29uOiBTdGFnZSBmb3JtIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZUZvcm1Qb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDYpXCI+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0IHg9XCItMlwiIHk9XCItMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgW2F0dHIuZmlsbF09XCJub2RlLnN0YWdlRGF0YT8uZm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBUb3AtcmlnaHQgaWNvbjogU2hpZWxkIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIiBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyAobm9kZS53aWR0aCAtIDMwKSArICcsIDYpJ1wiPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdCB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG5cbiAgICA8c3ZnOnBhdGggZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Db2RlKSB7XG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ2xlZnQnLCAkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBSaWdodC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgMzgpJ1wiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG4gIH1cblxuICA8IS0tIEJvdHRvbS1sZWZ0IGljb246IERvdWJsZSBzbGFzaCB0ZXh0IC0tPlxuICA8c3ZnOmcgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiIChjbGljayk9XCJ0b2dnbGVDb2RlUG9wdXAoJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoNiwgJyArIChub2RlLmhlaWdodCAtIDE2KSArICcpJ1wiPlxuICAgIDxzdmc6dGV4dCBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIiBmb250LXdlaWdodD1cIjUwMFwiIGZvbnQtc2l6ZT1cIjE2cHhcIlxuICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIiBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCI+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlVGltZXJQb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCI+XG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTExLjUgM0MxNC4wMTk2IDMgMTYuNDM1OSA0LjAwMDg5IDE4LjIxNzUgNS43ODI0OUMxOS45OTkxIDcuNTY0MDggMjEgOS45ODA0NCAyMSAxMi41QzIxIDE1LjAxOTYgMTkuOTk5MSAxNy40MzU5IDE4LjIxNzUgMTkuMjE3NUMxNi40MzU5IDIwLjk5OTEgMTQuMDE5NiAyMiAxMS41IDIyQzguOTgwNDQgMjIgNi41NjQwOCAyMC45OTkxIDQuNzgyNDkgMTkuMjE3NUMzLjAwMDg5IDE3LjQzNTkgMiAxNS4wMTk2IDIgMTIuNUMyIDkuOTgwNDQgMy4wMDA4OSA3LjU2NDA4IDQuNzgyNDkgNS43ODI0OUM2LjU2NDA4IDQuMDAwODkgOC45ODA0NCAzIDExLjUgM1pNMTEuNSA0QzkuMjQ1NjYgNCA3LjA4MzY1IDQuODk1NTMgNS40ODk1OSA2LjQ4OTU5QzMuODk1NTMgOC4wODM2NSAzIDEwLjI0NTcgMyAxMi41QzMgMTQuNzU0MyAzLjg5NTUzIDE2LjkxNjMgNS40ODk1OSAxOC41MTA0QzcuMDgzNjUgMjAuMTA0NSA5LjI0NTY2IDIxIDExLjUgMjFDMTIuNjE2MiAyMSAxMy43MjE1IDIwLjc4MDEgMTQuNzUyOCAyMC4zNTNDMTUuNzg0MSAxOS45MjU4IDE2LjcyMTEgMTkuMjk5NyAxNy41MTA0IDE4LjUxMDRDMTguMjk5NyAxNy43MjExIDE4LjkyNTggMTYuNzg0MSAxOS4zNTMgMTUuNzUyOEMxOS43ODAxIDE0LjcyMTUgMjAgMTMuNjE2MiAyMCAxMi41QzIwIDEwLjI0NTcgMTkuMTA0NSA4LjA4MzY1IDE3LjUxMDQgNi40ODk1OUMxNS45MTYzIDQuODk1NTMgMTMuNzU0MyA0IDExLjUgNFpNMTEgN0gxMlYxMi40MkwxNi43IDE1LjEzTDE2LjIgMTZMMTEgMTNWN1pcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dCBbYXR0ci54XT1cIm5vZGUud2lkdGggLyAyXCIgW2F0dHIueV09XCJub2RlLmhlaWdodCAvIDJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGRvbWluYW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICBbYXR0ci5mb250LXNpemVdPVwiaXNTdWJmbG93ID8gJzEwJyA6ICcxNCdcIiBmaWxsPVwiIzAwMDAwMFwiPlxuICAgIHt7IHRydW5jYXRlZERpc3BsYXlOYW1lIH19XG4gIDwvc3ZnOnRleHQ+XG48L3N2ZzpnPlxuXG48IS0tIDxsaWItc3RhZ2UtZGlhbG9nXG4gIFt2aXNpYmxlXT1cInNob3dTaGllbGRQb3B1cCgpXCJcbiAgW3N0YWdlRGF0YV09XCJub2RlLnN0YWdlRGF0YSB8fCB7fVwiXG4gIChjbG9zZWQpPVwic2hvd1NoaWVsZFBvcHVwLnNldChmYWxzZSlcIlxuICAoc2F2ZWQpPVwib25TdGFnZVByb3BlcnRpZXNTYXZlZCgkZXZlbnQpXCJcbj48L2xpYi1zdGFnZS1kaWFsb2c+IC0tPlxuIl19
|
|
@@ -82,18 +82,18 @@ export class WorkflowFacade {
|
|
|
82
82
|
this.workflowState.setUpdating(true);
|
|
83
83
|
const currentParams = this.workflowState.getQueryParamsValue();
|
|
84
84
|
const searchTerm = this.workflowState.getSearchTermValue();
|
|
85
|
-
//
|
|
85
|
+
// The first page is already loaded at skip=0 (via loadRequests) without
|
|
86
|
+
// advancing the pointer, so fetch the *next* page starting at newSkip.
|
|
86
87
|
const newSkip = currentParams.skip + currentParams.limit;
|
|
87
|
-
// Load and append data using the current (old) skip
|
|
88
88
|
const response = searchTerm
|
|
89
|
-
? await this.workflowService.getWorkflowWithParam(searchTerm,
|
|
90
|
-
: await this.workflowService.getWorkflows(
|
|
89
|
+
? await this.workflowService.getWorkflowWithParam(searchTerm, newSkip, currentParams.limit, currentParams.sortParam || 'createdDate', currentParams.sortOrder)
|
|
90
|
+
: await this.workflowService.getWorkflows(newSkip, currentParams.limit, currentParams.sortParam || 'createdDate', currentParams.sortOrder);
|
|
91
91
|
if (response instanceof ErrorResponse) {
|
|
92
92
|
this.utilService.showError(response.ErrorMsg);
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
95
|
this.workflowState.appendRequests(response.Result);
|
|
96
|
-
//
|
|
96
|
+
// Persist the new offset only after a successful fetch
|
|
97
97
|
this.workflowState.updateQueryParams({ skip: newSkip });
|
|
98
98
|
}
|
|
99
99
|
catch (error) {
|
|
@@ -303,4 +303,4 @@ var DateFilterTypes;
|
|
|
303
303
|
DateFilterTypes["On"] = "EQ";
|
|
304
304
|
DateFilterTypes["After"] = "GT";
|
|
305
305
|
})(DateFilterTypes || (DateFilterTypes = {}));
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmZhY2FkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3dzL3dvcmtmbG93cy5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsT0FBTyxFQUNQLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSxhQUFhLEVBQWUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBK0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvSixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFPcEYsTUFBTSxPQUFPLGNBQWM7SUFLZjtJQUNBO0lBQ0E7SUFORixhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUN0QyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxZQUNVLGVBQWlDLEVBQ2pDLGFBQTZCLEVBQzdCLFdBQXdCO1FBRnhCLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFaEMsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxhQUFhO2FBQ2YsSUFBSSxDQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsRUFDbEIsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLElBQVk7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0I7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVyQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUEyQjtRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxxQkFBcUI7SUFDckIsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRTNELDBEQUEwRDtZQUMxRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFFekQsb0RBQW9EO1lBQ3BELE1BQU0sUUFBUSxHQUFHLFVBQVU7Z0JBQ3pCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQzdDLFVBQVUsRUFDVixhQUFhLENBQUMsSUFBSSxFQUNsQixhQUFhLENBQUMsS0FBSyxFQUNuQixhQUFhLENBQUMsU0FBUyxJQUFJLGFBQWEsRUFDeEMsYUFBYSxDQUFDLFNBQVMsQ0FDeEI7Z0JBQ0gsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQ3JDLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLGFBQWEsQ0FBQyxLQUFLLEVBQ25CLGFBQWEsQ0FBQyxTQUFTLElBQUksYUFBYSxFQUN4QyxhQUFhLENBQUMsU0FBUyxDQUN4QixDQUFDO1lBRU4sSUFBSSxRQUFRLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkQsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osSUFBWSxFQUNaLEtBQWE7UUFFYixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFM0QsdUJBQXVCO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLFVBQVU7Z0JBQ3pCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQy9DLFVBQVUsRUFDVixJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsSUFBSSxhQUFhLEVBQzFCLFNBQVMsQ0FDVjtnQkFDRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FDdkMsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLElBQUksYUFBYSxFQUMxQixTQUFTLENBQ1YsQ0FBQztZQUVKLElBQUksUUFBUSxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU87WUFDVCxDQUFDO1lBRUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRXhELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsU0FBUyxJQUFJLGFBQWEsRUFDakMsTUFBTSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztZQUVGLElBQUksUUFBUSxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUMvRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELGFBQWEsRUFDYixhQUFhLENBQUMsSUFBSSxDQUNuQixDQUFDO1lBRUYsSUFBSSxRQUFRLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBYTtRQUN2QyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFFeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUM5RCxLQUFLLEVBQ0wsTUFBTSxDQUFDLElBQUksRUFDWCxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxTQUFTLElBQUksYUFBYSxFQUNqQyxNQUFNLENBQUMsU0FBUyxDQUNqQixDQUFDO1lBRUYsSUFBSSxRQUFRLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCLENBQUMsWUFBMkI7UUFDMUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRXhELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FDbkUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ3pCLElBQUksRUFBRSw4Q0FBOEMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNqRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEdBQUc7Z0JBQzVCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO2FBQzVCLENBQUMsQ0FBQyxFQUNILE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsU0FBUyxJQUFJLGFBQWEsRUFDakMsTUFBTSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztZQUVGLElBQUksUUFBUSxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBc0M7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUEwQjtRQUN6QyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFjLENBQUM7WUFDOUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFFeEUsSUFBSSxRQUFRLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxvQ0FBb0M7UUFDakUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFLLENBQUMsQ0FBQztZQUNoRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFpQjtRQUNuQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVyRSxJQUFJLFFBQVEsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQ25DLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFpQjtRQUNwQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQzFELENBQUMsT0FBTyxDQUFDLEVBQ1QsSUFBSSxDQUNMLENBQUM7WUFFRixJQUFJLFFBQVEsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPO1lBQ1QsQ0FBQztZQUVELHlCQUF5QjtZQUN6QixNQUFNLElBQUksR0FBSSxRQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7d0dBdFdVLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQTBXRCxJQUFLLGVBSUo7QUFKRCxXQUFLLGVBQWU7SUFDbEIsZ0NBQThCLENBQUE7SUFDOUIsNEJBQTBCLENBQUE7SUFDMUIsK0JBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUpJLGVBQWUsS0FBZixlQUFlLFFBSW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbGFzdFZhbHVlRnJvbSxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSwgUXVlcnlQYXJhbXMsIFNlYXJjaE9wZXJhdG9yLCBTZWFyY2hQcm9wZXJ0eVNpZ24sIFNvcnREaXJlY3Rpb24sIFdvcmtmbG93LCBXb3JrZmxvd09wZXJhdGlvbiB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IGNvbnZlcnREYXRhRmlsdGVyVHlwZVRvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUgfSBmcm9tICcuL3dvcmtmbG93cy5oZWxwZXInO1xuaW1wb3J0IHsgV29ya2Zsb3dzU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3dzLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dzU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93cy5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0ZhY2FkZSB7XG4gIHByaXZhdGUgc2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3b3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB3b3JrZmxvd1N0YXRlOiBXb3JrZmxvd3NTdGF0ZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZVxuICApIHtcbiAgICAvLyBTZXQgdXAgZGVib3VuY2VkIHNlYXJjaCBoYW5kbGluZ1xuICAgIHRoaXMuc2VhcmNoU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoKHNlYXJjaFRlcm0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmlzVXBkYXRpbmckKCkuc3Vic2NyaWJlKChsb2FkaW5nKSA9PiB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShsb2FkaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaXNVcGRhdGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTdGF0ZS5pc1VwZGF0aW5nJCgpO1xuICB9XG5cbiAgZ2V0UmVxdWVzdHMkKCk6IE9ic2VydmFibGU8V29ya2Zsb3dbXT4ge1xuICAgIHJldHVybiB0aGlzLndvcmtmbG93U3RhdGUuZ2V0UmVxdWVzdHMkKCk7XG4gIH1cblxuICBnZXRPcGVyYXRpb25zJCgpOiBPYnNlcnZhYmxlPFdvcmtmbG93T3BlcmF0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd1N0YXRlLmdldE9wZXJhdGlvbnMkKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJQYXJhbXMkKCk6IE9ic2VydmFibGU8SURhdGFGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLndvcmtmbG93U3RhdGUuZ2V0RmlsdGVyUGFyYW1zJCgpO1xuICB9XG5cbiAgZ2V0UXVlcnlQYXJhbXMkKCk6IE9ic2VydmFibGU8UXVlcnlQYXJhbXM8V29ya2Zsb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRRdWVyeVBhcmFtcyQoKTtcbiAgfVxuXG4gIGdldFNlYXJjaFRlcm0kKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRTZWFyY2hUZXJtJCgpO1xuICB9XG5cbiAgLy8gU2VhcmNoIGhhbmRsaW5nXG4gIHNlYXJjaCh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh0ZXJtKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU2VhcmNoKHNlYXJjaFRlcm06IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm0pO1xuICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5yZXNldFBhZ2luYXRpb24oKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUmVxdWVzdHNXaXRoUGFyYW0oc2VhcmNoVGVybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRSZXF1ZXN0cygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTZWFyY2ggZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbHRlcihmaWx0ZXJQYXJhbXM6IElEYXRhRmlsdGVyW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLndvcmtmbG93U3RhdGUucmVzZXRQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldEZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xuICB9XG5cbiAgLy8gTG9hZCBtb3JlIGhhbmRsaW5nXG4gIGFzeW5jIGxvYWRNb3JlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0U2VhcmNoVGVybVZhbHVlKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgbmV3IHNraXAgYnV0IGZldGNoIHVzaW5nIHRoZSBjdXJyZW50IHNraXAgZmlyc3RcbiAgICAgIGNvbnN0IG5ld1NraXAgPSBjdXJyZW50UGFyYW1zLnNraXAgKyBjdXJyZW50UGFyYW1zLmxpbWl0O1xuXG4gICAgICAvLyBMb2FkIGFuZCBhcHBlbmQgZGF0YSB1c2luZyB0aGUgY3VycmVudCAob2xkKSBza2lwXG4gICAgICBjb25zdCByZXNwb25zZSA9IHNlYXJjaFRlcm1cbiAgICAgICAgPyBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd1dpdGhQYXJhbShcbiAgICAgICAgICAgIHNlYXJjaFRlcm0sXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLnNraXAsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc29ydE9yZGVyXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93cyhcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc2tpcCxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMubGltaXQsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuYXBwZW5kUmVxdWVzdHMocmVzcG9uc2UuUmVzdWx0KTtcbiAgICAgIC8vIFVwZGF0ZSBza2lwIG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGZldGNoXG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUudXBkYXRlUXVlcnlQYXJhbXMoeyBza2lwOiBuZXdTa2lwIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMb2FkIG1vcmUgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhKFxuICAgIHNraXA6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8V29ya2Zsb3dbXSB8IHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgeyBzb3J0UGFyYW0sIHNvcnRPcmRlciB9ID0gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0U2VhcmNoVGVybVZhbHVlKCk7XG5cbiAgICAgIC8vIExvYWQgYW5kIGFwcGVuZCBkYXRhXG4gICAgICBjb25zdCByZXNwb25zZSA9IHNlYXJjaFRlcm1cbiAgICAgICAgPyBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd1dpdGhQYXJhbShcbiAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgIHNraXAsXG4gICAgICAgICAgbGltaXQsXG4gICAgICAgICAgc29ydFBhcmFtIHx8ICdjcmVhdGVkRGF0ZScsXG4gICAgICAgICAgc29ydE9yZGVyXG4gICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd3MoXG4gICAgICAgICAgc2tpcCxcbiAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICBzb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICBzb3J0T3JkZXJcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLlJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTG9hZCBtb3JlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZ2V0V29ya2Zsb3dzKFxuICAgICAgICBwYXJhbXMuc2tpcCxcbiAgICAgICAgcGFyYW1zLmxpbWl0LFxuICAgICAgICBwYXJhbXMuc29ydFBhcmFtIHx8ICdDcmVhdGVkRGF0ZScsXG4gICAgICAgIHBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXF1ZXN0cyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVxdWVzdHMuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRSZXF1ZXN0cyhyZXF1ZXN0cy5SZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByZXF1ZXN0czonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkT3BlcmF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd09wZXJhdGlvbnMoXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgICdDcmVhdGVkRGF0ZScsXG4gICAgICAgIFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldE9wZXJhdGlvbnMocmVzcG9uc2UuUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHM6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHNXaXRoUGFyYW0ocGFyYW06IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgcGFyYW1zLnNraXAsXG4gICAgICAgIHBhcmFtcy5saW1pdCxcbiAgICAgICAgcGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICBwYXJhbXMuc29ydE9yZGVyXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWVzdHMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlcXVlc3RzLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0UmVxdWVzdHMocmVxdWVzdHMuUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHNCeUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IElEYXRhRmlsdGVyW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd0J5RmlsdGVyUGFyYW1zKFxuICAgICAgICBmaWx0ZXJQYXJhbXMubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgUHJvcGVydHlOYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICBFbnRpdHlWYWx1ZTogZmlsdGVyLnZhbHVlLFxuICAgICAgICAgIHR5cGU6IGNvbnZlcnREYXRhRmlsdGVyVHlwZVRvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUoZmlsdGVyLnR5cGUpLFxuICAgICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICB9KSksXG4gICAgICAgIHBhcmFtcy5za2lwLFxuICAgICAgICBwYXJhbXMubGltaXQsXG4gICAgICAgIHBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgcGFyYW1zLnNvcnRPcmRlclxuICAgICAgKTtcblxuICAgICAgaWYgKHJlcXVlc3RzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXF1ZXN0cy5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFJlcXVlc3RzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zOiBQYXJ0aWFsPFF1ZXJ5UGFyYW1zPFdvcmtmbG93Pj4pOiB2b2lkIHtcbiAgICB0aGlzLndvcmtmbG93U3RhdGUudXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlcXVlc3QocmVxdWVzdDogUGFydGlhbDxXb3JrZmxvdz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgbmV3UmVxdWVzdCA9IHsgLi4ucmVxdWVzdCB9IGFzIFdvcmtmbG93O1xuICAgICAgbmV3UmVxdWVzdC5JZCA9ICcnO1xuICAgICAgbmV3UmVxdWVzdC5Db2RlID0gJyc7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLnNhdmVXb3JrZmxvd3MoW25ld1JlcXVlc3RdKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnV29ya2Zsb3dzIGFkZGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUmVxdWVzdHMoKTsgLy8gUmVsb2FkIHRvIGdldCBzZXJ2ZXItc2lkZSBjaGFuZ2VzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0LkNvZGUhKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlcXVlc3QocmVxdWVzdDogV29ya2Zsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5zYXZlV29ya2Zsb3dzKFtyZXF1ZXN0XSk7XG5cbiAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1dvcmtmbG93cyB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnVwZGF0ZVJlcXVlc3QocmVxdWVzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy53b3JrZmxvd1NlcnZpY2UuZGVsZXRlV29ya2Zsb3dzKFtyZXF1ZXN0SWRdKSk7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwcm92ZVJlcXVlc3QocmVxdWVzdDogV29ya2Zsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5wcm9jZXNzV29ya2Zsb3dzKFxuICAgICAgICBbcmVxdWVzdF0sXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2UgYXMgV29ya2Zsb3dbXSk/LlswXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS51cGRhdGVSZXF1ZXN0KGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG5cbmVudW0gRGF0ZUZpbHRlclR5cGVzIHtcbiAgQmVmb3JlID0gU2VhcmNoUHJvcGVydHlTaWduLkxULFxuICBPbiA9IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgQWZ0ZXIgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uR1QsXG59XG4iXX0=
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLmZhY2FkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3dzL3dvcmtmbG93cy5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsT0FBTyxFQUNQLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSxhQUFhLEVBQWUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBK0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvSixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFPcEYsTUFBTSxPQUFPLGNBQWM7SUFLZjtJQUNBO0lBQ0E7SUFORixhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUN0QyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxZQUNVLGVBQWlDLEVBQ2pDLGFBQTZCLEVBQzdCLFdBQXdCO1FBRnhCLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFaEMsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxhQUFhO2FBQ2YsSUFBSSxDQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsRUFDbEIsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FB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bmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBsYXN0VmFsdWVGcm9tLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJRGF0YUZpbHRlciB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlLCBRdWVyeVBhcmFtcywgU2VhcmNoT3BlcmF0b3IsIFNlYXJjaFByb3BlcnR5U2lnbiwgU29ydERpcmVjdGlvbiwgV29ya2Zsb3csIFdvcmtmbG93T3BlcmF0aW9uIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvc2VydmljZXMnO1xuaW1wb3J0IHsgY29udmVydERhdGFGaWx0ZXJUeXBlVG9TZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSB9IGZyb20gJy4vd29ya2Zsb3dzLmhlbHBlcic7XG5pbXBvcnQgeyBXb3JrZmxvd3NTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvd3Muc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd3NTdGF0ZSB9IGZyb20gJy4vd29ya2Zsb3dzLnN0YXRlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RmFjYWRlIHtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZTogV29ya2Zsb3dzU2VydmljZSxcbiAgICBwcml2YXRlIHdvcmtmbG93U3RhdGU6IFdvcmtmbG93c1N0YXRlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlXG4gICkge1xuICAgIC8vIFNldCB1cCBkZWJvdW5jZWQgc2VhcmNoIGhhbmRsaW5nXG4gICAgdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2goc2VhcmNoVGVybSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaXNVcGRhdGluZyQoKS5zdWJzY3JpYmUoKGxvYWRpbmcpID0+IHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGxvYWRpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBpc1VwZGF0aW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd1N0YXRlLmlzVXBkYXRpbmckKCk7XG4gIH1cblxuICBnZXRSZXF1ZXN0cyQoKTogT2JzZXJ2YWJsZTxXb3JrZmxvd1tdPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRSZXF1ZXN0cyQoKTtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbnMkKCk6IE9ic2VydmFibGU8V29ya2Zsb3dPcGVyYXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLndvcmtmbG93U3RhdGUuZ2V0T3BlcmF0aW9ucyQoKTtcbiAgfVxuXG4gIGdldEZpbHRlclBhcmFtcyQoKTogT2JzZXJ2YWJsZTxJRGF0YUZpbHRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRGaWx0ZXJQYXJhbXMkKCk7XG4gIH1cblxuICBnZXRRdWVyeVBhcmFtcyQoKTogT2JzZXJ2YWJsZTxRdWVyeVBhcmFtczxXb3JrZmxvdz4+IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zJCgpO1xuICB9XG5cbiAgZ2V0U2VhcmNoVGVybSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd1N0YXRlLmdldFNlYXJjaFRlcm0kKCk7XG4gIH1cblxuICAvLyBTZWFyY2ggaGFuZGxpbmdcbiAgc2VhcmNoKHRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHRlcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZWFyY2goc2VhcmNoVGVybTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFNlYXJjaFRlcm0oc2VhcmNoVGVybSk7XG4gICAgdGhpcy53b3JrZmxvd1N0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGlmIChzZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRSZXF1ZXN0c1dpdGhQYXJhbShzZWFyY2hUZXJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFJlcXVlc3RzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlYXJjaCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsdGVyKGZpbHRlclBhcmFtczogSURhdGFGaWx0ZXJbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5yZXNldFBhZ2luYXRpb24oKTtcbiAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0RmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XG4gIH1cblxuICAvLyBMb2FkIG1vcmUgaGFuZGxpbmdcbiAgYXN5bmMgbG9hZE1vcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRTZWFyY2hUZXJtVmFsdWUoKTtcblxuICAgICAgLy8gVGhlIGZpcnN0IHBhZ2UgaXMgYWxyZWFkeSBsb2FkZWQgYXQgc2tpcD0wICh2aWEgbG9hZFJlcXVlc3RzKSB3aXRob3V0XG4gICAgICAvLyBhZHZhbmNpbmcgdGhlIHBvaW50ZXIsIHNvIGZldGNoIHRoZSAqbmV4dCogcGFnZSBzdGFydGluZyBhdCBuZXdTa2lwLlxuICAgICAgY29uc3QgbmV3U2tpcCA9IGN1cnJlbnRQYXJhbXMuc2tpcCArIGN1cnJlbnRQYXJhbXMubGltaXQ7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gc2VhcmNoVGVybVxuICAgICAgICA/IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgICAgICAgICAgc2VhcmNoVGVybSxcbiAgICAgICAgICAgIG5ld1NraXAsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc29ydE9yZGVyXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93cyhcbiAgICAgICAgICAgIG5ld1NraXAsXG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMuc29ydE9yZGVyXG4gICAgICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLmFwcGVuZFJlcXVlc3RzKHJlc3BvbnNlLlJlc3VsdCk7XG4gICAgICAvLyBQZXJzaXN0IHRoZSBuZXcgb2Zmc2V0IG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGZldGNoXG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUudXBkYXRlUXVlcnlQYXJhbXMoeyBza2lwOiBuZXdTa2lwIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMb2FkIG1vcmUgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhKFxuICAgIHNraXA6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8V29ya2Zsb3dbXSB8IHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgeyBzb3J0UGFyYW0sIHNvcnRPcmRlciB9ID0gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0U2VhcmNoVGVybVZhbHVlKCk7XG5cbiAgICAgIC8vIExvYWQgYW5kIGFwcGVuZCBkYXRhXG4gICAgICBjb25zdCByZXNwb25zZSA9IHNlYXJjaFRlcm1cbiAgICAgICAgPyBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd1dpdGhQYXJhbShcbiAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgIHNraXAsXG4gICAgICAgICAgbGltaXQsXG4gICAgICAgICAgc29ydFBhcmFtIHx8ICdjcmVhdGVkRGF0ZScsXG4gICAgICAgICAgc29ydE9yZGVyXG4gICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd3MoXG4gICAgICAgICAgc2tpcCxcbiAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICBzb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgICBzb3J0T3JkZXJcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLlJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTG9hZCBtb3JlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMud29ya2Zsb3dTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZ2V0V29ya2Zsb3dzKFxuICAgICAgICBwYXJhbXMuc2tpcCxcbiAgICAgICAgcGFyYW1zLmxpbWl0LFxuICAgICAgICBwYXJhbXMuc29ydFBhcmFtIHx8ICdDcmVhdGVkRGF0ZScsXG4gICAgICAgIHBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXF1ZXN0cyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVxdWVzdHMuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRSZXF1ZXN0cyhyZXF1ZXN0cy5SZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByZXF1ZXN0czonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkT3BlcmF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd09wZXJhdGlvbnMoXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgICdDcmVhdGVkRGF0ZScsXG4gICAgICAgIFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldE9wZXJhdGlvbnMocmVzcG9uc2UuUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHM6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHNXaXRoUGFyYW0ocGFyYW06IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLndvcmtmbG93U3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgcGFyYW1zLnNraXAsXG4gICAgICAgIHBhcmFtcy5saW1pdCxcbiAgICAgICAgcGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICBwYXJhbXMuc29ydE9yZGVyXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWVzdHMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlcXVlc3RzLkVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0UmVxdWVzdHMocmVxdWVzdHMuUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHNCeUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IElEYXRhRmlsdGVyW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy53b3JrZmxvd1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5nZXRXb3JrZmxvd0J5RmlsdGVyUGFyYW1zKFxuICAgICAgICBmaWx0ZXJQYXJhbXMubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgUHJvcGVydHlOYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICBFbnRpdHlWYWx1ZTogZmlsdGVyLnZhbHVlLFxuICAgICAgICAgIHR5cGU6IGNvbnZlcnREYXRhRmlsdGVyVHlwZVRvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUoZmlsdGVyLnR5cGUpLFxuICAgICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICB9KSksXG4gICAgICAgIHBhcmFtcy5za2lwLFxuICAgICAgICBwYXJhbXMubGltaXQsXG4gICAgICAgIHBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgcGFyYW1zLnNvcnRPcmRlclxuICAgICAgKTtcblxuICAgICAgaWYgKHJlcXVlc3RzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXF1ZXN0cy5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFJlcXVlc3RzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zOiBQYXJ0aWFsPFF1ZXJ5UGFyYW1zPFdvcmtmbG93Pj4pOiB2b2lkIHtcbiAgICB0aGlzLndvcmtmbG93U3RhdGUudXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlcXVlc3QocmVxdWVzdDogUGFydGlhbDxXb3JrZmxvdz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgbmV3UmVxdWVzdCA9IHsgLi4ucmVxdWVzdCB9IGFzIFdvcmtmbG93O1xuICAgICAgbmV3UmVxdWVzdC5JZCA9ICcnO1xuICAgICAgbmV3UmVxdWVzdC5Db2RlID0gJyc7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dTZXJ2aWNlLnNhdmVXb3JrZmxvd3MoW25ld1JlcXVlc3RdKTtcblxuICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihyZXNwb25zZS5FcnJvck1zZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnV29ya2Zsb3dzIGFkZGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUmVxdWVzdHMoKTsgLy8gUmVsb2FkIHRvIGdldCBzZXJ2ZXItc2lkZSBjaGFuZ2VzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0LkNvZGUhKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlcXVlc3QocmVxdWVzdDogV29ya2Zsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5zYXZlV29ya2Zsb3dzKFtyZXF1ZXN0XSk7XG5cbiAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1dvcmtmbG93cyB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnVwZGF0ZVJlcXVlc3QocmVxdWVzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy53b3JrZmxvd1NlcnZpY2UuZGVsZXRlV29ya2Zsb3dzKFtyZXF1ZXN0SWRdKSk7XG4gICAgICB0aGlzLndvcmtmbG93U3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwcm92ZVJlcXVlc3QocmVxdWVzdDogV29ya2Zsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrZmxvd1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndvcmtmbG93U2VydmljZS5wcm9jZXNzV29ya2Zsb3dzKFxuICAgICAgICBbcmVxdWVzdF0sXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2UgYXMgV29ya2Zsb3dbXSk/LlswXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS51cGRhdGVSZXF1ZXN0KGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud29ya2Zsb3dTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG5cbmVudW0gRGF0ZUZpbHRlclR5cGVzIHtcbiAgQmVmb3JlID0gU2VhcmNoUHJvcGVydHlTaWduLkxULFxuICBPbiA9IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgQWZ0ZXIgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uR1QsXG59XG4iXX0=
|