@cqa-lib/cqa-ui 1.1.527 → 1.1.529

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 (21) hide show
  1. package/esm2020/lib/dialog/dialog.component.mjs +15 -3
  2. package/esm2020/lib/dialog/dialog.models.mjs +1 -1
  3. package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +22 -7
  4. package/esm2020/lib/templates/modular-table-template/dialogs/move-to-folder-dialog.component.mjs +38 -13
  5. package/esm2020/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.mjs +79 -87
  6. package/esm2020/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.mjs +21 -4
  7. package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +3 -1
  8. package/esm2020/lib/templates/modular-table-template/modular-table-template.models.mjs +3 -1
  9. package/fesm2015/cqa-lib-cqa-ui.mjs +169 -106
  10. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  11. package/fesm2020/cqa-lib-cqa-ui.mjs +169 -104
  12. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  13. package/lib/dialog/dialog.component.d.ts +1 -0
  14. package/lib/dialog/dialog.models.d.ts +4 -0
  15. package/lib/step-builder/step-builder-group/step-builder-group.component.d.ts +10 -1
  16. package/lib/templates/modular-table-template/dialogs/move-to-folder-dialog.component.d.ts +12 -2
  17. package/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.d.ts +23 -30
  18. package/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.d.ts +4 -0
  19. package/lib/templates/modular-table-template/modular-table-template.models.d.ts +2 -0
  20. package/package.json +1 -1
  21. package/styles.css +1 -1
@@ -89,6 +89,18 @@ export class DialogComponent {
89
89
  return 'filled';
90
90
  }
91
91
  }
92
+ isButtonDisabled(button) {
93
+ const d = button.disabled;
94
+ if (typeof d === 'function') {
95
+ try {
96
+ return !!d(this.dialogRef);
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ return !!d;
103
+ }
92
104
  buttonHostClasses(button) {
93
105
  const role = this.normalizeRole(button.role);
94
106
  if (role === 'warn') {
@@ -116,12 +128,12 @@ export class DialogComponent {
116
128
  }
117
129
  }
118
130
  DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
119
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DialogComponent, selector: "cqa-dialog", host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-flex cqa-w-full cqa-justify-center cqa-px-4 sm:cqa-px-6\">\n <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-5\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-dialog\">\n {{ config.title }}\n </h2>\n\n <p *ngIf=\"config.description\" class=\"cqa-text-sm cqa-leading-6 cqa-text-dialog-secondary\">\n {{ config.description }}\n </p>\n\n <div *ngIf=\"config.warning\"\n class=\"cqa-rounded-xl cqa-border cqa-border-red-200 cqa-bg-red-50 cqa-px-4 cqa-py-3 cqa-text-sm cqa-leading-5 cqa-text-red-700\">\n {{ config.warning }}\n </div>\n </div>\n\n <div class=\"cqa-text-sm cqa-text-dialog\" [class.hidden]=\"!contentAttached\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"cqa-mt-4 cqa-flex cqa-flex-wrap cqa-gap-3\" [ngClass]=\"buttonAlignmentClass\">\n <cqa-button *ngFor=\"let button of config.buttons\" type=\"button\" [variant]=\"buttonVariant(button)\"\n [ngClass]=\"buttonHostClasses(button)\" (clicked)=\"onButtonClick(button)\">\n {{ button.label }}\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
131
+ DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DialogComponent, selector: "cqa-dialog", host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-flex cqa-w-full cqa-justify-center cqa-px-4 sm:cqa-px-6\">\n <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-5\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-dialog\">\n {{ config.title }}\n </h2>\n\n <p *ngIf=\"config.description\" class=\"cqa-text-sm cqa-leading-6 cqa-text-dialog-secondary\">\n {{ config.description }}\n </p>\n\n <div *ngIf=\"config.warning\"\n class=\"cqa-rounded-xl cqa-border cqa-border-red-200 cqa-bg-red-50 cqa-px-4 cqa-py-3 cqa-text-sm cqa-leading-5 cqa-text-red-700\">\n {{ config.warning }}\n </div>\n </div>\n\n <div class=\"cqa-text-sm cqa-text-dialog\" [class.hidden]=\"!contentAttached\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"cqa-mt-4 cqa-flex cqa-flex-wrap cqa-gap-3\" [ngClass]=\"buttonAlignmentClass\">\n <cqa-button *ngFor=\"let button of config.buttons\" type=\"button\" [variant]=\"buttonVariant(button)\"\n [disabled]=\"isButtonDisabled(button)\"\n [ngClass]=\"buttonHostClasses(button)\" (clicked)=\"onButtonClick(button)\">\n {{ button.label }}\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
120
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogComponent, decorators: [{
121
133
  type: Component,
122
- args: [{ selector: 'cqa-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-flex cqa-w-full cqa-justify-center cqa-px-4 sm:cqa-px-6\">\n <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-5\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-dialog\">\n {{ config.title }}\n </h2>\n\n <p *ngIf=\"config.description\" class=\"cqa-text-sm cqa-leading-6 cqa-text-dialog-secondary\">\n {{ config.description }}\n </p>\n\n <div *ngIf=\"config.warning\"\n class=\"cqa-rounded-xl cqa-border cqa-border-red-200 cqa-bg-red-50 cqa-px-4 cqa-py-3 cqa-text-sm cqa-leading-5 cqa-text-red-700\">\n {{ config.warning }}\n </div>\n </div>\n\n <div class=\"cqa-text-sm cqa-text-dialog\" [class.hidden]=\"!contentAttached\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"cqa-mt-4 cqa-flex cqa-flex-wrap cqa-gap-3\" [ngClass]=\"buttonAlignmentClass\">\n <cqa-button *ngFor=\"let button of config.buttons\" type=\"button\" [variant]=\"buttonVariant(button)\"\n [ngClass]=\"buttonHostClasses(button)\" (clicked)=\"onButtonClick(button)\">\n {{ button.label }}\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
134
+ args: [{ selector: 'cqa-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-flex cqa-w-full cqa-justify-center cqa-px-4 sm:cqa-px-6\">\n <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-5\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-dialog\">\n {{ config.title }}\n </h2>\n\n <p *ngIf=\"config.description\" class=\"cqa-text-sm cqa-leading-6 cqa-text-dialog-secondary\">\n {{ config.description }}\n </p>\n\n <div *ngIf=\"config.warning\"\n class=\"cqa-rounded-xl cqa-border cqa-border-red-200 cqa-bg-red-50 cqa-px-4 cqa-py-3 cqa-text-sm cqa-leading-5 cqa-text-red-700\">\n {{ config.warning }}\n </div>\n </div>\n\n <div class=\"cqa-text-sm cqa-text-dialog\" [class.hidden]=\"!contentAttached\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"cqa-mt-4 cqa-flex cqa-flex-wrap cqa-gap-3\" [ngClass]=\"buttonAlignmentClass\">\n <cqa-button *ngFor=\"let button of config.buttons\" type=\"button\" [variant]=\"buttonVariant(button)\"\n [disabled]=\"isButtonDisabled(button)\"\n [ngClass]=\"buttonHostClasses(button)\" (clicked)=\"onButtonClick(button)\">\n {{ button.label }}\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
123
135
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { portalOutlet: [{
124
136
  type: ViewChild,
125
137
  args: [CdkPortalOutlet, { static: true }]
126
138
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQW1CLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVl2RixNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUE2QixnQkFBa0MsRUFBbUIsR0FBc0I7UUFBM0UscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFtQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUZ4RyxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUVtRixDQUFDO0lBRTVHLGNBQWMsQ0FBQyxRQUE4QixFQUFFLE9BQWlDO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELE1BQU0sZUFBZSxHQUNuQixPQUFPO1lBQ1A7Z0JBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTtnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTthQUN4QixDQUFDO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBbUM7UUFDakQsSUFBSSxDQUFDLElBQUks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QUM7SUFDWixDQUFDO0lBRU8sbUJBQW1CLENBQUMsU0FBZ0M7UUFDMUQsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxNQUFNO2dCQUNULE9BQU8sbUJBQW1CLENBQUM7WUFDN0IsS0FBSyxRQUFRO2dCQUNYLE9BQU8sb0JBQW9CLENBQUM7WUFDOUIsS0FBSyxPQUFPLENBQUM7WUFDYjtnQkFDRSxPQUFPLGlCQUFpQixDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBd0I7UUFDNUMsT0FBTyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7NEdBeklVLGVBQWU7Z0dBQWYsZUFBZSx5SUFFZixlQUFlLDhEQ3ZCNUIsbzRDQWdDTTsyRkRYTyxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7dUlBSWdCLFlBQVk7c0JBQXpELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrUG9ydGFsT3V0bGV0LCBDb21wb25lbnRQb3J0YWwsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaWFsb2dCdXR0b25BbGlnbm1lbnQsIERpYWxvZ0J1dHRvbkNvbmZpZywgRGlhbG9nQ29uZmlnLCBEaWFsb2dDb250ZW50Q29uZmlnIH0gZnJvbSAnLi9kaWFsb2cubW9kZWxzJztcbmltcG9ydCB7IEJ1dHRvblZhcmlhbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudDxUUmVzdWx0ID0gdW5rbm93bj4ge1xuXG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBwb3J0YWxPdXRsZXQ/OiBDZGtQb3J0YWxPdXRsZXQ7XG5cbiAgY29uZmlnITogRGlhbG9nQ29uZmlnPERpYWxvZ0NvbnRlbnRDb25maWcsIFRSZXN1bHQ+O1xuICBkaWFsb2dSZWYhOiBEaWFsb2dSZWY8VFJlc3VsdD47XG5cbiAgY29udGVudEF0dGFjaGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgYXR0YWNoVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+LCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9ydGFsT3V0bGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVDb250ZXh0ID1cbiAgICAgIGNvbnRleHQgPz9cbiAgICAgIHtcbiAgICAgICAgJGltcGxpY2l0OiB0aGlzLmNvbmZpZz8uZGF0YSxcbiAgICAgICAgZGF0YTogdGhpcy5jb25maWc/LmRhdGEsXG4gICAgICB9O1xuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0ZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmLCB0ZW1wbGF0ZUNvbnRleHQpO1xuICAgIHRoaXMucG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHBvcnRhbCk7XG4gICAgdGhpcy5tYXJrQ29udGVudEF0dGFjaGVkKCk7XG4gIH1cblxuICBhdHRhY2hDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRQb3J0YWw8dW5rbm93bj4pOiBDb21wb25lbnRSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wb3J0YWxPdXRsZXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCk7XG4gICAgdGhpcy5tYXJrQ29udGVudEF0dGFjaGVkKCk7XG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIGFzeW5jIG9uQnV0dG9uQ2xpY2soYnV0dG9uOiBEaWFsb2dCdXR0b25Db25maWc8VFJlc3VsdD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbG9zZU9uQ2xpY2sgPSBidXR0b24uY2xvc2VPbkNsaWNrID8/IHRydWU7XG4gICAgbGV0IGhhbmRsZXJSZXN1bHQ6IFRSZXN1bHQgfCBmYWxzZSB8IHZvaWQgfCBQcm9taXNlPFRSZXN1bHQgfCBmYWxzZSB8IHZvaWQ+ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGJ1dHRvbi5oYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyUmVzdWx0ID0gYnV0dG9uLmhhbmRsZXIodGhpcy5kaWFsb2dSZWYpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkID0gaGFuZGxlclJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBhd2FpdCBoYW5kbGVyUmVzdWx0IDogaGFuZGxlclJlc3VsdDtcblxuICAgIGlmICghY2xvc2VPbkNsaWNrIHx8IHJlc29sdmVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc29sdmVkIGFzIFRSZXN1bHQgfCB1bmRlZmluZWQpO1xuICB9XG5cbiAgZ2V0IGJ1dHRvbkFsaWdubWVudENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy5jb25maWc/LmJ1dHRvbkFsaWdubWVudCA/PyAncmlnaHQnO1xuICAgIHJldHVybiB0aGlzLm1hcEFsaWdubWVudFRvQ2xhc3MoYWxpZ25tZW50KTtcbiAgfVxuXG4gIGdldCBwYW5lbENsYXNzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbXG4gICAgICAnY3FhLXJlbGF0aXZlJyxcbiAgICAgICdjcWEtdy1mdWxsJyxcbiAgICAgICdjcWEtYmctd2hpdGUnLFxuICAgICAgJ2NxYS1yb3VuZGVkLTJ4bCcsXG4gICAgICAnY3FhLXNoYWRvdy1tZCcsXG4gICAgICAnY3FhLWJvcmRlcicsXG4gICAgICAnY3FhLWJvcmRlci1ib3JkZXItZGVmYXVsdCcsXG4gICAgICAnY3FhLXAtNicsXG4gICAgICAnY3FhLXRleHQtbGVmdCcsXG4gICAgXTtcblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY29uZmlnPy5wYW5lbENsYXNzO1xuXG4gICAgaWYgKCFjdXN0b20pIHtcbiAgICAgIHJldHVybiBiYXNlQ2xhc3NlcztcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXN0b20pID8gWy4uLmJhc2VDbGFzc2VzLCAuLi5jdXN0b21dIDogWy4uLmJhc2VDbGFzc2VzLCBjdXN0b21dO1xuICB9XG5cbiAgZ2V0IHBhbmVsU3R5bGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5jb25maWc/LndpZHRoLFxuICAgICAgbWF4V2lkdGg6IHRoaXMuY29uZmlnPy5tYXhXaWR0aCA/PyAnNDgwcHgnLFxuICAgIH07XG4gIH1cblxuICBidXR0b25WYXJpYW50KGJ1dHRvbjogRGlhbG9nQnV0dG9uQ29uZmlnPFRSZXN1bHQ+KTogQnV0dG9uVmFyaWFudCB7XG4gICAgY29uc3Qgcm9sZSA9IHRoaXMubm9ybWFsaXplUm9sZShidXR0b24ucm9sZSk7XG5cbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgJ3NlY29uZGFyeSc6XG4gICAgICAgIHJldHVybiAnb3V0bGluZWQnO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICBjYXNlICd0b25hbCc6XG4gICAgICAgIHJldHVybiAndG9uYWwnO1xuICAgICAgY2FzZSAnZWxldmF0ZWQnOlxuICAgICAgICByZXR1cm4gJ2VsZXZhdGVkJztcbiAgICAgIGNhc2UgJ2ZpbGxlZCc6XG4gICAgICBjYXNlICdwcmltYXJ5JzpcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmaWxsZWQnO1xuICAgIH1cbiAgfVxuXG4gIGJ1dHRvbkhvc3RDbGFzc2VzKGJ1dHRvbjogRGlhbG9nQnV0dG9uQ29uZmlnPFRSZXN1bHQ+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJvbGUgPSB0aGlzLm5vcm1hbGl6ZVJvbGUoYnV0dG9uLnJvbGUpO1xuXG4gICAgaWYgKHJvbGUgPT09ICd3YXJuJykge1xuICAgICAgcmV0dXJuIFsnY3FhLWRpYWxvZy1idG4td2FybiddO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQWxpZ25tZW50VG9DbGFzcyhhbGlnbm1lbnQ6IERpYWxvZ0J1dHRvbkFsaWdubWVudCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChhbGlnbm1lbnQpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICByZXR1cm4gJ2NxYS1qdXN0aWZ5LXN0YXJ0JztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiAnY3FhLWp1c3RpZnktY2VudGVyJztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLWp1c3RpZnktZW5kJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb250ZW50QXR0YWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50QXR0YWNoZWQgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVSb2xlKHJvbGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChyb2xlID8/ICdzZWNvbmRhcnknKS50cmltKCkuc3BsaXQoL1xccysvKVswXTtcbiAgfVxufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXB4LTQgc206Y3FhLXB4LTZcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3NMaXN0XCIgW25nU3R5bGVdPVwicGFuZWxTdHlsZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZGlhbG9nXCI+XG4gICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgPHAgKm5nSWY9XCJjb25maWcuZGVzY3JpcHRpb25cIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLTYgY3FhLXRleHQtZGlhbG9nLXNlY29uZGFyeVwiPlxuICAgICAgICAgICAge3sgY29uZmlnLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy53YXJuaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXJvdW5kZWQteGwgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXJlZC0yMDAgY3FhLWJnLXJlZC01MCBjcWEtcHgtNCBjcWEtcHktMyBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy01IGNxYS10ZXh0LXJlZC03MDBcIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy53YXJuaW5nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1kaWFsb2dcIiBbY2xhc3MuaGlkZGVuXT1cIiFjb250ZW50QXR0YWNoZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbXQtNCBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtM1wiIFtuZ0NsYXNzXT1cImJ1dHRvbkFsaWdubWVudENsYXNzXCI+XG4gICAgICAgICAgPGNxYS1idXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBjb25maWcuYnV0dG9uc1wiIHR5cGU9XCJidXR0b25cIiBbdmFyaWFudF09XCJidXR0b25WYXJpYW50KGJ1dHRvbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiYnV0dG9uSG9zdENsYXNzZXMoYnV0dG9uKVwiIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiPlxuICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQW1CLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVl2RixNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUE2QixnQkFBa0MsRUFBbUIsR0FBc0I7UUFBM0UscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFtQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUZ4RyxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUVtRixDQUFDO0lBRTVHLGNBQWMsQ0FBQyxRQUE4QixFQUFFLE9BQWlDO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELE1BQU0sZUFBZSxHQUNuQixPQUFPO1lBQ1A7Z0JBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTtnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTthQUN4QixDQUFDO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBbUM7UUFDakQsSUFBSSxDQUFDLElBQUks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bnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IERpYWxvZ0J1dHRvbkFsaWdubWVudCwgRGlhbG9nQnV0dG9uQ29uZmlnLCBEaWFsb2dDb25maWcsIERpYWxvZ0NvbnRlbnRDb25maWcgfSBmcm9tICcuL2RpYWxvZy5tb2RlbHMnO1xuaW1wb3J0IHsgQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4vZGlhbG9nLXJlZic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50PFRSZXN1bHQgPSB1bmtub3duPiB7XG5cbiAgQFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIHBvcnRhbE91dGxldD86IENka1BvcnRhbE91dGxldDtcblxuICBjb25maWchOiBEaWFsb2dDb25maWc8RGlhbG9nQ29udGVudENvbmZpZywgVFJlc3VsdD47XG4gIGRpYWxvZ1JlZiE6IERpYWxvZ1JlZjxUUmVzdWx0PjtcblxuICBjb250ZW50QXR0YWNoZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBhdHRhY2hUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4sIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3J0YWxPdXRsZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZUNvbnRleHQgPVxuICAgICAgY29udGV4dCA/P1xuICAgICAge1xuICAgICAgICAkaW1wbGljaXQ6IHRoaXMuY29uZmlnPy5kYXRhLFxuICAgICAgICBkYXRhOiB0aGlzLmNvbmZpZz8uZGF0YSxcbiAgICAgIH07XG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYsIHRlbXBsYXRlQ29udGV4dCk7XG4gICAgdGhpcy5wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcbiAgICB0aGlzLm1hcmtDb250ZW50QXR0YWNoZWQoKTtcbiAgfVxuXG4gIGF0dGFjaENvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFBvcnRhbDx1bmtub3duPik6IENvbXBvbmVudFJlZjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnBvcnRhbE91dGxldCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnBvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwoY29tcG9uZW50KTtcbiAgICB0aGlzLm1hcmtDb250ZW50QXR0YWNoZWQoKTtcbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICB9XG5cbiAgYXN5bmMgb25CdXR0b25DbGljayhidXR0b246IERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsb3NlT25DbGljayA9IGJ1dHRvbi5jbG9zZU9uQ2xpY2sgPz8gdHJ1ZTtcbiAgICBsZXQgaGFuZGxlclJlc3VsdDogVFJlc3VsdCB8IGZhbHNlIHwgdm9pZCB8IFByb21pc2U8VFJlc3VsdCB8IGZhbHNlIHwgdm9pZD4gPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoYnV0dG9uLmhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXJSZXN1bHQgPSBidXR0b24uaGFuZGxlcih0aGlzLmRpYWxvZ1JlZik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBoYW5kbGVyUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSA/IGF3YWl0IGhhbmRsZXJSZXN1bHQgOiBoYW5kbGVyUmVzdWx0O1xuXG4gICAgaWYgKCFjbG9zZU9uQ2xpY2sgfHwgcmVzb2x2ZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzb2x2ZWQgYXMgVFJlc3VsdCB8IHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXQgYnV0dG9uQWxpZ25tZW50Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLmNvbmZpZz8uYnV0dG9uQWxpZ25tZW50ID8/ICdyaWdodCc7XG4gICAgcmV0dXJuIHRoaXMubWFwQWxpZ25tZW50VG9DbGFzcyhhbGlnbm1lbnQpO1xuICB9XG5cbiAgZ2V0IHBhbmVsQ2xhc3NMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9IFtcbiAgICAgICdjcWEtcmVsYXRpdmUnLFxuICAgICAgJ2NxYS13LWZ1bGwnLFxuICAgICAgJ2NxYS1iZy13aGl0ZScsXG4gICAgICAnY3FhLXJvdW5kZWQtMnhsJyxcbiAgICAgICdjcWEtc2hhZG93LW1kJyxcbiAgICAgICdjcWEtYm9yZGVyJyxcbiAgICAgICdjcWEtYm9yZGVyLWJvcmRlci1kZWZhdWx0JyxcbiAgICAgICdjcWEtcC02JyxcbiAgICAgICdjcWEtdGV4dC1sZWZ0JyxcbiAgICBdO1xuXG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy5jb25maWc/LnBhbmVsQ2xhc3M7XG5cbiAgICBpZiAoIWN1c3RvbSkge1xuICAgICAgcmV0dXJuIGJhc2VDbGFzc2VzO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1c3RvbSkgPyBbLi4uYmFzZUNsYXNzZXMsIC4uLmN1c3RvbV0gOiBbLi4uYmFzZUNsYXNzZXMsIGN1c3RvbV07XG4gIH1cblxuICBnZXQgcGFuZWxTdHlsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLmNvbmZpZz8ud2lkdGgsXG4gICAgICBtYXhXaWR0aDogdGhpcy5jb25maWc/Lm1heFdpZHRoID8/ICc0ODBweCcsXG4gICAgfTtcbiAgfVxuXG4gIGJ1dHRvblZhcmlhbnQoYnV0dG9uOiBEaWFsb2dCdXR0b25Db25maWc8VFJlc3VsdD4pOiBCdXR0b25WYXJpYW50IHtcbiAgICBjb25zdCByb2xlID0gdGhpcy5ub3JtYWxpemVSb2xlKGJ1dHRvbi5yb2xlKTtcblxuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSAnc2Vjb25kYXJ5JzpcbiAgICAgICAgcmV0dXJuICdvdXRsaW5lZCc7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgIGNhc2UgJ3RvbmFsJzpcbiAgICAgICAgcmV0dXJuICd0b25hbCc7XG4gICAgICBjYXNlICdlbGV2YXRlZCc6XG4gICAgICAgIHJldHVybiAnZWxldmF0ZWQnO1xuICAgICAgY2FzZSAnZmlsbGVkJzpcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZpbGxlZCc7XG4gICAgfVxuICB9XG5cbiAgaXNCdXR0b25EaXNhYmxlZChidXR0b246IERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGQgPSBidXR0b24uZGlzYWJsZWQ7XG4gICAgaWYgKHR5cGVvZiBkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkgeyByZXR1cm4gISFkKHRoaXMuZGlhbG9nUmVmKTsgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cbiAgICByZXR1cm4gISFkO1xuICB9XG5cbiAgYnV0dG9uSG9zdENsYXNzZXMoYnV0dG9uOiBEaWFsb2dCdXR0b25Db25maWc8VFJlc3VsdD4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgcm9sZSA9IHRoaXMubm9ybWFsaXplUm9sZShidXR0b24ucm9sZSk7XG5cbiAgICBpZiAocm9sZSA9PT0gJ3dhcm4nKSB7XG4gICAgICByZXR1cm4gWydjcWEtZGlhbG9nLWJ0bi13YXJuJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBBbGlnbm1lbnRUb0NsYXNzKGFsaWdubWVudDogRGlhbG9nQnV0dG9uQWxpZ25tZW50KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHJldHVybiAnY3FhLWp1c3RpZnktc3RhcnQnO1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuICdjcWEtanVzdGlmeS1jZW50ZXInO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtanVzdGlmeS1lbmQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRlbnRBdHRhY2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnRBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVJvbGUocm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHJvbGUgPz8gJ3NlY29uZGFyeScpLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzBdO1xuICB9XG59XG5cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHgtNCBzbTpjcWEtcHgtNlwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwicGFuZWxDbGFzc0xpc3RcIiBbbmdTdHlsZV09XCJwYW5lbFN0eWxlc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1kaWFsb2dcIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICA8cCAqbmdJZj1cImNvbmZpZy5kZXNjcmlwdGlvblwiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctNiBjcWEtdGV4dC1kaWFsb2ctc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICB7eyBjb25maWcuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLndhcm5pbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcm91bmRlZC14bCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItcmVkLTIwMCBjcWEtYmctcmVkLTUwIGNxYS1weC00IGNxYS1weS0zIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLTUgY3FhLXRleHQtcmVkLTcwMFwiPlxuICAgICAgICAgICAge3sgY29uZmlnLndhcm5pbmcgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LWRpYWxvZ1wiIFtjbGFzcy5oaWRkZW5dPVwiIWNvbnRlbnRBdHRhY2hlZFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tdC00IGNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0zXCIgW25nQ2xhc3NdPVwiYnV0dG9uQWxpZ25tZW50Q2xhc3NcIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGNvbmZpZy5idXR0b25zXCIgdHlwZT1cImJ1dHRvblwiIFt2YXJpYW50XT1cImJ1dHRvblZhcmlhbnQoYnV0dG9uKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZChidXR0b24pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImJ1dHRvbkhvc3RDbGFzc2VzKGJ1dHRvbilcIiAoY2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIj5cbiAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG5leHBvcnQgdHlwZSBEaWFsb2dCdXR0b25Sb2xlID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnd2FybicgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0ID0gdW5rbm93bj4ge1xuICBsYWJlbDogc3RyaW5nO1xuICByb2xlPzogRGlhbG9nQnV0dG9uUm9sZTtcbiAgaGFuZGxlcj86IChkaWFsb2dSZWY6IERpYWxvZ1JlZjxUUmVzdWx0PikgPT4gVFJlc3VsdCB8IHZvaWQgfCBQcm9taXNlPFRSZXN1bHQgfCB2b2lkPjtcbiAgY2xvc2VPbkNsaWNrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGlhbG9nQnV0dG9uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRGlhbG9nQ29udGVudDxUQ29udGV4dCA9IGFueT4ge1xuICB0eXBlOiAndGVtcGxhdGUnO1xuICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8VENvbnRleHQ+O1xuICBjb250ZXh0PzogVENvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGlhbG9nQ29udGVudDxUSW5wdXRzID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICB0eXBlOiAnY29tcG9uZW50JztcbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuICBpbnB1dHM/OiBUSW5wdXRzO1xufVxuXG5leHBvcnQgdHlwZSBEaWFsb2dDb250ZW50Q29uZmlnID1cbiAgfCBUZW1wbGF0ZURpYWxvZ0NvbnRlbnRcbiAgfCBDb21wb25lbnREaWFsb2dDb250ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0NvbmZpZzxUQ29udGVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRDb25maWcgPSBEaWFsb2dDb250ZW50Q29uZmlnLCBUUmVzdWx0ID0gdW5rbm93bj4ge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgd2FybmluZz86IHN0cmluZztcbiAgY29udGVudD86IFRDb250ZW50O1xuICBkYXRhPzogdW5rbm93bjtcbiAgYnV0dG9uczogRGlhbG9nQnV0dG9uQ29uZmlnPFRSZXN1bHQ+W107XG4gIGJ1dHRvbkFsaWdubWVudD86IERpYWxvZ0J1dHRvbkFsaWdubWVudDtcbiAgcGFuZWxDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB3aWR0aD86IHN0cmluZztcbiAgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG59XG5cblxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG5leHBvcnQgdHlwZSBEaWFsb2dCdXR0b25Sb2xlID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnd2FybicgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0ID0gdW5rbm93bj4ge1xuICBsYWJlbDogc3RyaW5nO1xuICByb2xlPzogRGlhbG9nQnV0dG9uUm9sZTtcbiAgaGFuZGxlcj86IChkaWFsb2dSZWY6IERpYWxvZ1JlZjxUUmVzdWx0PikgPT4gVFJlc3VsdCB8IHZvaWQgfCBQcm9taXNlPFRSZXN1bHQgfCB2b2lkPjtcbiAgY2xvc2VPbkNsaWNrPzogYm9vbGVhbjtcbiAgLyoqIFN0YXRpYyBvciBkeW5hbWljIGRpc2FibGVkIHN0YXRlLiBXaGVuIGEgZnVuY3Rpb24sIGl0IHJlY2VpdmVzIHRoZSBkaWFsb2cgcmVmXG4gICAqICAoc28gY29uc3VtZXJzIGNhbiByZWFkIHRoZSByZW5kZXJlZCBjb21wb25lbnQgaW5zdGFuY2UgdmlhIGBnZXRDb21wb25lbnRJbnN0YW5jZWApXG4gICAqICBhbmQgaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IGNoYW5nZS1kZXRlY3Rpb24gcGFzcy4gKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgKChkaWFsb2dSZWY6IERpYWxvZ1JlZjxUUmVzdWx0PikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCB0eXBlIERpYWxvZ0J1dHRvbkFsaWdubWVudCA9ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZURpYWxvZ0NvbnRlbnQ8VENvbnRleHQgPSBhbnk+IHtcbiAgdHlwZTogJ3RlbXBsYXRlJztcbiAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPFRDb250ZXh0PjtcbiAgY29udGV4dD86IFRDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERpYWxvZ0NvbnRlbnQ8VElucHV0cyA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgdHlwZTogJ2NvbXBvbmVudCc7XG4gIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTx1bmtub3duPjtcbiAgaW5wdXRzPzogVElucHV0cztcbn1cblxuZXhwb3J0IHR5cGUgRGlhbG9nQ29udGVudENvbmZpZyA9XG4gIHwgVGVtcGxhdGVEaWFsb2dDb250ZW50XG4gIHwgQ29tcG9uZW50RGlhbG9nQ29udGVudDtcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dDb25maWc8VENvbnRlbnQgZXh0ZW5kcyBEaWFsb2dDb250ZW50Q29uZmlnID0gRGlhbG9nQ29udGVudENvbmZpZywgVFJlc3VsdCA9IHVua25vd24+IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHdhcm5pbmc/OiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBUQ29udGVudDtcbiAgZGF0YT86IHVua25vd247XG4gIGJ1dHRvbnM6IERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0PltdO1xuICBidXR0b25BbGlnbm1lbnQ/OiBEaWFsb2dCdXR0b25BbGlnbm1lbnQ7XG4gIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIG1heFdpZHRoPzogc3RyaW5nO1xuICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuO1xufVxuXG5cbiJdfQ==
@@ -3,10 +3,11 @@ import { Validators } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/forms";
5
5
  import * as i2 from "../../dynamic-select/dynamic-select-field.component";
6
- import * as i3 from "../../custom-input/custom-input.component";
7
- import * as i4 from "../../button/button.component";
8
- import * as i5 from "../../badge/badge.component";
9
- import * as i6 from "@angular/common";
6
+ import * as i3 from "@angular/material/icon";
7
+ import * as i4 from "../../custom-input/custom-input.component";
8
+ import * as i5 from "../../button/button.component";
9
+ import * as i6 from "../../badge/badge.component";
10
+ import * as i7 from "@angular/common";
10
11
  export class StepBuilderGroupComponent {
11
12
  constructor(fb) {
12
13
  this.fb = fb;
@@ -22,6 +23,16 @@ export class StepBuilderGroupComponent {
22
23
  this.isLoadingRuntimeVariables = false;
23
24
  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */
24
25
  this.isCreatingStep = false;
26
+ /**
27
+ * When true, render an amber warning banner at the top of the card explaining that any
28
+ * runtime values typed here will be overridden by the consuming test case. Set this when
29
+ * the step-group step is being created/edited inside a host test case that is itself a
30
+ * step group.
31
+ */
32
+ this.showNestedStepGroupWarning = false;
33
+ /** Optional override for the warning copy. Falls back to a sensible default. */
34
+ this.nestedStepGroupWarning = 'Parameter names will be used in the test case level where this step group is added. ' +
35
+ 'If you want to set the value in the test case, keep all the parameter values (runtime variables) empty in this step group.';
25
36
  /** Emit when step is created */
26
37
  this.createStep = new EventEmitter();
27
38
  /** Emit when step group is selected to fetch runtime variables */
@@ -230,10 +241,10 @@ export class StepBuilderGroupComponent {
230
241
  }
231
242
  }
232
243
  StepBuilderGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
233
- StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues", isCreatingStep: "isCreatingStep" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i5.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
244
+ StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues", isCreatingStep: "isCreatingStep", showNestedStepGroupWarning: "showNestedStepGroupWarning", nestedStepGroupWarning: "nestedStepGroupWarning" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n\n \n <!-- Nested-step-group warning. Visible only when the consumer flips\n `showNestedStepGroupWarning` (i.e. the host test case is itself a step group). -->\n <div *ngIf=\"showNestedStepGroupWarning\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-mb-3 cqa-px-3 cqa-py-2.5 cqa-rounded-md cqa-border cqa-border-[#FCD34D] cqa-border-l-[3px] cqa-border-l-[#F59E0B] cqa-bg-[#FEF3C7] cqa-text-[#92400E] cqa-text-[12px] cqa-leading-[18px]\"\n role=\"alert\">\n <mat-icon class=\"cqa-text-[#B45309] !cqa-text-[18px] !cqa-w-[18px] !cqa-h-[18px] cqa-mt-px cqa-flex-shrink-0\">warning_amber</mat-icon>\n <span>{{ nestedStepGroupWarning }}</span>\n </div>\n <!-- TODO: ADD warning message here if the host test case is itself a step group -->\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i6.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
234
245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, decorators: [{
235
246
  type: Component,
236
- args: [{ selector: 'cqa-step-builder-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", styles: [] }]
247
+ args: [{ selector: 'cqa-step-builder-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n\n \n <!-- Nested-step-group warning. Visible only when the consumer flips\n `showNestedStepGroupWarning` (i.e. the host test case is itself a step group). -->\n <div *ngIf=\"showNestedStepGroupWarning\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-mb-3 cqa-px-3 cqa-py-2.5 cqa-rounded-md cqa-border cqa-border-[#FCD34D] cqa-border-l-[3px] cqa-border-l-[#F59E0B] cqa-bg-[#FEF3C7] cqa-text-[#92400E] cqa-text-[12px] cqa-leading-[18px]\"\n role=\"alert\">\n <mat-icon class=\"cqa-text-[#B45309] !cqa-text-[18px] !cqa-w-[18px] !cqa-h-[18px] cqa-mt-px cqa-flex-shrink-0\">warning_amber</mat-icon>\n <span>{{ nestedStepGroupWarning }}</span>\n </div>\n <!-- TODO: ADD warning message here if the host test case is itself a step group -->\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Creating\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n\n", styles: [] }]
237
248
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { stepGroupOptions: [{
238
249
  type: Input
239
250
  }], hasMoreStepGroups: [{
@@ -252,6 +263,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
252
263
  type: Input
253
264
  }], isCreatingStep: [{
254
265
  type: Input
266
+ }], showNestedStepGroupWarning: [{
267
+ type: Input
268
+ }], nestedStepGroupWarning: [{
269
+ type: Input
255
270
  }], createStep: [{
256
271
  type: Output
257
272
  }], stepGroupSelected: [{
@@ -263,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
263
278
  }], searchStepGroups: [{
264
279
  type: Output
265
280
  }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQTJCakYsTUFBTSxPQUFPLHlCQUF5QjtJQXFEcEMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFwRG5DLHNDQUFzQztRQUM3QixxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBRWxELDhEQUE4RDtRQUNyRCxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFNUMsb0NBQW9DO1FBQzNCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUs5QywyQkFBMkI7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQywwQ0FBMEM7UUFDakMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBS3BELHlHQUF5RztRQUNoRyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRTdELGtFQUFrRTtRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXpELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxtREFBbUQ7UUFDekMsdUJBQWtC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QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUvVXBkYXRlIFN0ZXAgYnV0dG9uICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRpbmdTdGVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIC8qKiBUcmFja3MgaW5pdGlhbCBzdGF0ZSBmb3IgZWRpdCBtb2RlIHRvIGRldGVjdCBjaGFuZ2VzICovXG4gIHByaXZhdGUgaW5pdGlhbFN0ZXBHcm91cElkU25hcHNob3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxSdW50aW1lVmFsdWVzU25hcHNob3Q6IHN0cmluZyA9ICd7fSc7XG4gIHByaXZhdGUgc25hcHNob3RSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICAvLyBPbmx5IHBhdGNoIHRoZSBmb3JtIHRvIHRoZSBpbml0aWFsIHZhbHVlIGlmIHRoZSB1c2VyIGhhc24ndCBwaWNrZWQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb3B0aW9uIHlldC4gU3Vic2VxdWVudCBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZXMgKGUuZy4gdGhlXG4gICAgICAgIC8vIHJlZmV0Y2ggZHluYW1pYy1zZWxlY3QgZmlyZXMgb24gZXZlcnkgZHJvcGRvd24gcmVvcGVuKSBtdXN0IE5PVFxuICAgICAgICAvLyBjbG9iYmVyIGEgdXNlci1tb2RpZmllZCBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWUuc3RlcEdyb3VwSWQ7XG4gICAgICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlID09IG51bGwgfHwgY3VycmVudEZvcm1WYWx1ZSA9PT0gdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwID0gZm91bmRHcm91cDtcbiAgICAgICAgICAvLyBDYXB0dXJlIHNuYXBzaG90IGZvciBjaGFuZ2UgZGV0ZWN0aW9uICh3aWxsIGJlIHJlY2FwdHVyZWQgaWYgcnVudGltZSB2YXJpYWJsZXMgbG9hZCBsYXRlcilcbiAgICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMucnVudGltZVZhcmlhYmxlcykge1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBpZiAoZ3JvdXAudmFyaWFibGVzICYmIGdyb3VwLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICBncm91cC52YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgZXhpc3RpbmcgdmFsdWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGN1cnJlbnQgcGFyYW1ldGVyVmFsdWUgb3IgZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gdGhpcy5leGlzdGluZ1J1bnRpbWVWYWx1ZXM/Lltncm91cC5pZF0/Llt2YXJpYWJsZS5uYW1lXTtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gZXhpc3RpbmdWYWx1ZSB8fCB2YXJpYWJsZS5wYXJhbWV0ZXJWYWx1ZSB8fCAnJztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cC5pZF0gPSBncm91cFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2FwdHVyZSBzbmFwc2hvdCBhZnRlciBydW50aW1lIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgKGZvciBlZGl0IG1vZGUgY2hhbmdlIGRldGVjdGlvbilcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgfVxuICB9XG5cbiAgb25SdW50aW1lVmFyaWFibGVDaGFuZ2UoZ3JvdXBJZDogbnVtYmVyLCBwYXJhbU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0pIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdID0ge307XG4gICAgfVxuICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdW3BhcmFtTmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXT8uW3BhcmFtTmFtZV0gfHwgJyc7XG4gIH1cblxuICBoYXNSdW50aW1lVmFyaWFibGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucnVudGltZVZhcmlhYmxlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5zb21lKGdyb3VwID0+ICEhZ3JvdXAudmFyaWFibGVzPy5sZW5ndGgpO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0ZXBHcm91cEZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBTdGVwR3JvdXBGb3JtRGF0YSA9IHtcbiAgICAgICAgc3RlcEdyb3VwSWQ6IGZvcm1WYWx1ZS5zdGVwR3JvdXBJZCxcbiAgICAgICAgc3RlcEdyb3VwOiB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLFxuICAgICAgICBydW50aW1lVmFyaWFibGVzOiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1xuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBmb3JtIGhhcyBjaGFuZ2VkIGZyb20gaXRzIGluaXRpYWwgc3RhdGUgKGVkaXQgbW9kZSBvbmx5KSAqL1xuICBoYXNDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIEluIGNyZWF0ZSBtb2RlLCBhbHdheXMgYWxsb3cgc3VibWlzc2lvblxuICAgIH1cbiAgICAvLyBVbnRpbCB0aGUgc25hcHNob3QgaXMgcmVhZHksIHRyZWF0IGFzIG5vIGNoYW5nZXMgKGRpc2FibGUgYnV0dG9uKVxuICAgIGlmICghdGhpcy5zbmFwc2hvdFJlYWR5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRTdGVwR3JvdXBJZCA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZS5zdGVwR3JvdXBJZDtcbiAgICBpZiAoY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzKSAhPT0gdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90O1xuICB9XG5cbiAgLyoqIENhcHR1cmVzIHRoZSBjdXJyZW50IHN0YXRlIGFzIHRoZSBiYXNlbGluZSBmb3IgY2hhbmdlIGRldGVjdGlvbiAqL1xuICBwcml2YXRlIGNhcHR1cmVJbml0aWFsU25hcHNob3QoKTogdm9pZCB7XG4gICAgLy8gT25seSBjYXB0dXJlIHdoZW4gYSB2YWxpZCBzdGVwIGdyb3VwIGlzIHNlbGVjdGVkXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RlcEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJlLWNhcHR1cmUgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgZm9ybSBzdGlsbCBwb2ludHMgYXQgdGhlIG9yaWdpbmFsXG4gICAgLy8gaW5pdGlhbFN0ZXBHcm91cElkIOKAlCB0aGF0IGNvdmVycyB0aGUgXCJydW50aW1lIHZhcnMgYXJyaXZlZCBhZnRlciB0aGVcbiAgICAvLyBpbml0aWFsIHNlbGVjdGlvbiB3YXMgcGF0Y2hlZFwiIGNhc2UuIE9uY2UgdGhlIHVzZXIgcGlja3MgYSBkaWZmZXJlbnRcbiAgICAvLyBncm91cCwga2VlcCB0aGUgb3JpZ2luYWwgYmFzZWxpbmUgc28gYGhhc0NoYW5nZXMoKWAgc3RheXMgdHJ1ZSBhbmQgdGhlXG4gICAgLy8gVXBkYXRlIGJ1dHRvbiByZW1haW5zIGVuYWJsZWQuXG4gICAgY29uc3QgY3VycmVudFN0ZXBHcm91cElkID0gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbHVlLnN0ZXBHcm91cElkO1xuICAgIGlmICh0aGlzLnNuYXBzaG90UmVhZHkgJiYgY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90ID0gY3VycmVudFN0ZXBHcm91cElkIHx8IG51bGw7XG4gICAgdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMpO1xuICAgIHRoaXMuc25hcHNob3RSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkICYmICEhdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCAmJiB0aGlzLmhhc0NoYW5nZXMoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgZWRpdE1vZGUgPyAnRWRpdCBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgOiAnQ3JlYXRlIFN0ZXAgR3JvdXAgVGVzdCBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBTdGVwIEdyb3VwIFNlbGVjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgU2VsZWN0IFN0ZXAgR3JvdXA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgIFtmb3JtXT1cInN0ZXBHcm91cEZvcm1cIlxuICAgICAgICBbY29uZmlnXT1cInN0ZXBHcm91cENvbmZpZ1wiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgR3JvdXAgRGVzY3JpcHRpb24gLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNGI1NTYzXVwiPkRlc2NyaXB0aW9uOjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTMgY3FhLWJnLVsjZjlmYWZiXSBjcWEtcm91bmRlZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNlNWU3ZWJdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyMzNzQxNTFdXCIgW2lubmVySFRNTF09XCJnZXRTdGVwR3JvdXBEZXNjcmlwdGlvbigpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLW10LTYgY3FhLW1iLTRcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgU2V0IFBhcmFtZXRlcnMgRGVmYXVsdCBWYWx1ZVxuICAgICAgPC9oMz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcHQtNFwiPlxuICAgICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBydW50aW1lIHZhcmlhYmxlcy4uLjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFRhYmxlcyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzICYmIHJ1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1zcGFjZS15LTZcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGlsZEdyb3VwIG9mIHJ1bnRpbWVWYXJpYWJsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgICAgICAgICgge3tpICsgMX19ICkge3sgY2hpbGRHcm91cC5uYW1lIH19XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkR3JvdXAudmFyaWFibGVzICYmIGNoaWxkR3JvdXAudmFyaWFibGVzLmxlbmd0aCA+IDA7IGVsc2Ugbm9WYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJjcWEtYmctZ3JheS01MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGNoaWxkR3JvdXAudmFyaWFibGVzOyBsZXQgaiA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMTAwIGxhc3Q6Y3FhLWJvcmRlci1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgdmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1ZhcmlhYmxlcz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1weS0yXCI+UnVudGltZSB2YXJpYWJsZSBub3QgYXZhaWxhYmxlPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIExvYWRpbmcgU3RhdGU6IG9ubHkgc2hvdyB3aGVuIGluaXRpYWxseSBsb2FkaW5nIChubyBvcHRpb25zIHlldCkuIExvYWQtbW9yZSBsb2FkaW5nIGlzIHNob3duIGluc2lkZSB0aGUgZHJvcGRvd24uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzICYmIHN0ZXBHcm91cE9wdGlvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0luc2VydCBTdGVwIEdyb3VwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUEyQmpGLE1BQU0sT0FBTyx5QkFBeUI7SUFpRXBDLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBaEVuQyxzQ0FBc0M7UUFDN0IscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQztRQUVsRCw4REFBOEQ7UUFDckQsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRTVDLG9DQUFvQztRQUMzQix3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFLOUMsMkJBQTJCO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFLbkMsMENBQTBDO1FBQ2pDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUtwRCx5R0FBeUc7UUFDaEcsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFekM7Ozs7O1dBS0c7UUFDTSwrQkFBMEIsR0FBWSxLQUFLLENBQUM7UUFDckQsZ0ZBQWdGO1FBQ3ZFLDJCQUFzQixHQUM3QixzRkFBc0Y7WUFDdEYsNEhBQTRILENBQUM7UUFFL0gsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlC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QWhCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFRRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUtJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUvVXBkYXRlIFN0ZXAgYnV0dG9uICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRpbmdTdGVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcmVuZGVyIGFuIGFtYmVyIHdhcm5pbmcgYmFubmVyIGF0IHRoZSB0b3Agb2YgdGhlIGNhcmQgZXhwbGFpbmluZyB0aGF0IGFueVxuICAgKiBydW50aW1lIHZhbHVlcyB0eXBlZCBoZXJlIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29uc3VtaW5nIHRlc3QgY2FzZS4gU2V0IHRoaXMgd2hlblxuICAgKiB0aGUgc3RlcC1ncm91cCBzdGVwIGlzIGJlaW5nIGNyZWF0ZWQvZWRpdGVkIGluc2lkZSBhIGhvc3QgdGVzdCBjYXNlIHRoYXQgaXMgaXRzZWxmIGFcbiAgICogc3RlcCBncm91cC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dOZXN0ZWRTdGVwR3JvdXBXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIHdhcm5pbmcgY29weS4gRmFsbHMgYmFjayB0byBhIHNlbnNpYmxlIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIG5lc3RlZFN0ZXBHcm91cFdhcm5pbmc6IHN0cmluZyA9XG4gICAgJ1BhcmFtZXRlciBuYW1lcyB3aWxsIGJlIHVzZWQgaW4gdGhlIHRlc3QgY2FzZSBsZXZlbCB3aGVyZSB0aGlzIHN0ZXAgZ3JvdXAgaXMgYWRkZWQuICcgK1xuICAgICdJZiB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIGluIHRoZSB0ZXN0IGNhc2UsIGtlZXAgYWxsIHRoZSBwYXJhbWV0ZXIgdmFsdWVzIChydW50aW1lIHZhcmlhYmxlcykgZW1wdHkgaW4gdGhpcyBzdGVwIGdyb3VwLic7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIC8qKiBUcmFja3MgaW5pdGlhbCBzdGF0ZSBmb3IgZWRpdCBtb2RlIHRvIGRldGVjdCBjaGFuZ2VzICovXG4gIHByaXZhdGUgaW5pdGlhbFN0ZXBHcm91cElkU25hcHNob3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxSdW50aW1lVmFsdWVzU25hcHNob3Q6IHN0cmluZyA9ICd7fSc7XG4gIHByaXZhdGUgc25hcHNob3RSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICAvLyBPbmx5IHBhdGNoIHRoZSBmb3JtIHRvIHRoZSBpbml0aWFsIHZhbHVlIGlmIHRoZSB1c2VyIGhhc24ndCBwaWNrZWQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb3B0aW9uIHlldC4gU3Vic2VxdWVudCBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZXMgKGUuZy4gdGhlXG4gICAgICAgIC8vIHJlZmV0Y2ggZHluYW1pYy1zZWxlY3QgZmlyZXMgb24gZXZlcnkgZHJvcGRvd24gcmVvcGVuKSBtdXN0IE5PVFxuICAgICAgICAvLyBjbG9iYmVyIGEgdXNlci1tb2RpZmllZCBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWUuc3RlcEdyb3VwSWQ7XG4gICAgICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlID09IG51bGwgfHwgY3VycmVudEZvcm1WYWx1ZSA9PT0gdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwID0gZm91bmRHcm91cDtcbiAgICAgICAgICAvLyBDYXB0dXJlIHNuYXBzaG90IGZvciBjaGFuZ2UgZGV0ZWN0aW9uICh3aWxsIGJlIHJlY2FwdHVyZWQgaWYgcnVudGltZSB2YXJpYWJsZXMgbG9hZCBsYXRlcilcbiAgICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMucnVudGltZVZhcmlhYmxlcykge1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBpZiAoZ3JvdXAudmFyaWFibGVzICYmIGdyb3VwLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICBncm91cC52YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgZXhpc3RpbmcgdmFsdWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGN1cnJlbnQgcGFyYW1ldGVyVmFsdWUgb3IgZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gdGhpcy5leGlzdGluZ1J1bnRpbWVWYWx1ZXM/Lltncm91cC5pZF0/Llt2YXJpYWJsZS5uYW1lXTtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gZXhpc3RpbmdWYWx1ZSB8fCB2YXJpYWJsZS5wYXJhbWV0ZXJWYWx1ZSB8fCAnJztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cC5pZF0gPSBncm91cFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2FwdHVyZSBzbmFwc2hvdCBhZnRlciBydW50aW1lIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgKGZvciBlZGl0IG1vZGUgY2hhbmdlIGRldGVjdGlvbilcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgfVxuICB9XG5cbiAgb25SdW50aW1lVmFyaWFibGVDaGFuZ2UoZ3JvdXBJZDogbnVtYmVyLCBwYXJhbU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0pIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdID0ge307XG4gICAgfVxuICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdW3BhcmFtTmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXT8uW3BhcmFtTmFtZV0gfHwgJyc7XG4gIH1cblxuICBoYXNSdW50aW1lVmFyaWFibGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucnVudGltZVZhcmlhYmxlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5zb21lKGdyb3VwID0+ICEhZ3JvdXAudmFyaWFibGVzPy5sZW5ndGgpO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0ZXBHcm91cEZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBTdGVwR3JvdXBGb3JtRGF0YSA9IHtcbiAgICAgICAgc3RlcEdyb3VwSWQ6IGZvcm1WYWx1ZS5zdGVwR3JvdXBJZCxcbiAgICAgICAgc3RlcEdyb3VwOiB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLFxuICAgICAgICBydW50aW1lVmFyaWFibGVzOiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1xuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBmb3JtIGhhcyBjaGFuZ2VkIGZyb20gaXRzIGluaXRpYWwgc3RhdGUgKGVkaXQgbW9kZSBvbmx5KSAqL1xuICBoYXNDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIEluIGNyZWF0ZSBtb2RlLCBhbHdheXMgYWxsb3cgc3VibWlzc2lvblxuICAgIH1cbiAgICAvLyBVbnRpbCB0aGUgc25hcHNob3QgaXMgcmVhZHksIHRyZWF0IGFzIG5vIGNoYW5nZXMgKGRpc2FibGUgYnV0dG9uKVxuICAgIGlmICghdGhpcy5zbmFwc2hvdFJlYWR5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRTdGVwR3JvdXBJZCA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZS5zdGVwR3JvdXBJZDtcbiAgICBpZiAoY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzKSAhPT0gdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90O1xuICB9XG5cbiAgLyoqIENhcHR1cmVzIHRoZSBjdXJyZW50IHN0YXRlIGFzIHRoZSBiYXNlbGluZSBmb3IgY2hhbmdlIGRldGVjdGlvbiAqL1xuICBwcml2YXRlIGNhcHR1cmVJbml0aWFsU25hcHNob3QoKTogdm9pZCB7XG4gICAgLy8gT25seSBjYXB0dXJlIHdoZW4gYSB2YWxpZCBzdGVwIGdyb3VwIGlzIHNlbGVjdGVkXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RlcEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJlLWNhcHR1cmUgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgZm9ybSBzdGlsbCBwb2ludHMgYXQgdGhlIG9yaWdpbmFsXG4gICAgLy8gaW5pdGlhbFN0ZXBHcm91cElkIOKAlCB0aGF0IGNvdmVycyB0aGUgXCJydW50aW1lIHZhcnMgYXJyaXZlZCBhZnRlciB0aGVcbiAgICAvLyBpbml0aWFsIHNlbGVjdGlvbiB3YXMgcGF0Y2hlZFwiIGNhc2UuIE9uY2UgdGhlIHVzZXIgcGlja3MgYSBkaWZmZXJlbnRcbiAgICAvLyBncm91cCwga2VlcCB0aGUgb3JpZ2luYWwgYmFzZWxpbmUgc28gYGhhc0NoYW5nZXMoKWAgc3RheXMgdHJ1ZSBhbmQgdGhlXG4gICAgLy8gVXBkYXRlIGJ1dHRvbiByZW1haW5zIGVuYWJsZWQuXG4gICAgY29uc3QgY3VycmVudFN0ZXBHcm91cElkID0gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbHVlLnN0ZXBHcm91cElkO1xuICAgIGlmICh0aGlzLnNuYXBzaG90UmVhZHkgJiYgY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90ID0gY3VycmVudFN0ZXBHcm91cElkIHx8IG51bGw7XG4gICAgdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMpO1xuICAgIHRoaXMuc25hcHNob3RSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkICYmICEhdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCAmJiB0aGlzLmhhc0NoYW5nZXMoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgZWRpdE1vZGUgPyAnRWRpdCBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgOiAnQ3JlYXRlIFN0ZXAgR3JvdXAgVGVzdCBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBTdGVwIEdyb3VwIFNlbGVjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgU2VsZWN0IFN0ZXAgR3JvdXA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgIFtmb3JtXT1cInN0ZXBHcm91cEZvcm1cIlxuICAgICAgICBbY29uZmlnXT1cInN0ZXBHcm91cENvbmZpZ1wiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgR3JvdXAgRGVzY3JpcHRpb24gLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNGI1NTYzXVwiPkRlc2NyaXB0aW9uOjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTMgY3FhLWJnLVsjZjlmYWZiXSBjcWEtcm91bmRlZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNlNWU3ZWJdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyMzNzQxNTFdXCIgW2lubmVySFRNTF09XCJnZXRTdGVwR3JvdXBEZXNjcmlwdGlvbigpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLW10LTYgY3FhLW1iLTRcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgU2V0IFBhcmFtZXRlcnMgRGVmYXVsdCBWYWx1ZVxuICAgICAgPC9oMz5cblxuICAgICAgXG4gICAgICAgPCEtLSBOZXN0ZWQtc3RlcC1ncm91cCB3YXJuaW5nLiBWaXNpYmxlIG9ubHkgd2hlbiB0aGUgY29uc3VtZXIgZmxpcHNcbiAgICAgICBgc2hvd05lc3RlZFN0ZXBHcm91cFdhcm5pbmdgIChpLmUuIHRoZSBob3N0IHRlc3QgY2FzZSBpcyBpdHNlbGYgYSBzdGVwIGdyb3VwKS4gLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd05lc3RlZFN0ZXBHcm91cFdhcm5pbmdcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIgY3FhLW1iLTMgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1tZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNGQ0QzNERdIGNxYS1ib3JkZXItbC1bM3B4XSBjcWEtYm9yZGVyLWwtWyNGNTlFMEJdIGNxYS1iZy1bI0ZFRjNDN10gY3FhLXRleHQtWyM5MjQwMEVdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF1cIlxuICAgICAgICByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyNCNDUzMDldICFjcWEtdGV4dC1bMThweF0gIWNxYS13LVsxOHB4XSAhY3FhLWgtWzE4cHhdIGNxYS1tdC1weCBjcWEtZmxleC1zaHJpbmstMFwiPndhcm5pbmdfYW1iZXI8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBuZXN0ZWRTdGVwR3JvdXBXYXJuaW5nIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFRPRE86IEFERCB3YXJuaW5nIG1lc3NhZ2UgaGVyZSBpZiB0aGUgaG9zdCB0ZXN0IGNhc2UgaXMgaXRzZWxmIGEgc3RlcCBncm91cCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcHQtNFwiPlxuICAgICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBydW50aW1lIHZhcmlhYmxlcy4uLjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFRhYmxlcyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzICYmIHJ1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1zcGFjZS15LTZcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGlsZEdyb3VwIG9mIHJ1bnRpbWVWYXJpYWJsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgICAgICAgICgge3tpICsgMX19ICkge3sgY2hpbGRHcm91cC5uYW1lIH19XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkR3JvdXAudmFyaWFibGVzICYmIGNoaWxkR3JvdXAudmFyaWFibGVzLmxlbmd0aCA+IDA7IGVsc2Ugbm9WYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJjcWEtYmctZ3JheS01MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGNoaWxkR3JvdXAudmFyaWFibGVzOyBsZXQgaiA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMTAwIGxhc3Q6Y3FhLWJvcmRlci1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgdmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1ZhcmlhYmxlcz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1weS0yXCI+UnVudGltZSB2YXJpYWJsZSBub3QgYXZhaWxhYmxlPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIExvYWRpbmcgU3RhdGU6IG9ubHkgc2hvdyB3aGVuIGluaXRpYWxseSBsb2FkaW5nIChubyBvcHRpb25zIHlldCkuIExvYWQtbW9yZSBsb2FkaW5nIGlzIHNob3duIGluc2lkZSB0aGUgZHJvcGRvd24uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzICYmIHN0ZXBHcm91cE9wdGlvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0luc2VydCBTdGVwIEdyb3VwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=