@cqa-lib/cqa-ui 1.1.137 → 1.1.139

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.
Files changed (27) hide show
  1. package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +36 -5
  2. package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +9 -3
  3. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +9 -3
  4. package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +12 -3
  5. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +7 -4
  6. package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
  7. package/esm2020/lib/execution-screen/file-download-step/file-download-step.component.mjs +6 -3
  8. package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +9 -3
  9. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +9 -3
  10. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +7 -4
  11. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +52 -3
  12. package/fesm2015/cqa-lib-cqa-ui.mjs +150 -28
  13. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  14. package/fesm2020/cqa-lib-cqa-ui.mjs +146 -24
  15. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/lib/execution-screen/ai-agent-step/ai-agent-step.component.d.ts +2 -1
  17. package/lib/execution-screen/api-step/api-step.component.d.ts +2 -1
  18. package/lib/execution-screen/basic-step/basic-step.component.d.ts +2 -1
  19. package/lib/execution-screen/condition-step/condition-step.component.d.ts +2 -1
  20. package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +2 -1
  21. package/lib/execution-screen/execution-step.models.d.ts +1 -0
  22. package/lib/execution-screen/file-download-step/file-download-step.component.d.ts +2 -1
  23. package/lib/execution-screen/live-execution-step/live-execution-step.component.d.ts +2 -1
  24. package/lib/execution-screen/loop-step/loop-step.component.d.ts +2 -1
  25. package/lib/execution-screen/step-group/step-group.component.d.ts +2 -1
  26. package/package.json +1 -1
  27. package/styles.css +1 -1
@@ -34,7 +34,7 @@ export class StepGroupComponent extends BaseStepComponent {
34
34
  }
35
35
  ngOnChanges(changes) {
36
36
  // Update config when steps input changes
37
- if (changes['steps'] || changes['expanded'] || changes['status'] || changes['duration'] || changes['groupName']) {
37
+ if (changes['steps'] || changes['expanded'] || changes['status'] || changes['duration'] || changes['groupName'] || changes['stepDeleted']) {
38
38
  this.updateConfig();
39
39
  }
40
40
  // Update expanded state if changed
@@ -74,6 +74,7 @@ export class StepGroupComponent extends BaseStepComponent {
74
74
  type: 'step-group',
75
75
  groupName: this.groupName,
76
76
  steps: this.steps || [],
77
+ stepDeleted: this.stepDeleted,
77
78
  timingBreakdown: this.timingBreakdown,
78
79
  expanded: this.expanded,
79
80
  };
@@ -293,10 +294,10 @@ export class StepGroupComponent extends BaseStepComponent {
293
294
  }
294
295
  }
295
296
  StepGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepGroupComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
296
- StepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepGroupComponent, selector: "cqa-step-group", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", groupName: "groupName", steps: "steps", hasChild: "hasChild", isLoading: "isLoading", onExpandHandler: "onExpandHandler", getConditionBranchesHandler: "getConditionBranchesHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", isLive: "isLive", step: "step" }, outputs: { onExpand: "onExpand" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" style=\"border-bottom: '1px solid #F3F4F6'\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle($event)\">\n \n <!-- Status Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <!-- Success -->\n <svg *ngIf=\"config.status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Failed -->\n <svg *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Pending -->\n <svg *ngIf=\"config.status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Running -->\n <svg *ngIf=\"config.status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n \n <span *ngIf=\"config.status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <!-- Folder Icon -->\n <div><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter\">\n {{ config?.stepNumber }}. Step group: {{ config.groupName }}\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n <!-- Nested Steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mt-2 cqa-ml-[18px]\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.steps || config.steps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.steps\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div class=\"cqa-step-renderer-wrapper\" [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", components: [{ type: i1.StepRendererComponent, selector: "cqa-step-renderer", inputs: ["step", "onExpandHandler", "getConditionBranchesHandler", "isStepLoadingHandler", "isStepExpandedHandler", "convertMsToSecondsHandler", "formatFailureDetailsHandler", "getSelfHealAnalysisHandler", "onMakeCurrentBaselineHandler", "onUploadBaselineHandler", "onAnalyzeHandler", "onViewFullLogsHandler", "onSelfHealActionHandler", "isUploadingBaseline", "isMakingCurrentBaseline", "selectedIterationId", "getLoopIterationsHandler", "getApiAssertionsHandler", "formatActionsHandler", "onViewAllIterationsHandler", "onConditionBranchClickHandler", "onStepClickHandler", "onJsonPathCopiedHandler", "isLive"], outputs: ["componentReady"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
297
+ StepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepGroupComponent, selector: "cqa-step-group", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", groupName: "groupName", steps: "steps", hasChild: "hasChild", isLoading: "isLoading", stepDeleted: "stepDeleted", onExpandHandler: "onExpandHandler", getConditionBranchesHandler: "getConditionBranchesHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", isLive: "isLive", step: "step" }, outputs: { onExpand: "onExpand" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" style=\"border-bottom: '1px solid #F3F4F6'\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle($event)\">\n \n <!-- Status Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <!-- Success -->\n <svg *ngIf=\"config.status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Failed -->\n <svg *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Pending -->\n <svg *ngIf=\"config.status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Running -->\n <svg *ngIf=\"config.status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n \n <span *ngIf=\"config.status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <!-- Folder Icon -->\n <div><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\">\n <span>{{ config?.stepNumber }}. Step group: {{ config.groupName }}</span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n <!-- Nested Steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mt-2 cqa-ml-[18px]\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.steps || config.steps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.steps\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div class=\"cqa-step-renderer-wrapper\" [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", components: [{ type: i1.StepRendererComponent, selector: "cqa-step-renderer", inputs: ["step", "onExpandHandler", "getConditionBranchesHandler", "isStepLoadingHandler", "isStepExpandedHandler", "convertMsToSecondsHandler", "formatFailureDetailsHandler", "getSelfHealAnalysisHandler", "onMakeCurrentBaselineHandler", "onUploadBaselineHandler", "onAnalyzeHandler", "onViewFullLogsHandler", "onSelfHealActionHandler", "isUploadingBaseline", "isMakingCurrentBaseline", "selectedIterationId", "getLoopIterationsHandler", "getApiAssertionsHandler", "formatActionsHandler", "onViewAllIterationsHandler", "onConditionBranchClickHandler", "onStepClickHandler", "onJsonPathCopiedHandler", "isLive"], outputs: ["componentReady"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
297
298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepGroupComponent, decorators: [{
298
299
  type: Component,
299
- args: [{ selector: 'cqa-step-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" style=\"border-bottom: '1px solid #F3F4F6'\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle($event)\">\n \n <!-- Status Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <!-- Success -->\n <svg *ngIf=\"config.status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Failed -->\n <svg *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Pending -->\n <svg *ngIf=\"config.status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Running -->\n <svg *ngIf=\"config.status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n \n <span *ngIf=\"config.status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <!-- Folder Icon -->\n <div><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter\">\n {{ config?.stepNumber }}. Step group: {{ config.groupName }}\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n <!-- Nested Steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mt-2 cqa-ml-[18px]\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.steps || config.steps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.steps\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div class=\"cqa-step-renderer-wrapper\" [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
300
+ args: [{ selector: 'cqa-step-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" style=\"border-bottom: '1px solid #F3F4F6'\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle($event)\">\n \n <!-- Status Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <!-- Success -->\n <svg *ngIf=\"config.status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Failed -->\n <svg *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Pending -->\n <svg *ngIf=\"config.status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Running -->\n <svg *ngIf=\"config.status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n \n <span *ngIf=\"config.status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <!-- Folder Icon -->\n <div><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\">\n <span>{{ config?.stepNumber }}. Step group: {{ config.groupName }}</span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n <!-- Nested Steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mt-2 cqa-ml-[18px]\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.steps || config.steps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.steps\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div class=\"cqa-step-renderer-wrapper\" [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
300
301
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
301
302
  type: Input
302
303
  }], testStepResultId: [{
@@ -321,6 +322,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
321
322
  type: Input
322
323
  }], isLoading: [{
323
324
  type: Input
325
+ }], stepDeleted: [{
326
+ type: Input
324
327
  }], onExpandHandler: [{
325
328
  type: Input
326
329
  }], getConditionBranchesHandler: [{
@@ -370,4 +373,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
370
373
  }], onExpand: [{
371
374
  type: Output
372
375
  }] } });
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vc3RlcC1ncm91cC9zdGVwLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9zdGVwLWdyb3VwL3N0ZXAtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBdUQsTUFBTSxlQUFlLENBQUM7QUFFNUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFPM0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQW1EdkQsWUFBb0IsR0FBc0I7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVpqQyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBR2pDLCtDQUErQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUs5Qyx1REFBdUQ7UUFDdkQsaUJBQVksR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUl0QyxDQUFDO0lBRVEsUUFBUTtRQUNmLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUVELCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4RSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUN2QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLHlDQUF5QztRQUN6QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0csSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUVELHdFQUF3RTtRQUN4RSxrR0FBa0c7UUFDbEcsK0JBQStCO1FBQy9CLHdDQUF3QztRQUN4Qyx1REFBdUQ7UUFDdkQsb0JBQW9CO1FBQ3BCLCtDQUErQztRQUMvQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUk7UUFFSiwwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9GLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUNMLENBQUM7SUFDdkIsQ0FBQztJQUVRLE1BQU0sQ0FBQyxLQUFhO1FBQzNCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDcEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVDLElBQUksVUFBVSxFQUFFO2dCQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUNELHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQiwwR0FBMEc7WUFDMUcsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDeEQscUVBQXFFO2dCQUNyRSxNQUFNLFVBQVUsR0FBRztvQkFDakIsR0FBRyxJQUFJLENBQUMsTUFBTTtvQkFDZCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxZQUFZLEVBQUcsSUFBSSxDQUFDLE1BQWMsQ0FBQyxZQUFZLElBQUksWUFBWTtvQkFDL0QsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7b0JBQ3ZDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtpQkFDZ0csQ0FBQztnQkFDOUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNsQztZQUNELGdEQUFnRDtZQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2hELElBQUksTUFBTSxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUN2QztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNCLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNCO1FBRUQsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLG1CQUFtQixDQUFDLElBQXlCO1FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsY0FBYyxDQUFDLElBQXlCO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLDZCQUE2QixDQUFDLElBQXlCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFFLElBQVksQ0FBQyxRQUFRLENBQUM7SUFDaEUsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxZQUFZLENBQUMsSUFBeUI7UUFDcEMsT0FBUSxJQUF3QixDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxRQUFRLENBQUMsSUFBeUI7UUFDaEMsNkRBQTZEO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQXVCLENBQUM7UUFDMUMsT0FBTyxTQUFTLENBQUMsS0FBSyxJQUFLLElBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsZ0JBQWdCLENBQUMsSUFBeUI7UUFDeEMsTUFBTSxRQUFRLEdBQUksSUFBWSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3pELE9BQU8sUUFBUSxLQUFLLFVBQVUsSUFBSSxRQUFRLEtBQUssWUFBWSxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUM7SUFDckYsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxxQkFBcUIsQ0FBQyxJQUF5QjtRQUM3QyxNQUFNLFFBQVEsR0FBSSxJQUFZLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekQsT0FBTyxRQUFRLEtBQUssY0FBYyxJQUFJLFFBQVEsS0FBSyxnQkFBZ0I7WUFDNUQsUUFBUSxLQUFLLG1CQUFtQixJQUFJLFFBQVEsS0FBSyxrQkFBa0I7WUFDbkUsUUFBUSxLQUFLLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFlBQVksQ0FBQyxJQUF5QjtRQUNwQyxPQUFRLElBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxhQUFhLENBQUMsSUFBeUI7UUFDckMsTUFBTSxNQUFNLEdBQUksSUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDekQsT0FBTyxTQUFTLENBQUM7YUFDbEI7aUJBQU0sSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUU7Z0JBQ2hFLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO2lCQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssY0FBYyxFQUFFO2dCQUN0RSxPQUFPLFNBQVMsQ0FBQzthQUNsQjtpQkFBTSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3BDLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsZUFBZSxDQUFDLElBQXlCO1FBQ3ZDLE9BQVEsSUFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLFdBQVcsQ0FBQyxJQUF5QjtRQUNuQyxNQUFNLFFBQVEsR0FBSSxJQUFZLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekQsSUFBSSxRQUFRLEtBQUssVUFBVSxJQUFLLElBQXVCLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUMxRSxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU0sSUFBSSxRQUFRLEtBQUssWUFBWSxJQUFLLElBQXVCLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUNyRixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQVEsSUFBdUIsQ0FBQyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQXlCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQXNCLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBeUI7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBc0IsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQyxXQUFXLElBQUssSUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELCtDQUErQztJQUMvQyx3QkFBd0IsQ0FBQyxJQUF5QjtRQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQXlCO1FBQ2hELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBeUI7UUFDNUMsT0FBUSxJQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUF5QjtRQUNoRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQXlCO1FBQy9DLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBeUI7UUFDakQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBeUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsNkJBQTZCLENBQUMsSUFBeUIsRUFBRSxXQUFtQjtRQUMxRSwwREFBMEQ7UUFDMUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsOEJBQThCLENBQUMsSUFBeUI7UUFDdEQsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0NBQWdDLENBQUMsSUFBeUI7UUFDeEQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsNERBQTREO0lBQzVELDBCQUEwQixDQUFDLElBQXlCO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQXNCLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsbUJBQW1CLENBQUM7SUFDdEMsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQXlCO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQXNCLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxJQUF5QjtRQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFzQixDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hDLENBQUM7SUFHRCwwREFBMEQ7SUFDMUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUNqQyxDQUFDOzsrR0E1V1Usa0JBQWtCO21HQUFsQixrQkFBa0Isb2lEQ1QvQiw0cFBBNkZBOzJGRHBGYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLFFBRXBCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTt3R0FJckIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdGVwR3JvdXBDb25maWcsIExvb3BTdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIEV4ZWN1dGlvblN0ZXBDb25maWcsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBHcm91cENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBJbmRpdmlkdWFsIGlucHV0c1xuICBASW5wdXQoKSBpZCE6IHN0cmluZztcbiAgQElucHV0KCkgdGVzdFN0ZXBSZXN1bHRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcE51bWJlciE6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0YXR1cyE6IFN0ZXBTdGF0dXM7XG4gIEBJbnB1dCgpIGR1cmF0aW9uITogbnVtYmVyO1xuICBASW5wdXQoKSB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIEBJbnB1dCgpIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JvdXBOYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwcyE6IEV4ZWN1dGlvblN0ZXBDb25maWdbXTtcbiAgQElucHV0KCkgaGFzQ2hpbGQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBcbiAgLy8gSGFuZGxlciBmdW5jdGlvbiB0byBwYXNzIGRvd24gdG8gbmVzdGVkIGNoaWxkIHN0ZXAgZ3JvdXBzIGZvciByZWN1cnNpdmUgZXhwYW5zaW9uXG4gIEBJbnB1dCgpIG9uRXhwYW5kSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBcbiAgLy8gSGFuZGxlciBmdW5jdGlvbnMgZm9yIG5lc3RlZCBjb21wb25lbnRzIChvcHRpb25hbCwgcGFzc2VkIGZyb20gcGFyZW50KVxuICBASW5wdXQoKSBnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQ29uZGl0aW9uQnJhbmNoW107XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGlzU3RlcExvYWRpbmdIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RlcEV4cGFuZGVkSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyPzogKGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcbiAgQElucHV0KCkgZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQW5hbHl6ZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblZpZXdGdWxsTG9nc0hhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblNlbGZIZWFsQWN0aW9uSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGdldEFwaUFzc2VydGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBmb3JtYXRBY3Rpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgb25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgQElucHV0KCkgb25TdGVwQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiAncmVxdWVzdEJvZHknIHwgJ3Jlc3BvbnNlQm9keScgfCAncmVxdWVzdEhlYWRlcnMnIHwgJ3Jlc3BvbnNlSGVhZGVycycgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZT86IGFueTtcbiAgQElucHV0KCkgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU/OiBhbnk7XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZztcblxuICAvLyBPdXRwdXQgZXZlbnQgZm9yIHdoZW4gdGhlIHN0ZXAgZ3JvdXAgZXhwYW5kc1xuICBAT3V0cHV0KCkgb25FeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBTdGVwR3JvdXBDb25maWc7XG4gIFxuICAvLyBUcmFjayB3aGljaCBzdGVwcyBhcmUgc3RpbGwgbG9hZGluZyB0byBzaG93IHNrZWxldG9uXG4gIGxvYWRpbmdTdGVwczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEJ1aWxkIGNvbmZpZyBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgLy8gRW5zdXJlIGlzRXhwYW5kZWQgaXMgc2V0IGNvcnJlY3RseSBhZnRlciBzdXBlci5uZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWRcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuY29uZmlnLnN0ZXBzICYmIHRoaXMuY29uZmlnLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNvbmZpZy5zdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAgICAgaWYgKHN0ZXBJZCkge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgY29uZmlnIHdoZW4gc3RlcHMgaW5wdXQgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydzdGVwcyddIHx8IGNoYW5nZXNbJ2V4cGFuZGVkJ10gfHwgY2hhbmdlc1snc3RhdHVzJ10gfHwgY2hhbmdlc1snZHVyYXRpb24nXSB8fCBjaGFuZ2VzWydncm91cE5hbWUnXSkge1xuICAgICAgdGhpcy51cGRhdGVDb25maWcoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIGV4cGFuZGVkIHN0YXRlIGlmIGNoYW5nZWRcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSB3aGVuIHN0ZXBzIGFyZSBhZGRlZCBhbmQgc3RlcCBpcyBleHBhbmRlZFxuICAgIC8vIGlmIChjaGFuZ2VzWydzdGVwcyddICYmIHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLmNvbmZpZy5zdGVwcyAmJiB0aGlzLmNvbmZpZy5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgIC8vICAgdGhpcy5jb25maWcuc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAvLyAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgLy8gICAgIGlmIChzdGVwSWQpIHtcbiAgICAvLyAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWQgd2hlbiBjb21wb25lbnQgaW5pdGlhbGl6ZXNcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5jb25maWcuc3RlcHMgJiYgdGhpcy5jb25maWcuc3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgIHRoaXMuY29uZmlnLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWcoKTogdm9pZCB7XG4gICAgLy8gQnVpbGQgb3IgdXBkYXRlIGNvbmZpZyBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ3N0ZXAtZ3JvdXAnLFxuICAgICAgZ3JvdXBOYW1lOiB0aGlzLmdyb3VwTmFtZSxcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzIHx8IFtdLFxuICAgICAgdGltaW5nQnJlYWtkb3duOiB0aGlzLnRpbWluZ0JyZWFrZG93bixcbiAgICAgIGV4cGFuZGVkOiB0aGlzLmV4cGFuZGVkLFxuICAgIH0gYXMgU3RlcEdyb3VwQ29uZmlnO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9nZ2xlKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgY29uc3Qgd2FzRXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQ7XG4gICAgc3VwZXIudG9nZ2xlKCk7XG4gICAgaWYgKHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKSB7XG4gICAgICBjb25zdCBzdGVwVG9QYXNzID0gdGhpcy5zdGVwIHx8IHRoaXMuY29uZmlnO1xuICAgICAgaWYgKHN0ZXBUb1Bhc3MpIHtcbiAgICAgICAgdGhpcy5vblN0ZXBDbGlja0hhbmRsZXIoc3RlcFRvUGFzcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbWl0IGV2ZW50IHdoZW4gZXhwYW5kaW5nICh0cmFuc2l0aW9uaW5nIGZyb20gY29sbGFwc2VkIHRvIGV4cGFuZGVkKVxuICAgIGlmICghd2FzRXhwYW5kZWQgJiYgdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLm9uRXhwYW5kLmVtaXQoKTtcbiAgICAgIC8vIElmIHRoaXMgc3RlcCBoYXMgY2hpbGRyZW4gKGhhc0NoaWxkIGlzIHRydWUpIGFuZCBvbkV4cGFuZEhhbmRsZXIgaXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gZmV0Y2ggY2hpbGRyZW5cbiAgICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlciAmJiB0aGlzLmNvbmZpZyAmJiB0aGlzLmhhc0NoaWxkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHN0ZXAgY29uZmlnIG9iamVjdCBmb3IgdGhlIGhhbmRsZXIgd2l0aCBoYXNDaGlsZCBwcm9wZXJ0eVxuICAgICAgICBjb25zdCBzdGVwQ29uZmlnID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxuICAgICAgICAgIGV4cGFuZGVkOiB0cnVlLCAvLyBFbnN1cmUgZXhwYW5kZWQgaXMgc2V0XG4gICAgICAgICAgdGVzdFN0ZXBUeXBlOiAodGhpcy5jb25maWcgYXMgYW55KS50ZXN0U3RlcFR5cGUgfHwgJ1NURVBfR1JPVVAnLFxuICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmNvbmZpZy5zdGVwcyB8fCBbXSxcbiAgICAgICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICAgICAgaWQ6IHRoaXMuaWRcbiAgICAgICAgfSBhcyBFeGVjdXRpb25TdGVwQ29uZmlnICYgeyBoYXNDaGlsZDogYm9vbGVhbjsgdGVzdFN0ZXBUeXBlPzogc3RyaW5nOyBjaGlsZHJlbj86IGFueVtdOyBleHBhbmRlZD86IGJvb2xlYW4gfTtcbiAgICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcENvbmZpZyk7XG4gICAgICB9XG4gICAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgZm9yIGFsbCBuZXN0ZWQgc3RlcHNcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zdGVwcyAmJiB0aGlzLmNvbmZpZy5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY29uZmlnLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgICAgaWYgKHN0ZXBJZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgLy8gQ2xlYXIgbG9hZGluZyBzdGF0ZSB3aGVuIGNvbGxhcHNpbmdcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBleHBhbmRlZCBzdGF0ZSBpcyBzeW5jZWQgd2l0aCBjb25maWdcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLmV4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gQ2hlY2sgaWYgYSBzdGVwIGlzIHN0aWxsIGxvYWRpbmdcbiAgaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgcmV0dXJuIHN0ZXBJZCA/IHRoaXMubG9hZGluZ1N0ZXBzLmhhcyhTdHJpbmcoc3RlcElkKSkgOiBmYWxzZTtcbiAgfVxuICBcbiAgLy8gTWFyayBhIHN0ZXAgYXMgbG9hZGVkIChjYWxsZWQgd2hlbiBzdGVwLXJlbmRlcmVyIGlzIHJlYWR5KVxuICBtYXJrU3RlcExvYWRlZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgaWYgKHN0ZXBJZCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuZGVsZXRlKFN0cmluZyhzdGVwSWQpKTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIHN0ZXAtZ3JvdXAgd2l0aCBoYXNDaGlsZFxuICBpc05lc3RlZFN0ZXBHcm91cFdpdGhDaGlsZHJlbihzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ZXAudHlwZSA9PT0gJ3N0ZXAtZ3JvdXAnICYmICEhKHN0ZXAgYXMgYW55KS5oYXNDaGlsZDtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGdyb3VwTmFtZSBmcm9tIHN0ZXAgY29uZmlnXG4gIGdldEdyb3VwTmFtZShzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHN0ZXAgYXMgU3RlcEdyb3VwQ29uZmlnKS5ncm91cE5hbWUgfHwgJyc7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGVwcyBmcm9tIHN0ZXAgY29uZmlnXG4gIGdldFN0ZXBzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBFeGVjdXRpb25TdGVwQ29uZmlnW10ge1xuICAgIC8vIENoZWNrIGJvdGggc3RlcHMgYW5kIGNoaWxkcmVuIHByb3BlcnRpZXMgZm9yIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCBzdGVwR3JvdXAgPSBzdGVwIGFzIFN0ZXBHcm91cENvbmZpZztcbiAgICByZXR1cm4gc3RlcEdyb3VwLnN0ZXBzIHx8IChzdGVwIGFzIGFueSkuY2hpbGRyZW4gfHwgW107XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhIGxvb3Agc3RlcFxuICBpc05lc3RlZExvb3BTdGVwKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IChzdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8IHN0ZXAudHlwZTtcbiAgICByZXR1cm4gc3RlcFR5cGUgPT09ICdGT1JfTE9PUCcgfHwgc3RlcFR5cGUgPT09ICdXSElMRV9MT09QJyB8fCBzdGVwVHlwZSA9PT0gJ2xvb3AnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIHN0ZXAgaXMgYSBjb25kaXRpb24gc3RlcFxuICBpc05lc3RlZENvbmRpdGlvblN0ZXAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0ZXBUeXBlID0gKHN0ZXAgYXMgYW55KS50ZXN0U3RlcFR5cGUgfHwgc3RlcC50eXBlO1xuICAgIHJldHVybiBzdGVwVHlwZSA9PT0gJ0NPTkRJVElPTl9JRicgfHwgc3RlcFR5cGUgPT09ICdDT05ESVRJT05fRUxTRScgfHwgXG4gICAgICAgICAgIHN0ZXBUeXBlID09PSAnQ09ORElUSU9OX0VMU0VfSUYnIHx8IHN0ZXBUeXBlID09PSAnQ09ORElUSU9OX0VMU0VJRicgfHxcbiAgICAgICAgICAgc3RlcFR5cGUgPT09ICdjb25kaXRpb24nO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcCB0aXRsZVxuICBnZXRTdGVwVGl0bGUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChzdGVwIGFzIGFueSkuYWN0aW9uIHx8IHN0ZXAudGl0bGUgfHwgJyc7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGVwIHN0YXR1c1xuICBnZXRTdGVwU3RhdHVzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBTdGVwU3RhdHVzIHtcbiAgICBjb25zdCByZXN1bHQgPSAoc3RlcCBhcyBhbnkpLnJlc3VsdDtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBjb25zdCByZXN1bHRMb3dlciA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHJlc3VsdExvd2VyID09PSAnc3VjY2VzcycgfHwgcmVzdWx0TG93ZXIgPT09ICdwYXNzZWQnKSB7XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAnZmFpbHVyZScgfHwgcmVzdWx0TG93ZXIgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0TG93ZXIgPT09ICdwZW5kaW5nJyB8fCByZXN1bHRMb3dlciA9PT0gJ25vdC1leGVjdXRlZCcpIHtcbiAgICAgICAgcmV0dXJuICdwZW5kaW5nJztcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0TG93ZXIgPT09ICdydW5uaW5nJykge1xuICAgICAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RlcC5zdGF0dXMgfHwgJ3BlbmRpbmcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcCBkdXJhdGlvblxuICBnZXRTdGVwRHVyYXRpb24oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIChzdGVwIGFzIGFueSkuZHVyYXRpb24gfHwgc3RlcC5kdXJhdGlvbiB8fCAwO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGxvb3Agc3RlcCBwcm9wZXJ0aWVzXG4gIGdldExvb3BUeXBlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiAnZm9yJyB8ICd3aGlsZScgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0ZXBUeXBlID0gKHN0ZXAgYXMgYW55KS50ZXN0U3RlcFR5cGUgfHwgc3RlcC50eXBlO1xuICAgIGlmIChzdGVwVHlwZSA9PT0gJ0ZPUl9MT09QJyB8fCAoc3RlcCBhcyBMb29wU3RlcENvbmZpZykubG9vcFR5cGUgPT09ICdmb3InKSB7XG4gICAgICByZXR1cm4gJ2Zvcic7XG4gICAgfSBlbHNlIGlmIChzdGVwVHlwZSA9PT0gJ1dISUxFX0xPT1AnIHx8IChzdGVwIGFzIExvb3BTdGVwQ29uZmlnKS5sb29wVHlwZSA9PT0gJ3doaWxlJykge1xuICAgICAgcmV0dXJuICd3aGlsZSc7XG4gICAgfVxuICAgIHJldHVybiAoc3RlcCBhcyBMb29wU3RlcENvbmZpZykubG9vcFR5cGU7XG4gIH1cblxuICBnZXRMb29wSXRlcmF0aW9ucyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYW55W10ge1xuICAgIGNvbnN0IGxvb3BTdGVwID0gc3RlcCBhcyBMb29wU3RlcENvbmZpZztcbiAgICByZXR1cm4gbG9vcFN0ZXAuaXRlcmF0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIGdldExvb3BOZXN0ZWRTdGVwcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogRXhlY3V0aW9uU3RlcENvbmZpZ1tdIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLm5lc3RlZFN0ZXBzIHx8IChzdGVwIGFzIGFueSkuY2hpbGRyZW4gfHwgW107XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgY29uZGl0aW9uIHN0ZXAgcHJvcGVydGllc1xuICBnZXRDb25kaXRpb25TdGVwRHVyYXRpb24oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IG51bWJlciB7XG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmdldFN0ZXBEdXJhdGlvbihzdGVwKTtcbiAgICBpZiAodGhpcy5jb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyKGR1cmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEV4cGFuZGVkKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXAuZXhwYW5kZWQgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwVGV4dChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHN0ZXAgYXMgYW55KS5hY3Rpb24gfHwgc3RlcC50aXRsZSB8fCAnJztcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBCcmFuY2hlcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogQ29uZGl0aW9uQnJhbmNoW10ge1xuICAgIGlmICh0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwTG9hZGluZyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVDb25kaXRpb25TdGVwRXhwYW5kKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUxvb3BTdGVwRXhwYW5kKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUxvb3BTdGVwSXRlcmF0aW9uQ2hhbmdlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGl0ZXJhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uRXhwYW5kSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwRmFpbHVyZURldGFpbHMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwU2VsZkhlYWxBbmFseXNpcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYW55IHtcbiAgICBpZiAodGhpcy5nZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kcyB0byBzYWZlbHkgYWNjZXNzIExvb3BTdGVwQ29uZmlnIHByb3BlcnRpZXNcbiAgZ2V0TG9vcFNlbGVjdGVkSXRlcmF0aW9uSWQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICB9XG5cbiAgZ2V0TG9vcERlZmF1bHRJdGVyYXRpb24oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6ICdmaXJzdCcgfCAnbGFzdCcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxvb3BTdGVwID0gc3RlcCBhcyBMb29wU3RlcENvbmZpZztcbiAgICByZXR1cm4gbG9vcFN0ZXAuZGVmYXVsdEl0ZXJhdGlvbiB8fCAnbGFzdCc7XG4gIH1cblxuICBnZXRMb29wU2hvd1ZpZXdBbGxJdGVyYXRpb25zKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLnNob3dWaWV3QWxsSXRlcmF0aW9ucztcbiAgfVxuXG4gIFxuICAvLyBDaGVjayBpZiB0aGlzIHN0ZXAgaXMgY3VycmVudGx5IGxvYWRpbmcgbmVzdGVkIGNoaWxkcmVuXG4gIGlzU3RlcExvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIgJiYgdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKHRoaXMuY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nIHx8IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtaW50ZXJcIiBzdHlsZT1cImJvcmRlci1ib3R0b206ICcxcHggc29saWQgI0YzRjRGNidcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcC0yIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgXG4gICAgPCEtLSBTdGF0dXMgSWNvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgIDwhLS0gU3VjY2VzcyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gRmFpbGVkIC0tPlxuICAgICAgPHN2ZyAqbmdJZj1cImNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IGNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNFRjQ0NDRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00IDRMOCA4TTggNEw0IDhcIiBzdHJva2U9XCIjRUY0NDQ0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPCEtLSBQZW5kaW5nIC0tPlxuICAgICAgPHN2ZyAqbmdJZj1cImNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUnVubmluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJ1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzNCODJGNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiMzQjgyRjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICBcbiAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc2tpcHBlZCdcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3FhLXRleHQtWyM5Q0EzQUZdIGNxYS10ZXh0LVsxMnB4XVwiPlxuICAgICAgICBza2lwX25leHRcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9sZGVyIEljb24gLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTExLjY2NjYgMTEuNjY2N0MxMS45NzYgMTEuNjY2NyAxMi4yNzI4IDExLjU0MzcgMTIuNDkxNiAxMS4zMjVDMTIuNzEwNCAxMS4xMDYyIDEyLjgzMzMgMTAuODA5NCAxMi44MzMzIDEwLjVWNC42NjY2N0MxMi44MzMzIDQuMzU3MjUgMTIuNzEwNCA0LjA2MDUgMTIuNDkxNiAzLjg0MTcxQzEyLjI3MjggMy42MjI5MiAxMS45NzYgMy41IDExLjY2NjYgMy41SDcuMDU4MjlDNi44NjMxOCAzLjUwMTkxIDYuNjcwNjkgMy40NTQ4NiA2LjQ5ODQ3IDMuMzYzMTRDNi4zMjYyNCAzLjI3MTQyIDYuMTc5NzcgMy4xMzc5NyA2LjA3MjQ2IDIuOTc1TDUuNTk5OTYgMi4yNzVDNS40OTM3MyAyLjExMzY5IDUuMzQ5MTEgMS45ODEyOCA1LjE3OTA4IDEuODg5NjVDNS4wMDkwNiAxLjc5ODAyIDQuODE4OTQgMS43NTAwMyA0LjYyNTc5IDEuNzVIMi4zMzMyOUMyLjAyMzg3IDEuNzUgMS43MjcxMyAxLjg3MjkyIDEuNTA4MzMgMi4wOTE3MUMxLjI4OTU0IDIuMzEwNSAxLjE2NjYzIDIuNjA3MjUgMS4xNjY2MyAyLjkxNjY3VjEwLjVDMS4xNjY2MyAxMC44MDk0IDEuMjg5NTQgMTEuMTA2MiAxLjUwODMzIDExLjMyNUMxLjcyNzEzIDExLjU0MzcgMi4wMjM4NyAxMS42NjY3IDIuMzMzMjkgMTEuNjY2N0gxMS42NjY2WlwiIGZpbGw9XCIjRUZGNkZGXCIgc3Ryb2tlPVwiIzYwQTVGQVwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtZmxleC0xIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdIGNxYS1mb250LWludGVyXCI+XG4gICAgICB7eyBjb25maWc/LnN0ZXBOdW1iZXIgfX0uIFN0ZXAgZ3JvdXA6IHt7IGNvbmZpZy5ncm91cE5hbWUgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oY29uZmlnLmR1cmF0aW9uKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMy41IDVMNyA4LjVMMTAuNSA1XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgPCEtLSBOZXN0ZWQgU3RlcHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW10LTIgY3FhLW1sLVsxOHB4XVwiPlxuICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciBmb3IgbmVzdGVkIHN0ZXBzIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0NoaWxkICYmICghY29uZmlnLnN0ZXBzIHx8IGNvbmZpZy5zdGVwcy5sZW5ndGggPT09IDApICYmIGlzU3RlcExvYWRpbmcoKVwiIFxuICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weS0yIGNxYS1weC0zXCI+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBvcGFjaXR5PVwiMC4yNVwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcgMUE2IDYgMCAwIDEgMTMgN1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XSBjcWEtdGV4dC1bIzczNzM3M11cIj5Mb2FkaW5nIG5lc3RlZCBzdGVwcy4uLjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdGVwIG9mIGNvbmZpZy5zdGVwc1wiPlxuICAgICAgICA8IS0tIFdyYXBwZXIgdG8gc2hvdyBza2VsZXRvbiB3aGlsZSBzdGVwLXJlbmRlcmVyIGlzIGxvYWRpbmcgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1yZW5kZXJlci13cmFwcGVyXCIgW2NsYXNzLmxvYWRlZF09XCIhaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiPlxuICAgICAgICAgIDwhLS0gTG9hZGluZyBza2VsZXRvbiBvdmVybGF5IC0tPlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcClcIiBjbGFzcz1cImNxYS1zdGVwLXNrZWxldG9uLW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RlcC1za2VsZXRvbiBjcWEtbXgtMyBjcWEtbXktMVwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8IS0tIFVzZSBzdGVwLXJlbmRlcmVyIGZvciBhbGwgbmVzdGVkIHN0ZXBzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyAtLT5cbiAgICAgICAgICA8IS0tIFRoZSBzdGVwLXJlbmRlcmVyIHdpbGwgZHluYW1pY2FsbHkgbG9hZCB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50IGFuZCBwYXNzIGhhbmRsZXJzIC0tPlxuICAgICAgICAgIDxjcWEtc3RlcC1yZW5kZXJlciBcbiAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgW29uRXhwYW5kSGFuZGxlcl09XCJvbkV4cGFuZEhhbmRsZXJcIlxuICAgICAgICAgICAgW2dldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcl09XCJnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXJcIlxuICAgICAgICAgICAgW29uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXT1cIm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgIFtpc1N0ZXBMb2FkaW5nSGFuZGxlcl09XCJpc1N0ZXBMb2FkaW5nSGFuZGxlclwiXG4gICAgICAgICAgICBbaXNTdGVwRXhwYW5kZWRIYW5kbGVyXT1cImlzU3RlcEV4cGFuZGVkSGFuZGxlclwiXG4gICAgICAgICAgICBbY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcl09XCJjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXJdPVwiZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcl09XCJnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlclwiXG4gICAgICAgICAgICBbZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXT1cImdldExvb3BJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICBbZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXJdPVwiZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXJcIlxuICAgICAgICAgICAgW2Zvcm1hdEFjdGlvbnNIYW5kbGVyXT1cImZvcm1hdEFjdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcl09XCJvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICBbb25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcl09XCJvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvblVwbG9hZEJhc2VsaW5lSGFuZGxlcl09XCJvblVwbG9hZEJhc2VsaW5lSGFuZGxlclwiXG4gICAgICAgICAgICBbb25BbmFseXplSGFuZGxlcl09XCJvbkFuYWx5emVIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvblZpZXdGdWxsTG9nc0hhbmRsZXJdPVwib25WaWV3RnVsbExvZ3NIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvblNlbGZIZWFsQWN0aW9uSGFuZGxlcl09XCJvblNlbGZIZWFsQWN0aW9uSGFuZGxlclwiXG4gICAgICAgICAgICBbb25TdGVwQ2xpY2tIYW5kbGVyXT1cIm9uU3RlcENsaWNrSGFuZGxlclwiXG4gICAgICAgICAgICBbb25Kc29uUGF0aENvcGllZEhhbmRsZXJdPVwib25Kc29uUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgW2lzVXBsb2FkaW5nQmFzZWxpbmVdPVwiaXNVcGxvYWRpbmdCYXNlbGluZVwiXG4gICAgICAgICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkSXRlcmF0aW9uSWRdPVwic3RlcD8uc2VsZWN0ZWRJdGVyYXRpb25JZCB8fCAnJ1wiXG4gICAgICAgICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAgICAgICAoY29tcG9uZW50UmVhZHkpPVwibWFya1N0ZXBMb2FkZWQoc3RlcClcIj5cbiAgICAgICAgICA8L2NxYS1zdGVwLXJlbmRlcmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vc3RlcC1ncm91cC9zdGVwLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9zdGVwLWdyb3VwL3N0ZXAtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBdUQsTUFBTSxlQUFlLENBQUM7QUFFNUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFPM0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQW9EdkQsWUFBb0IsR0FBc0I7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVpqQyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBR2pDLCtDQUErQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUs5Qyx1REFBdUQ7UUFDdkQsaUJBQVksR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUl0QyxDQUFDO0lBRVEsUUFBUTtRQUNmLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUVELCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxL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QWpDLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RlcEdyb3VwQ29uZmlnLCBMb29wU3RlcENvbmZpZywgQ29uZGl0aW9uQnJhbmNoLCBFeGVjdXRpb25TdGVwQ29uZmlnLCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24gfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gSW5kaXZpZHVhbCBpbnB1dHNcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RTdGVwUmVzdWx0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0dXMhOiBTdGVwU3RhdHVzO1xuICBASW5wdXQoKSBkdXJhdGlvbiE6IG51bWJlcjtcbiAgQElucHV0KCkgdGltaW5nQnJlYWtkb3duPzogVGltaW5nQnJlYWtkb3duO1xuICBASW5wdXQoKSBleHBhbmRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyb3VwTmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcHMhOiBFeGVjdXRpb25TdGVwQ29uZmlnW107XG4gIEBJbnB1dCgpIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3RlcERlbGV0ZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gSGFuZGxlciBmdW5jdGlvbiB0byBwYXNzIGRvd24gdG8gbmVzdGVkIGNoaWxkIHN0ZXAgZ3JvdXBzIGZvciByZWN1cnNpdmUgZXhwYW5zaW9uXG4gIEBJbnB1dCgpIG9uRXhwYW5kSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBcbiAgLy8gSGFuZGxlciBmdW5jdGlvbnMgZm9yIG5lc3RlZCBjb21wb25lbnRzIChvcHRpb25hbCwgcGFzc2VkIGZyb20gcGFyZW50KVxuICBASW5wdXQoKSBnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gQ29uZGl0aW9uQnJhbmNoW107XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGlzU3RlcExvYWRpbmdIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RlcEV4cGFuZGVkSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyPzogKGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcbiAgQElucHV0KCkgZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQW5hbHl6ZUhhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblZpZXdGdWxsTG9nc0hhbmRsZXI/OiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblNlbGZIZWFsQWN0aW9uSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGdldEFwaUFzc2VydGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBmb3JtYXRBY3Rpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgb25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgQElucHV0KCkgb25TdGVwQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiAncmVxdWVzdEJvZHknIHwgJ3Jlc3BvbnNlQm9keScgfCAncmVxdWVzdEhlYWRlcnMnIHwgJ3Jlc3BvbnNlSGVhZGVycycgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZT86IGFueTtcbiAgQElucHV0KCkgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU/OiBhbnk7XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZztcblxuICAvLyBPdXRwdXQgZXZlbnQgZm9yIHdoZW4gdGhlIHN0ZXAgZ3JvdXAgZXhwYW5kc1xuICBAT3V0cHV0KCkgb25FeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBTdGVwR3JvdXBDb25maWc7XG4gIFxuICAvLyBUcmFjayB3aGljaCBzdGVwcyBhcmUgc3RpbGwgbG9hZGluZyB0byBzaG93IHNrZWxldG9uXG4gIGxvYWRpbmdTdGVwczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEJ1aWxkIGNvbmZpZyBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgLy8gRW5zdXJlIGlzRXhwYW5kZWQgaXMgc2V0IGNvcnJlY3RseSBhZnRlciBzdXBlci5uZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWRcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuY29uZmlnLnN0ZXBzICYmIHRoaXMuY29uZmlnLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNvbmZpZy5zdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAgICAgaWYgKHN0ZXBJZCkge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgY29uZmlnIHdoZW4gc3RlcHMgaW5wdXQgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydzdGVwcyddIHx8IGNoYW5nZXNbJ2V4cGFuZGVkJ10gfHwgY2hhbmdlc1snc3RhdHVzJ10gfHwgY2hhbmdlc1snZHVyYXRpb24nXSB8fCBjaGFuZ2VzWydncm91cE5hbWUnXSB8fCBjaGFuZ2VzWydzdGVwRGVsZXRlZCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgZXhwYW5kZWQgc3RhdGUgaWYgY2hhbmdlZFxuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gICAgXG4gICAgLy8gLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIHdoZW4gc3RlcHMgYXJlIGFkZGVkIGFuZCBzdGVwIGlzIGV4cGFuZGVkXG4gICAgLy8gaWYgKGNoYW5nZXNbJ3N0ZXBzJ10gJiYgdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuY29uZmlnLnN0ZXBzICYmIHRoaXMuY29uZmlnLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgLy8gICB0aGlzLmNvbmZpZy5zdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgIC8vICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAvLyAgICAgaWYgKHN0ZXBJZCkge1xuICAgIC8vICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgaWYgYWxyZWFkeSBleHBhbmRlZCB3aGVuIGNvbXBvbmVudCBpbml0aWFsaXplc1xuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLmNvbmZpZy5zdGVwcyAmJiB0aGlzLmNvbmZpZy5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgICAgdGhpcy5jb25maWcuc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBvciB1cGRhdGUgY29uZmlnIGZyb20gaW5kaXZpZHVhbCBpbnB1dHNcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgc3RlcE51bWJlcjogdGhpcy5zdGVwTnVtYmVyLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24sXG4gICAgICB0eXBlOiAnc3RlcC1ncm91cCcsXG4gICAgICBncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lLFxuICAgICAgc3RlcHM6IHRoaXMuc3RlcHMgfHwgW10sXG4gICAgICBzdGVwRGVsZXRlZDogdGhpcy5zdGVwRGVsZXRlZCxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIFN0ZXBHcm91cENvbmZpZztcbiAgfVxuXG4gIG92ZXJyaWRlIHRvZ2dsZShldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIHN1cGVyLnRvZ2dsZSgpO1xuICAgIGlmICh0aGlzLm9uU3RlcENsaWNrSGFuZGxlcikge1xuICAgICAgY29uc3Qgc3RlcFRvUGFzcyA9IHRoaXMuc3RlcCB8fCB0aGlzLmNvbmZpZztcbiAgICAgIGlmIChzdGVwVG9QYXNzKSB7XG4gICAgICAgIHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKHN0ZXBUb1Bhc3MsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRW1pdCBldmVudCB3aGVuIGV4cGFuZGluZyAodHJhbnNpdGlvbmluZyBmcm9tIGNvbGxhcHNlZCB0byBleHBhbmRlZClcbiAgICBpZiAoIXdhc0V4cGFuZGVkICYmIHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5vbkV4cGFuZC5lbWl0KCk7XG4gICAgICAvLyBJZiB0aGlzIHN0ZXAgaGFzIGNoaWxkcmVuIChoYXNDaGlsZCBpcyB0cnVlKSBhbmQgb25FeHBhbmRIYW5kbGVyIGlzIHByb3ZpZGVkLCBjYWxsIGl0IHRvIGZldGNoIGNoaWxkcmVuXG4gICAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIgJiYgdGhpcy5jb25maWcgJiYgdGhpcy5oYXNDaGlsZCkge1xuICAgICAgICAvLyBDcmVhdGUgYSBzdGVwIGNvbmZpZyBvYmplY3QgZm9yIHRoZSBoYW5kbGVyIHdpdGggaGFzQ2hpbGQgcHJvcGVydHlcbiAgICAgICAgY29uc3Qgc3RlcENvbmZpZyA9IHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICBleHBhbmRlZDogdHJ1ZSwgLy8gRW5zdXJlIGV4cGFuZGVkIGlzIHNldFxuICAgICAgICAgIHRlc3RTdGVwVHlwZTogKHRoaXMuY29uZmlnIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8ICdTVEVQX0dST1VQJyxcbiAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jb25maWcuc3RlcHMgfHwgW10sXG4gICAgICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH0gYXMgRXhlY3V0aW9uU3RlcENvbmZpZyAmIHsgaGFzQ2hpbGQ6IGJvb2xlYW47IHRlc3RTdGVwVHlwZT86IHN0cmluZzsgY2hpbGRyZW4/OiBhbnlbXTsgZXhwYW5kZWQ/OiBib29sZWFuIH07XG4gICAgICAgIHRoaXMub25FeHBhbmRIYW5kbGVyKHN0ZXBDb25maWcpO1xuICAgICAgfVxuICAgICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGZvciBhbGwgbmVzdGVkIHN0ZXBzXG4gICAgICBpZiAodGhpcy5jb25maWcuc3RlcHMgJiYgdGhpcy5jb25maWcuc3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNvbmZpZy5zdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIC8vIENsZWFyIGxvYWRpbmcgc3RhdGUgd2hlbiBjb2xsYXBzaW5nXG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgZXhwYW5kZWQgc3RhdGUgaXMgc3luY2VkIHdpdGggY29uZmlnXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZy5leHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZDtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIENoZWNrIGlmIGEgc3RlcCBpcyBzdGlsbCBsb2FkaW5nXG4gIGlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIHJldHVybiBzdGVwSWQgPyB0aGlzLmxvYWRpbmdTdGVwcy5oYXMoU3RyaW5nKHN0ZXBJZCkpIDogZmFsc2U7XG4gIH1cbiAgXG4gIC8vIE1hcmsgYSBzdGVwIGFzIGxvYWRlZCAoY2FsbGVkIHdoZW4gc3RlcC1yZW5kZXJlciBpcyByZWFkeSlcbiAgbWFya1N0ZXBMb2FkZWQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIGlmIChzdGVwSWQpIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmRlbGV0ZShTdHJpbmcoc3RlcElkKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIHN0ZXAgaXMgYSBzdGVwLWdyb3VwIHdpdGggaGFzQ2hpbGRcbiAgaXNOZXN0ZWRTdGVwR3JvdXBXaXRoQ2hpbGRyZW4oc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGVwLnR5cGUgPT09ICdzdGVwLWdyb3VwJyAmJiAhIShzdGVwIGFzIGFueSkuaGFzQ2hpbGQ7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBncm91cE5hbWUgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRHcm91cE5hbWUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChzdGVwIGFzIFN0ZXBHcm91cENvbmZpZykuZ3JvdXBOYW1lIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcHMgZnJvbSBzdGVwIGNvbmZpZ1xuICBnZXRTdGVwcyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogRXhlY3V0aW9uU3RlcENvbmZpZ1tdIHtcbiAgICAvLyBDaGVjayBib3RoIHN0ZXBzIGFuZCBjaGlsZHJlbiBwcm9wZXJ0aWVzIGZvciBjb21wYXRpYmlsaXR5XG4gICAgY29uc3Qgc3RlcEdyb3VwID0gc3RlcCBhcyBTdGVwR3JvdXBDb25maWc7XG4gICAgcmV0dXJuIHN0ZXBHcm91cC5zdGVwcyB8fCAoc3RlcCBhcyBhbnkpLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIHN0ZXAgaXMgYSBsb29wIHN0ZXBcbiAgaXNOZXN0ZWRMb29wU3RlcChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcFR5cGUgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCBzdGVwLnR5cGU7XG4gICAgcmV0dXJuIHN0ZXBUeXBlID09PSAnRk9SX0xPT1AnIHx8IHN0ZXBUeXBlID09PSAnV0hJTEVfTE9PUCcgfHwgc3RlcFR5cGUgPT09ICdsb29wJztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY2hlY2sgaWYgYSBzdGVwIGlzIGEgY29uZGl0aW9uIHN0ZXBcbiAgaXNOZXN0ZWRDb25kaXRpb25TdGVwKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IChzdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8IHN0ZXAudHlwZTtcbiAgICByZXR1cm4gc3RlcFR5cGUgPT09ICdDT05ESVRJT05fSUYnIHx8IHN0ZXBUeXBlID09PSAnQ09ORElUSU9OX0VMU0UnIHx8IFxuICAgICAgICAgICBzdGVwVHlwZSA9PT0gJ0NPTkRJVElPTl9FTFNFX0lGJyB8fCBzdGVwVHlwZSA9PT0gJ0NPTkRJVElPTl9FTFNFSUYnIHx8XG4gICAgICAgICAgIHN0ZXBUeXBlID09PSAnY29uZGl0aW9uJztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgdGl0bGVcbiAgZ2V0U3RlcFRpdGxlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmFjdGlvbiB8fCBzdGVwLnRpdGxlIHx8ICcnO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgc3RlcCBzdGF0dXNcbiAgZ2V0U3RlcFN0YXR1cyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogU3RlcFN0YXR1cyB7XG4gICAgY29uc3QgcmVzdWx0ID0gKHN0ZXAgYXMgYW55KS5yZXN1bHQ7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgcmVzdWx0TG93ZXIgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyZXN1bHRMb3dlciA9PT0gJ3N1Y2Nlc3MnIHx8IHJlc3VsdExvd2VyID09PSAncGFzc2VkJykge1xuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRMb3dlciA9PT0gJ2ZhaWx1cmUnIHx8IHJlc3VsdExvd2VyID09PSAnZmFpbGVkJykge1xuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncGVuZGluZycgfHwgcmVzdWx0TG93ZXIgPT09ICdub3QtZXhlY3V0ZWQnKSB7XG4gICAgICAgIHJldHVybiAncGVuZGluZyc7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdExvd2VyID09PSAncnVubmluZycpIHtcbiAgICAgICAgcmV0dXJuICdydW5uaW5nJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ZXAuc3RhdHVzIHx8ICdwZW5kaW5nJztcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0ZXAgZHVyYXRpb25cbiAgZ2V0U3RlcER1cmF0aW9uKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLmR1cmF0aW9uIHx8IHN0ZXAuZHVyYXRpb24gfHwgMDtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzIGZvciBsb29wIHN0ZXAgcHJvcGVydGllc1xuICBnZXRMb29wVHlwZShzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogJ2ZvcicgfCAnd2hpbGUnIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IChzdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8IHN0ZXAudHlwZTtcbiAgICBpZiAoc3RlcFR5cGUgPT09ICdGT1JfTE9PUCcgfHwgKHN0ZXAgYXMgTG9vcFN0ZXBDb25maWcpLmxvb3BUeXBlID09PSAnZm9yJykge1xuICAgICAgcmV0dXJuICdmb3InO1xuICAgIH0gZWxzZSBpZiAoc3RlcFR5cGUgPT09ICdXSElMRV9MT09QJyB8fCAoc3RlcCBhcyBMb29wU3RlcENvbmZpZykubG9vcFR5cGUgPT09ICd3aGlsZScpIHtcbiAgICAgIHJldHVybiAnd2hpbGUnO1xuICAgIH1cbiAgICByZXR1cm4gKHN0ZXAgYXMgTG9vcFN0ZXBDb25maWcpLmxvb3BUeXBlO1xuICB9XG5cbiAgZ2V0TG9vcEl0ZXJhdGlvbnMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGFueVtdIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLml0ZXJhdGlvbnMgfHwgW107XG4gIH1cblxuICBnZXRMb29wTmVzdGVkU3RlcHMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IEV4ZWN1dGlvblN0ZXBDb25maWdbXSB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5uZXN0ZWRTdGVwcyB8fCAoc3RlcCBhcyBhbnkpLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGNvbmRpdGlvbiBzdGVwIHByb3BlcnRpZXNcbiAgZ2V0Q29uZGl0aW9uU3RlcER1cmF0aW9uKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBudW1iZXIge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5nZXRTdGVwRHVyYXRpb24oc3RlcCk7XG4gICAgaWYgKHRoaXMuY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcihkdXJhdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxuXG4gIGdldENvbmRpdGlvblN0ZXBFeHBhbmRlZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiBzdGVwLmV4cGFuZGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcFRleHQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChzdGVwIGFzIGFueSkuYWN0aW9uIHx8IHN0ZXAudGl0bGUgfHwgJyc7XG4gIH1cblxuICBnZXRDb25kaXRpb25TdGVwQnJhbmNoZXMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IENvbmRpdGlvbkJyYW5jaFtdIHtcbiAgICBpZiAodGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcExvYWRpbmcoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlQ29uZGl0aW9uU3RlcEV4cGFuZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uRXhwYW5kSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVMb29wU3RlcEV4cGFuZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLm9uRXhwYW5kSGFuZGxlcihzdGVwKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVMb29wU3RlcEl0ZXJhdGlvbkNoYW5nZShzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCBpdGVyYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcEZhaWx1cmVEZXRhaWxzKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmICh0aGlzLmZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29uZGl0aW9uU3RlcFNlbGZIZWFsQW5hbHlzaXMoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHMgdG8gc2FmZWx5IGFjY2VzcyBMb29wU3RlcENvbmZpZyBwcm9wZXJ0aWVzXG4gIGdldExvb3BTZWxlY3RlZEl0ZXJhdGlvbklkKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxvb3BTdGVwID0gc3RlcCBhcyBMb29wU3RlcENvbmZpZztcbiAgICByZXR1cm4gbG9vcFN0ZXAuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgfVxuXG4gIGdldExvb3BEZWZhdWx0SXRlcmF0aW9uKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiAnZmlyc3QnIHwgJ2xhc3QnIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsb29wU3RlcCA9IHN0ZXAgYXMgTG9vcFN0ZXBDb25maWc7XG4gICAgcmV0dXJuIGxvb3BTdGVwLmRlZmF1bHRJdGVyYXRpb24gfHwgJ2xhc3QnO1xuICB9XG5cbiAgZ2V0TG9vcFNob3dWaWV3QWxsSXRlcmF0aW9ucyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9vcFN0ZXAgPSBzdGVwIGFzIExvb3BTdGVwQ29uZmlnO1xuICAgIHJldHVybiBsb29wU3RlcC5zaG93Vmlld0FsbEl0ZXJhdGlvbnM7XG4gIH1cblxuICBcbiAgLy8gQ2hlY2sgaWYgdGhpcyBzdGVwIGlzIGN1cnJlbnRseSBsb2FkaW5nIG5lc3RlZCBjaGlsZHJlblxuICBpc1N0ZXBMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyICYmIHRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcih0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZyB8fCBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mb250LWludGVyXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAnMXB4IHNvbGlkICNGM0Y0RjYnXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoJGV2ZW50KVwiPlxuICAgIFxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8IS0tIFN1Y2Nlc3MgLS0+XG4gICAgICA8c3ZnICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcydcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMC45MDA1IDQuOTk5OTlDMTEuMTI4OSA2LjEyMDY0IDEwLjk2NjIgNy4yODU3MSAxMC40Mzk1IDguMzAwODlDOS45MTI3OSA5LjMxNjA4IDkuMDU0IDEwLjEyIDguMDA2MzEgMTAuNTc4N0M2Ljk1ODYyIDExLjAzNzMgNS43ODUzNiAxMS4xMjI5IDQuNjgyMiAxMC44MjEyQzMuNTc5MDQgMTAuNTE5NSAyLjYxMjY1IDkuODQ4NjkgMS45NDQxOSA4LjkyMDcxQzEuMjc1NzMgNy45OTI3MiAwLjk0NTYxMSA2Ljg2MzYxIDEuMDA4ODggNS43MjE2OUMxLjA3MjE1IDQuNTc5NzYgMS41MjQ5OSAzLjQ5NDA0IDIuMjkxODggMi42NDU1OEMzLjA1ODc2IDEuNzk3MTIgNC4wOTMzNCAxLjIzNzIxIDUuMjIzMDggMS4wNTkyMkM2LjM1MjgyIDAuODgxMjMzIDcuNTA5NDQgMS4wOTU5MiA4LjUwMDA1IDEuNjY3NDlcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDUuNUw2IDdMMTEgMlwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8IS0tIEZhaWxlZCAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjRUY0NDQ0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNCA0TDggOE04IDRMNCA4XCIgc3Ryb2tlPVwiI0VGNDQ0NFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICAgIDxzdmcgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdwZW5kaW5nJ1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8IS0tIFJ1bm5pbmcgLS0+XG4gICAgICA8c3ZnICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiMzQjgyRjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjM0I4MkY2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgXG4gICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3NraXBwZWQnXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgc2tpcF9uZXh0XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvbGRlciBJY29uIC0tPlxuICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMS42NjY2IDExLjY2NjdDMTEuOTc2IDExLjY2NjcgMTIuMjcyOCAxMS41NDM3IDEyLjQ5MTYgMTEuMzI1QzEyLjcxMDQgMTEuMTA2MiAxMi44MzMzIDEwLjgwOTQgMTIuODMzMyAxMC41VjQuNjY2NjdDMTIuODMzMyA0LjM1NzI1IDEyLjcxMDQgNC4wNjA1IDEyLjQ5MTYgMy44NDE3MUMxMi4yNzI4IDMuNjIyOTIgMTEuOTc2IDMuNSAxMS42NjY2IDMuNUg3LjA1ODI5QzYuODYzMTggMy41MDE5MSA2LjY3MDY5IDMuNDU0ODYgNi40OTg0NyAzLjM2MzE0QzYuMzI2MjQgMy4yNzE0MiA2LjE3OTc3IDMuMTM3OTcgNi4wNzI0NiAyLjk3NUw1LjU5OTk2IDIuMjc1QzUuNDkzNzMgMi4xMTM2OSA1LjM0OTExIDEuOTgxMjggNS4xNzkwOCAxLjg4OTY1QzUuMDA5MDYgMS43OTgwMiA0LjgxODk0IDEuNzUwMDMgNC42MjU3OSAxLjc1SDIuMzMzMjlDMi4wMjM4NyAxLjc1IDEuNzI3MTMgMS44NzI5MiAxLjUwODMzIDIuMDkxNzFDMS4yODk1NCAyLjMxMDUgMS4xNjY2MyAyLjYwNzI1IDEuMTY2NjMgMi45MTY2N1YxMC41QzEuMTY2NjMgMTAuODA5NCAxLjI4OTU0IDExLjEwNjIgMS41MDgzMyAxMS4zMjVDMS43MjcxMyAxMS41NDM3IDIuMDIzODcgMTEuNjY2NyAyLjMzMzI5IDExLjY2NjdIMTEuNjY2NlpcIiBmaWxsPVwiI0VGRjZGRlwiIHN0cm9rZT1cIiM2MEE1RkFcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIE51bWJlciBhbmQgVGl0bGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mb250LWJvbGQgY3FhLWZsZXgtMSBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XSBjcWEtZm9udC1pbnRlciBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgPHNwYW4+e3sgY29uZmlnPy5zdGVwTnVtYmVyIH19LiBTdGVwIGdyb3VwOiB7eyBjb25maWcuZ3JvdXBOYW1lIH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuc3RlcERlbGV0ZWRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjQyMzE4XSBjcWEtYmctWyNGRUYzRjJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFRTRFMl1cIj5cbiAgICAgICAgRGVsZXRlZFxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihjb25maWcuZHVyYXRpb24pIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzRXhwYW5kZWRcIj5cbiAgICA8IS0tIE5lc3RlZCBTdGVwcyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtbXQtMiBjcWEtbWwtWzE4cHhdXCI+XG4gICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIGZvciBuZXN0ZWQgc3RlcHMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQgJiYgKCFjb25maWcuc3RlcHMgfHwgY29uZmlnLnN0ZXBzLmxlbmd0aCA9PT0gMCkgJiYgaXNTdGVwTG9hZGluZygpXCIgXG4gICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB5LTIgY3FhLXB4LTNcIj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjI1XCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxQTYgNiAwIDAgMSAxMyA3XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdIGNxYS10ZXh0LVsjNzM3MzczXVwiPkxvYWRpbmcgbmVzdGVkIHN0ZXBzLi4uPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0ZXAgb2YgY29uZmlnLnN0ZXBzXCI+XG4gICAgICAgIDwhLS0gV3JhcHBlciB0byBzaG93IHNrZWxldG9uIHdoaWxlIHN0ZXAtcmVuZGVyZXIgaXMgbG9hZGluZyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1zdGVwLXJlbmRlcmVyLXdyYXBwZXJcIiBbY2xhc3MubG9hZGVkXT1cIiFpc05lc3RlZFN0ZXBMb2FkaW5nKHN0ZXApXCI+XG4gICAgICAgICAgPCEtLSBMb2FkaW5nIHNrZWxldG9uIG92ZXJsYXkgLS0+XG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiIGNsYXNzPVwiY3FhLXN0ZXAtc2tlbGV0b24tb3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1zdGVwLXNrZWxldG9uIGNxYS1teC0zIGNxYS1teS0xXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwhLS0gVXNlIHN0ZXAtcmVuZGVyZXIgZm9yIGFsbCBuZXN0ZWQgc3RlcHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIC0tPlxuICAgICAgICAgIDwhLS0gVGhlIHN0ZXAtcmVuZGVyZXIgd2lsbCBkeW5hbWljYWxseSBsb2FkIHRoZSBhcHByb3ByaWF0ZSBjb21wb25lbnQgYW5kIHBhc3MgaGFuZGxlcnMgLS0+XG4gICAgICAgICAgPGNxYS1zdGVwLXJlbmRlcmVyIFxuICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICBbb25FeHBhbmRIYW5kbGVyXT1cIm9uRXhwYW5kSGFuZGxlclwiXG4gICAgICAgICAgICBbZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyXT1cImdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlclwiXG4gICAgICAgICAgICBbb25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXJdPVwib25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXJcIlxuICAgICAgICAgICAgW2lzU3RlcExvYWRpbmdIYW5kbGVyXT1cImlzU3RlcExvYWRpbmdIYW5kbGVyXCJcbiAgICAgICAgICAgIFtpc1N0ZXBFeHBhbmRlZEhhbmRsZXJdPVwiaXNTdGVwRXhwYW5kZWRIYW5kbGVyXCJcbiAgICAgICAgICAgIFtjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXT1cImNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXJcIlxuICAgICAgICAgICAgW2Zvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcl09XCJmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXJcIlxuICAgICAgICAgICAgW2dldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyXT1cImdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXJdPVwiZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtnZXRBcGlBc3NlcnRpb25zSGFuZGxlcl09XCJnZXRBcGlBc3NlcnRpb25zSGFuZGxlclwiXG4gICAgICAgICAgICBbZm9ybWF0QWN0aW9uc0hhbmRsZXJdPVwiZm9ybWF0QWN0aW9uc0hhbmRsZXJcIlxuICAgICAgICAgICAgW29uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXT1cIm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyXT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXJcIlxuICAgICAgICAgICAgW29uVXBsb2FkQmFzZWxpbmVIYW5kbGVyXT1cIm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvbkFuYWx5emVIYW5kbGVyXT1cIm9uQW5hbHl6ZUhhbmRsZXJcIlxuICAgICAgICAgICAgW29uVmlld0Z1bGxMb2dzSGFuZGxlcl09XCJvblZpZXdGdWxsTG9nc0hhbmRsZXJcIlxuICAgICAgICAgICAgW29uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXT1cIm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyXCJcbiAgICAgICAgICAgIFtvblN0ZXBDbGlja0hhbmRsZXJdPVwib25TdGVwQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgICAgICAgIFtpc01ha2luZ0N1cnJlbnRCYXNlbGluZV09XCJpc01ha2luZ0N1cnJlbnRCYXNlbGluZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVyYXRpb25JZF09XCJzdGVwPy5zZWxlY3RlZEl0ZXJhdGlvbklkIHx8ICcnXCJcbiAgICAgICAgICAgIFtpc0xpdmVdPVwiaXNMaXZlXCJcbiAgICAgICAgICAgIChjb21wb25lbnRSZWFkeSk9XCJtYXJrU3RlcExvYWRlZChzdGVwKVwiPlxuICAgICAgICAgIDwvY3FhLXN0ZXAtcmVuZGVyZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=