@alfresco/adf-core 7.0.0-alpha.9-13391109227 → 7.0.0-alpha.9-13430877390
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +3 -3
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +7 -3
- package/esm2022/lib/form/services/form.service.mjs +13 -6
- package/fesm2022/adf-core.mjs +20 -9
- package/fesm2022/adf-core.mjs.map +1 -1
- package/lib/card-view/components/card-view-textitem/card-view-textitem.component.scss +1 -1
- package/lib/form/components/widgets/core/form.model.d.ts +2 -1
- package/lib/form/services/form.service.d.ts +22 -3
- package/package.json +3 -3
- package/schematics/migrations/schematics/migrations/collection.json +8 -8
package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs
CHANGED
|
@@ -210,7 +210,7 @@ export class CardViewTextItemComponent extends BaseCardView {
|
|
|
210
210
|
return String(Math.trunc(Number(value)));
|
|
211
211
|
}
|
|
212
212
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CardViewTextItemComponent, deps: [{ token: i1.ClipboardService }, { token: i2.TranslationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
213
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: CardViewTextItemComponent, isStandalone: true, selector: "adf-card-view-textitem", inputs: { displayEmpty: "displayEmpty", copyToClipboardAction: "copyToClipboardAction", useChipsForMultiValueProperty: "useChipsForMultiValueProperty", multiValueSeparator: "multiValueSeparator", displayLabelForChips: "displayLabelForChips" }, host: { classAttribute: "adf-card-view-textitem" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [ngSwitch]=\"templateType\">\n <div *ngSwitchDefault>\n <mat-form-field\n class=\"adf-property-field adf-card-textitem-field\"\n [ngClass]=\"{\n 'adf-property-read-only': !isEditable\n }\"\n [floatLabel]=\"'always'\"\n >\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n >\n {{ property.label | translate }}\n </mat-label>\n\n <input\n matInput\n *ngIf=\"!property.multiline\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n (dblclick)=\"copyToClipboard(property.displayValue)\"\n [title]=\"'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n (keydown)=\"undoText($event)\"\n />\n <textarea\n matInput\n *ngIf=\"property.multiline\"\n title=\"{{ property.label | translate }}\"\n [cdkTextareaAutosize]=\"true\"\n [cdkAutosizeMinRows]=\"1\"\n [cdkAutosizeMaxRows]=\"5\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n >\n </textarea>\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'chipsTemplate'\"\n class=\"adf-property-field adf-textitem-chip-list-container\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <mat-label\n *ngIf=\"showLabelForChips\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <mat-chip-grid #chipElement class=\"adf-textitem-chip-list\">\n <mat-chip-row *ngFor=\"let propertyValue of editedValue; let idx = index\" [removable]=\"isEditable\" (removed)=\"removeValueFromList(idx)\">\n {{ propertyValue }}\n <mat-icon *ngIf=\"isEditable\" matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n </mat-chip-grid>\n\n <mat-form-field\n *ngIf=\"isEditable\"\n class=\"adf-property-field adf-textitem-chip-list-input\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <input\n matInput\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"editedValue ? '' : (property.default | translate)\"\n [attr.aria-label]=\"property.label | translate\"\n [matChipInputFor]=\"chipElement\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addValueToList($event)\"\n [attr.data-automation-id]=\"'card-textitem-editchipinput-' + property.key\"\n />\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'clickableTemplate'\"\n role=\"button\"\n class=\"adf-textitem-clickable\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n [attr.data-automation-id]=\"'card-textitem-toggle-' + property.key\"\n tabindex=\"0\"\n (keyup.enter)=\"clicked()\"\n (click)=\"clicked()\"\n >\n <mat-form-field class=\"adf-property-field adf-card-textitem-field\" [floatLabel]=\"'always'\">\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <input\n matInput\n [type]=\"property.inputType\"\n class=\"adf-property-value\"\n title=\"{{ property.label | translate }}\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-textitem-clickable-value': isClickable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors,\n 'adf-property-value-has-icon-suffix': showClickableIcon\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [(ngModel)]=\"editedValue\"\n (blur)=\"update()\"\n (keydown.enter)=\"update()\"\n [readonly]=\"!isEditable\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n />\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"showClickableIcon\"\n class=\"adf-textitem-action\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.data-automation-id]=\"'card-textitem-clickable-icon-' + property.key\"\n >\n <mat-icon class=\"adf-textitem-icon\">{{ property?.icon }}</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'emptyTemplate'\">\n <span class=\"adf-textitem-default-value\">{{ property.default | translate }}</span>\n </div>\n\n <mat-error *ngIf=\"isEditable && hasErrors\" class=\"adf-textitem-error\" [attr.data-automation-id]=\"'card-textitem-error-' + property.key\">\n <ul>\n <li *ngFor=\"let error of errors\">{{ error.message | translate : error }}</li>\n </ul>\n </mat-error>\n</div>\n", styles: [".adf-card-view-textitem .adf-textitem-error{font-size:var(--theme-caption-font-size);padding-top:6px}.adf-card-view-textitem .adf-textitem-error ul{margin:0;padding:0;list-style-type:none}.adf-card-view-textitem .adf-textitem-error ul li{margin:0;padding:0}.adf-card-view-textitem .adf-textitem-action{width:30px;height:30px;padding:0;line-height:20px;color:var(--adf-theme-foreground-text-color-025)}.adf-card-view-textitem .adf-textitem-action:hover,.adf-card-view-textitem .adf-textitem-action:focus{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-action .mat-mdc-button-touch-target{width:30px;height:30px}.adf-card-view-textitem .mat-mdc-form-field-icon-suffix{position:absolute;right:1px;bottom:7px}.adf-card-view-textitem .adf-textitem-chip-list-container .mat-mdc-floating-label{margin-top:6px}.adf-card-view-textitem .adf-textitem-clickable{cursor:pointer;padding-top:3px}.adf-card-view-textitem .adf-textitem-clickable .adf-textitem-action:hover{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-clickable .adf-property-field .mat-mdc-input-element{color:var(--theme-primary-color);cursor:pointer}.adf-card-view-textitem .adf-textitem-default-value{color:var(--adf-theme-foreground-text-color-054)}.adf-card-view-textitem .adf-property-read-only:not(:has(.adf-property-readonly-value)){border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-card-view-textitem .adf-property-readonly-value:disabled{--mdc-filled-text-field-disabled-input-text-color: var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-editable:not(:disabled){color:var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-has-icon-suffix{padding-right:34px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.adf-card-view-textitem .mdc-line-ripple:before,.adf-card-view-textitem .mdc-line-ripple:after{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSnackBarModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
213
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: CardViewTextItemComponent, isStandalone: true, selector: "adf-card-view-textitem", inputs: { displayEmpty: "displayEmpty", copyToClipboardAction: "copyToClipboardAction", useChipsForMultiValueProperty: "useChipsForMultiValueProperty", multiValueSeparator: "multiValueSeparator", displayLabelForChips: "displayLabelForChips" }, host: { classAttribute: "adf-card-view-textitem" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [ngSwitch]=\"templateType\">\n <div *ngSwitchDefault>\n <mat-form-field\n class=\"adf-property-field adf-card-textitem-field\"\n [ngClass]=\"{\n 'adf-property-read-only': !isEditable\n }\"\n [floatLabel]=\"'always'\"\n >\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n >\n {{ property.label | translate }}\n </mat-label>\n\n <input\n matInput\n *ngIf=\"!property.multiline\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n (dblclick)=\"copyToClipboard(property.displayValue)\"\n [title]=\"'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n (keydown)=\"undoText($event)\"\n />\n <textarea\n matInput\n *ngIf=\"property.multiline\"\n title=\"{{ property.label | translate }}\"\n [cdkTextareaAutosize]=\"true\"\n [cdkAutosizeMinRows]=\"1\"\n [cdkAutosizeMaxRows]=\"5\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n >\n </textarea>\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'chipsTemplate'\"\n class=\"adf-property-field adf-textitem-chip-list-container\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <mat-label\n *ngIf=\"showLabelForChips\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <mat-chip-grid #chipElement class=\"adf-textitem-chip-list\">\n <mat-chip-row *ngFor=\"let propertyValue of editedValue; let idx = index\" [removable]=\"isEditable\" (removed)=\"removeValueFromList(idx)\">\n {{ propertyValue }}\n <mat-icon *ngIf=\"isEditable\" matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n </mat-chip-grid>\n\n <mat-form-field\n *ngIf=\"isEditable\"\n class=\"adf-property-field adf-textitem-chip-list-input\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <input\n matInput\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"editedValue ? '' : (property.default | translate)\"\n [attr.aria-label]=\"property.label | translate\"\n [matChipInputFor]=\"chipElement\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addValueToList($event)\"\n [attr.data-automation-id]=\"'card-textitem-editchipinput-' + property.key\"\n />\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'clickableTemplate'\"\n role=\"button\"\n class=\"adf-textitem-clickable\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n [attr.data-automation-id]=\"'card-textitem-toggle-' + property.key\"\n tabindex=\"0\"\n (keyup.enter)=\"clicked()\"\n (click)=\"clicked()\"\n >\n <mat-form-field class=\"adf-property-field adf-card-textitem-field\" [floatLabel]=\"'always'\">\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <input\n matInput\n [type]=\"property.inputType\"\n class=\"adf-property-value\"\n title=\"{{ property.label | translate }}\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-textitem-clickable-value': isClickable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors,\n 'adf-property-value-has-icon-suffix': showClickableIcon\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [(ngModel)]=\"editedValue\"\n (blur)=\"update()\"\n (keydown.enter)=\"update()\"\n [readonly]=\"!isEditable\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n />\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"showClickableIcon\"\n class=\"adf-textitem-action\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.data-automation-id]=\"'card-textitem-clickable-icon-' + property.key\"\n >\n <mat-icon class=\"adf-textitem-icon\">{{ property?.icon }}</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'emptyTemplate'\">\n <span class=\"adf-textitem-default-value\">{{ property.default | translate }}</span>\n </div>\n\n <mat-error *ngIf=\"isEditable && hasErrors\" class=\"adf-textitem-error\" [attr.data-automation-id]=\"'card-textitem-error-' + property.key\">\n <ul>\n <li *ngFor=\"let error of errors\">{{ error.message | translate : error }}</li>\n </ul>\n </mat-error>\n</div>\n", styles: [".adf-card-view-textitem .adf-textitem-error{font-size:var(--theme-caption-font-size);padding-top:6px}.adf-card-view-textitem .adf-textitem-error ul{margin:0;padding:0;list-style-type:none}.adf-card-view-textitem .adf-textitem-error ul li{margin:0;padding:0}.adf-card-view-textitem .adf-textitem-action{width:30px;height:30px;padding:0;line-height:20px;color:var(--adf-theme-foreground-text-color-025)}.adf-card-view-textitem .adf-textitem-action:hover,.adf-card-view-textitem .adf-textitem-action:focus{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-action .mat-mdc-button-touch-target{width:30px;height:30px}.adf-card-view-textitem .mat-mdc-form-field-icon-suffix{position:absolute;right:1px;bottom:7px}.adf-card-view-textitem .adf-textitem-chip-list-container .mat-mdc-floating-label{margin-top:6px}.adf-card-view-textitem .adf-textitem-clickable{cursor:pointer;padding-top:3px}.adf-card-view-textitem .adf-textitem-clickable .adf-textitem-action:hover{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-clickable .adf-property-field .mat-mdc-input-element{color:var(--theme-primary-color);cursor:pointer}.adf-card-view-textitem .adf-textitem-default-value{color:var(--adf-theme-foreground-text-color-054)}.adf-card-view-textitem .adf-property-read-only:not(:has(.adf-property-readonly-value)){border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-card-view-textitem .adf-property-readonly-value:disabled{color:var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-editable:not(:disabled){color:var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-has-icon-suffix{padding-right:34px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.adf-card-view-textitem .mdc-line-ripple:before,.adf-card-view-textitem .mdc-line-ripple:after{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSnackBarModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
214
214
|
}
|
|
215
215
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CardViewTextItemComponent, decorators: [{
|
|
216
216
|
type: Component,
|
|
@@ -225,7 +225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
225
225
|
FormsModule,
|
|
226
226
|
MatButtonModule,
|
|
227
227
|
MatSnackBarModule
|
|
228
|
-
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-card-view-textitem' }, template: "<div [ngSwitch]=\"templateType\">\n <div *ngSwitchDefault>\n <mat-form-field\n class=\"adf-property-field adf-card-textitem-field\"\n [ngClass]=\"{\n 'adf-property-read-only': !isEditable\n }\"\n [floatLabel]=\"'always'\"\n >\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n >\n {{ property.label | translate }}\n </mat-label>\n\n <input\n matInput\n *ngIf=\"!property.multiline\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n (dblclick)=\"copyToClipboard(property.displayValue)\"\n [title]=\"'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n (keydown)=\"undoText($event)\"\n />\n <textarea\n matInput\n *ngIf=\"property.multiline\"\n title=\"{{ property.label | translate }}\"\n [cdkTextareaAutosize]=\"true\"\n [cdkAutosizeMinRows]=\"1\"\n [cdkAutosizeMaxRows]=\"5\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n >\n </textarea>\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'chipsTemplate'\"\n class=\"adf-property-field adf-textitem-chip-list-container\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <mat-label\n *ngIf=\"showLabelForChips\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <mat-chip-grid #chipElement class=\"adf-textitem-chip-list\">\n <mat-chip-row *ngFor=\"let propertyValue of editedValue; let idx = index\" [removable]=\"isEditable\" (removed)=\"removeValueFromList(idx)\">\n {{ propertyValue }}\n <mat-icon *ngIf=\"isEditable\" matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n </mat-chip-grid>\n\n <mat-form-field\n *ngIf=\"isEditable\"\n class=\"adf-property-field adf-textitem-chip-list-input\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <input\n matInput\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"editedValue ? '' : (property.default | translate)\"\n [attr.aria-label]=\"property.label | translate\"\n [matChipInputFor]=\"chipElement\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addValueToList($event)\"\n [attr.data-automation-id]=\"'card-textitem-editchipinput-' + property.key\"\n />\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'clickableTemplate'\"\n role=\"button\"\n class=\"adf-textitem-clickable\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n [attr.data-automation-id]=\"'card-textitem-toggle-' + property.key\"\n tabindex=\"0\"\n (keyup.enter)=\"clicked()\"\n (click)=\"clicked()\"\n >\n <mat-form-field class=\"adf-property-field adf-card-textitem-field\" [floatLabel]=\"'always'\">\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <input\n matInput\n [type]=\"property.inputType\"\n class=\"adf-property-value\"\n title=\"{{ property.label | translate }}\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-textitem-clickable-value': isClickable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors,\n 'adf-property-value-has-icon-suffix': showClickableIcon\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [(ngModel)]=\"editedValue\"\n (blur)=\"update()\"\n (keydown.enter)=\"update()\"\n [readonly]=\"!isEditable\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n />\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"showClickableIcon\"\n class=\"adf-textitem-action\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.data-automation-id]=\"'card-textitem-clickable-icon-' + property.key\"\n >\n <mat-icon class=\"adf-textitem-icon\">{{ property?.icon }}</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'emptyTemplate'\">\n <span class=\"adf-textitem-default-value\">{{ property.default | translate }}</span>\n </div>\n\n <mat-error *ngIf=\"isEditable && hasErrors\" class=\"adf-textitem-error\" [attr.data-automation-id]=\"'card-textitem-error-' + property.key\">\n <ul>\n <li *ngFor=\"let error of errors\">{{ error.message | translate : error }}</li>\n </ul>\n </mat-error>\n</div>\n", styles: [".adf-card-view-textitem .adf-textitem-error{font-size:var(--theme-caption-font-size);padding-top:6px}.adf-card-view-textitem .adf-textitem-error ul{margin:0;padding:0;list-style-type:none}.adf-card-view-textitem .adf-textitem-error ul li{margin:0;padding:0}.adf-card-view-textitem .adf-textitem-action{width:30px;height:30px;padding:0;line-height:20px;color:var(--adf-theme-foreground-text-color-025)}.adf-card-view-textitem .adf-textitem-action:hover,.adf-card-view-textitem .adf-textitem-action:focus{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-action .mat-mdc-button-touch-target{width:30px;height:30px}.adf-card-view-textitem .mat-mdc-form-field-icon-suffix{position:absolute;right:1px;bottom:7px}.adf-card-view-textitem .adf-textitem-chip-list-container .mat-mdc-floating-label{margin-top:6px}.adf-card-view-textitem .adf-textitem-clickable{cursor:pointer;padding-top:3px}.adf-card-view-textitem .adf-textitem-clickable .adf-textitem-action:hover{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-clickable .adf-property-field .mat-mdc-input-element{color:var(--theme-primary-color);cursor:pointer}.adf-card-view-textitem .adf-textitem-default-value{color:var(--adf-theme-foreground-text-color-054)}.adf-card-view-textitem .adf-property-read-only:not(:has(.adf-property-readonly-value)){border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-card-view-textitem .adf-property-readonly-value:disabled{
|
|
228
|
+
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-card-view-textitem' }, template: "<div [ngSwitch]=\"templateType\">\n <div *ngSwitchDefault>\n <mat-form-field\n class=\"adf-property-field adf-card-textitem-field\"\n [ngClass]=\"{\n 'adf-property-read-only': !isEditable\n }\"\n [floatLabel]=\"'always'\"\n >\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n >\n {{ property.label | translate }}\n </mat-label>\n\n <input\n matInput\n *ngIf=\"!property.multiline\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n (dblclick)=\"copyToClipboard(property.displayValue)\"\n [title]=\"'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n (keydown)=\"undoText($event)\"\n />\n <textarea\n matInput\n *ngIf=\"property.multiline\"\n title=\"{{ property.label | translate }}\"\n [cdkTextareaAutosize]=\"true\"\n [cdkAutosizeMinRows]=\"1\"\n [cdkAutosizeMaxRows]=\"5\"\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [formControl]=\"textInput\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n >\n </textarea>\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'chipsTemplate'\"\n class=\"adf-property-field adf-textitem-chip-list-container\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <mat-label\n *ngIf=\"showLabelForChips\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <mat-chip-grid #chipElement class=\"adf-textitem-chip-list\">\n <mat-chip-row *ngFor=\"let propertyValue of editedValue; let idx = index\" [removable]=\"isEditable\" (removed)=\"removeValueFromList(idx)\">\n {{ propertyValue }}\n <mat-icon *ngIf=\"isEditable\" matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n </mat-chip-grid>\n\n <mat-form-field\n *ngIf=\"isEditable\"\n class=\"adf-property-field adf-textitem-chip-list-input\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n >\n <input\n matInput\n class=\"adf-property-value\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-property-readonly-value': isReadonlyProperty\n }\"\n title=\"{{ property.label | translate }}\"\n [placeholder]=\"editedValue ? '' : (property.default | translate)\"\n [attr.aria-label]=\"property.label | translate\"\n [matChipInputFor]=\"chipElement\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addValueToList($event)\"\n [attr.data-automation-id]=\"'card-textitem-editchipinput-' + property.key\"\n />\n </mat-form-field>\n </div>\n\n <div\n *ngSwitchCase=\"'clickableTemplate'\"\n role=\"button\"\n class=\"adf-textitem-clickable\"\n [ngClass]=\"{ 'adf-property-read-only': !isEditable }\"\n [attr.data-automation-id]=\"'card-textitem-toggle-' + property.key\"\n tabindex=\"0\"\n (keyup.enter)=\"clicked()\"\n (click)=\"clicked()\"\n >\n <mat-form-field class=\"adf-property-field adf-card-textitem-field\" [floatLabel]=\"'always'\">\n <mat-label\n *ngIf=\"showProperty || isEditable\"\n [attr.data-automation-id]=\"'card-textitem-label-' + property.key\"\n class=\"adf-property-label\"\n [ngClass]=\"{ 'adf-property-value-editable': editable }\"\n >\n {{ property.label | translate }}\n </mat-label>\n <input\n matInput\n [type]=\"property.inputType\"\n class=\"adf-property-value\"\n title=\"{{ property.label | translate }}\"\n [ngClass]=\"{\n 'adf-property-value-editable': editable,\n 'adf-textitem-clickable-value': isClickable,\n 'adf-property-readonly-value': isReadonlyProperty,\n 'adf-property-value-has-error': isEditable && hasErrors,\n 'adf-property-value-has-icon-suffix': showClickableIcon\n }\"\n [placeholder]=\"property.default\"\n [attr.aria-label]=\"property.label | translate\"\n [(ngModel)]=\"editedValue\"\n (blur)=\"update()\"\n (keydown.enter)=\"update()\"\n [readonly]=\"!isEditable\"\n [attr.data-automation-id]=\"'card-textitem-value-' + property.key\"\n />\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"showClickableIcon\"\n class=\"adf-textitem-action\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n [attr.data-automation-id]=\"'card-textitem-clickable-icon-' + property.key\"\n >\n <mat-icon class=\"adf-textitem-icon\">{{ property?.icon }}</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'emptyTemplate'\">\n <span class=\"adf-textitem-default-value\">{{ property.default | translate }}</span>\n </div>\n\n <mat-error *ngIf=\"isEditable && hasErrors\" class=\"adf-textitem-error\" [attr.data-automation-id]=\"'card-textitem-error-' + property.key\">\n <ul>\n <li *ngFor=\"let error of errors\">{{ error.message | translate : error }}</li>\n </ul>\n </mat-error>\n</div>\n", styles: [".adf-card-view-textitem .adf-textitem-error{font-size:var(--theme-caption-font-size);padding-top:6px}.adf-card-view-textitem .adf-textitem-error ul{margin:0;padding:0;list-style-type:none}.adf-card-view-textitem .adf-textitem-error ul li{margin:0;padding:0}.adf-card-view-textitem .adf-textitem-action{width:30px;height:30px;padding:0;line-height:20px;color:var(--adf-theme-foreground-text-color-025)}.adf-card-view-textitem .adf-textitem-action:hover,.adf-card-view-textitem .adf-textitem-action:focus{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-action .mat-mdc-button-touch-target{width:30px;height:30px}.adf-card-view-textitem .mat-mdc-form-field-icon-suffix{position:absolute;right:1px;bottom:7px}.adf-card-view-textitem .adf-textitem-chip-list-container .mat-mdc-floating-label{margin-top:6px}.adf-card-view-textitem .adf-textitem-clickable{cursor:pointer;padding-top:3px}.adf-card-view-textitem .adf-textitem-clickable .adf-textitem-action:hover{color:var(--adf-theme-foreground-text-color)}.adf-card-view-textitem .adf-textitem-clickable .adf-property-field .mat-mdc-input-element{color:var(--theme-primary-color);cursor:pointer}.adf-card-view-textitem .adf-textitem-default-value{color:var(--adf-theme-foreground-text-color-054)}.adf-card-view-textitem .adf-property-read-only:not(:has(.adf-property-readonly-value)){border-bottom:1px solid var(--adf-metadata-property-panel-border-color)}.adf-card-view-textitem .adf-property-readonly-value:disabled{color:var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-editable:not(:disabled){color:var(--adf-metadata-property-panel-title-color)}.adf-card-view-textitem .adf-property-value-has-icon-suffix{padding-right:34px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.adf-card-view-textitem .mdc-line-ripple:before,.adf-card-view-textitem .mdc-line-ripple:after{display:none}\n"] }]
|
|
229
229
|
}], ctorParameters: () => [{ type: i1.ClipboardService }, { type: i2.TranslationService }, { type: i0.ChangeDetectorRef }], propDecorators: { displayEmpty: [{
|
|
230
230
|
type: Input
|
|
231
231
|
}], copyToClipboardAction: [{
|
|
@@ -237,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
237
237
|
}], displayLabelForChips: [{
|
|
238
238
|
type: Input
|
|
239
239
|
}] } });
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC12aWV3LXRleHRpdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvY2FyZC12aWV3L2NvbXBvbmVudHMvY2FyZC12aWV3LXRleHRpdGVtL2NhcmQtdmlldy10ZXh0aXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2NhcmQtdmlldy9jb21wb25lbnRzL2NhcmQtdmlldy10ZXh0aXRlbS9jYXJkLXZpZXctdGV4dGl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUs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ZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhcmQtdmlldy10ZXh0aXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2FyZFZpZXcgfSBmcm9tICcuLi9iYXNlLWNhcmQtdmlldyc7XG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCwgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY2xpcGJvYXJkL2NsaXBib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZFZpZXdJdGVtVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jYXJkLXZpZXctaXRlbS12YWxpZGF0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVBBUkFUT1IgPSAnLCAnO1xuY29uc3QgdGVtcGxhdGVUeXBlcyA9IHtcbiAgICBjbGlja2FibGVUZW1wbGF0ZTogJ2NsaWNrYWJsZVRlbXBsYXRlJyxcbiAgICBtdWx0aWxpbmVUZW1wbGF0ZTogJ211bHRpbGluZVRlbXBsYXRlJyxcbiAgICBjaGlwc1RlbXBsYXRlOiAnY2hpcHNUZW1wbGF0ZScsXG4gICAgZW1wdHlUZW1wbGF0ZTogJ2VtcHR5VGVtcGxhdGUnLFxuICAgIGRlZmF1bHRUZW1wbGF0ZTogJ2RlZmF1bHRUZW1wbGF0ZSdcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNhcmQtdmlldy10ZXh0aXRlbScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0U25hY2tCYXJNb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJkLXZpZXctdGV4dGl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhcmQtdmlldy10ZXh0aXRlbS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1jYXJkLXZpZXctdGV4dGl0ZW0nIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2FyZFZpZXdUZXh0SXRlbUNvbXBvbmVudCBleHRlbmRzIEJhc2VDYXJkVmlldzxDYXJkVmlld1RleHRJdGVtTW9kZWw+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlFbXB0eSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvcHlUb0NsaXBib2FyZEFjdGlvbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHVzZUNoaXBzRm9yTXVsdGlWYWx1ZVByb3BlcnR5ID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlWYWx1ZVNlcGFyYXRvcjogc3RyaW5nID0gREVGQVVMVF9TRVBBUkFUT1I7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlMYWJlbEZvckNoaXBzID0gZmFsc2U7XG5cbiAgICBlZGl0ZWRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXJyb3JzOiBDYXJkVmlld0l0ZW1WYWxpZGF0b3JbXTtcbiAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcbiAgICB0ZXh0SW5wdXQgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucHJvcGVydHk/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRJbnB1dC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCh0ZXh0SW5wdXRWYWx1ZSkgPT4gdGV4dElucHV0VmFsdWUgIT09IHRoaXMuZWRpdGVkVmFsdWUgJiYgdGV4dElucHV0VmFsdWUgIT09IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0ZXh0SW5wdXRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFZhbHVlID0gdGV4dElucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5zZXRUZW1wbGF0ZVR5cGUoKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dElucHV0LmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRlbXBsYXRlVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1Byb3BlcnR5IHx8IHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGlja2FibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9IHRlbXBsYXRlVHlwZXMuY2xpY2thYmxlVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDaGlwVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9IHRlbXBsYXRlVHlwZXMuY2hpcHNUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGUgPSB0ZW1wbGF0ZVR5cGVzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVUeXBlID0gdGVtcGxhdGVUeXBlcy5lbXB0eVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGlwVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGVkVmFsdWUgPSB0aGlzLnByb3BlcnR5LnZhbHVlID8gQXJyYXkuZnJvbSh0aGlzLnByb3BlcnR5LnZhbHVlKSA6IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lZGl0ZWRWYWx1ZSA9IHRoaXMucHJvcGVydHkuZGlzcGxheVZhbHVlO1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUodGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0RXJyb3JNZXNzYWdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRFcnJvck1lc3NhZ2VzKCkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmlzVmFsaWQodGhpcy5lZGl0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5LnZhbHVlID0gdGhpcy5wcmVwYXJlVmFsdWVGb3JVcGxvYWQodGhpcy5wcm9wZXJ0eSwgdGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UudXBkYXRlKHsgLi4udGhpcy5wcm9wZXJ0eSwgaXNWYWxpZFZhbHVlOiB0cnVlIH0gYXMgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsLCB0aGlzLnByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB0aGlzLnByb3BlcnR5LmdldFZhbGlkYXRpb25FcnJvcnModGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UudXBkYXRlKHsgLi4udGhpcy5wcm9wZXJ0eSwgaXNWYWxpZFZhbHVlOiBmYWxzZSB9IGFzIENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCwgdGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmVwYXJlVmFsdWVGb3JVcGxvYWQocHJvcGVydHk6IENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCwgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm11bHRpdmFsdWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KHRoaXMubXVsdGlWYWx1ZVNlcGFyYXRvci50cmltKCkpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS50eXBlID09PSAnaW50JyB8fCBwcm9wZXJ0eS50eXBlID09PSAnbG9uZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlSW50TG9uZ1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlVmFsdWVGcm9tTGlzdChpdGVtSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmVkaXRlZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0ZWRWYWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFZhbHVlVG9MaXN0KG5ld0xpc3RJdGVtOiBNYXRDaGlwSW5wdXRFdmVudCkge1xuICAgICAgICBjb25zdCBjaGlwSW5wdXQgPSBuZXdMaXN0SXRlbS5jaGlwSW5wdXQuaW5wdXRFbGVtZW50O1xuICAgICAgICBsZXQgY2hpcFZhbHVlID0gbmV3TGlzdEl0ZW0udmFsdWUudHJpbSgpIHx8ICcnO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0ZWRWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmlzVmFsaWQoY2hpcFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydHkudHlwZSA9PT0gJ2ludCcgfHwgdGhpcy5wcm9wZXJ0eS50eXBlID09PSAnbG9uZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaXBWYWx1ZSA9IHRoaXMucHJlcGFyZUludExvbmdWYWx1ZShjaGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGVkVmFsdWUucHVzaChjaGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjaGlwSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpcElucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IHRoaXMucHJvcGVydHkuZ2V0VmFsaWRhdGlvbkVycm9ycyhjaGlwVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BlcnR5LmNsaWNrQ2FsbEJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydHkuY2xpY2tDYWxsQmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UuY2xpY2tlZCh0aGlzLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZWRpdGVkVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWx1ZVRvQ29weTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvcHlUb0NsaXBib2FyZEFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdDT1JFLk1FVEFEQVRBLkFDQ0VTU0lCSUxJVFkuQ09QWV9UT19DTElQQk9BUkRfTUVTU0FHRScpO1xuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLmNvcHlDb250ZW50VG9DbGlwYm9hcmQodmFsdWVUb0NvcHksIGNsaXBib2FyZE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5kb1RleHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlaJyAmJiB0aGlzLnRleHRJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNob3dQcm9wZXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUVtcHR5IHx8ICF0aGlzLnByb3BlcnR5LmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0NsaWNrYWJsZUljb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ljb24gJiYgdGhpcy5lZGl0YWJsZTtcbiAgICB9XG5cbiAgICBnZXQgaXNDbGlja2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmNsaWNrYWJsZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmVycm9ycz8ubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBpc0NoaXBWaWV3RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkubXVsdGl2YWx1ZWQgJiYgdGhpcy51c2VDaGlwc0Zvck11bHRpVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0xhYmVsRm9yQ2hpcHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlMYWJlbEZvckNoaXBzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUludExvbmdWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnRydW5jKE51bWJlcih2YWx1ZSkpKTtcbiAgICB9XG59XG4iLCI8ZGl2IFtuZ1N3aXRjaF09XCJ0ZW1wbGF0ZVR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtcHJvcGVydHktZmllbGQgYWRmLWNhcmQtdGV4dGl0ZW0tZmllbGRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZC1vbmx5JzogIWlzRWRpdGFibGVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UHJvcGVydHkgfHwgaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWxhYmVsLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS1yZWFkb25seS12YWx1ZSc6IGlzUmVhZG9ubHlQcm9wZXJ0eVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcm9wZXJ0eS5tdWx0aWxpbmVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LXZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS1yZWFkb25seS12YWx1ZSc6IGlzUmVhZG9ubHlQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS12YWx1ZS1oYXMtZXJyb3InOiBpc0VkaXRhYmxlICYmIGhhc0Vycm9yc1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wZXJ0eS5kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dElucHV0XCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKHByb3BlcnR5LmRpc3BsYXlWYWx1ZSlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLkNPUFlfVE9fQ0xJUEJPQVJEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLXZhbHVlLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cInVuZG9UZXh0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wZXJ0eS5tdWx0aWxpbmVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtjZGtUZXh0YXJlYUF1dG9zaXplXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjZGtBdXRvc2l6ZU1pblJvd3NdPVwiMVwiXG4gICAgICAgICAgICAgICAgW2Nka0F1dG9zaXplTWF4Um93c109XCI1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS12YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWVkaXRhYmxlJzogZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZG9ubHktdmFsdWUnOiBpc1JlYWRvbmx5UHJvcGVydHlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcGVydHkuZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRJbnB1dFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLXZhbHVlLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjaGlwc1RlbXBsYXRlJ1wiXG4gICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWZpZWxkIGFkZi10ZXh0aXRlbS1jaGlwLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYWRmLXByb3BlcnR5LXJlYWQtb25seSc6ICFpc0VkaXRhYmxlIH1cIlxuICAgID5cbiAgICAgICAgPG1hdC1sYWJlbFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93TGFiZWxGb3JDaGlwc1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2NhcmQtdGV4dGl0ZW0tbGFiZWwtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS1sYWJlbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwRWxlbWVudCBjbGFzcz1cImFkZi10ZXh0aXRlbS1jaGlwLWxpc3RcIj5cbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKm5nRm9yPVwibGV0IHByb3BlcnR5VmFsdWUgb2YgZWRpdGVkVmFsdWU7IGxldCBpZHggPSBpbmRleFwiIFtyZW1vdmFibGVdPVwiaXNFZGl0YWJsZVwiIChyZW1vdmVkKT1cInJlbW92ZVZhbHVlRnJvbUxpc3QoaWR4KVwiPlxuICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5VmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0VkaXRhYmxlXCIgbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICpuZ0lmPVwiaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS1maWVsZCBhZGYtdGV4dGl0ZW0tY2hpcC1saXN0LWlucHV0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1wcm9wZXJ0eS1yZWFkLW9ubHknOiAhaXNFZGl0YWJsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS12YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWVkaXRhYmxlJzogZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZG9ubHktdmFsdWUnOiBpc1JlYWRvbmx5UHJvcGVydHlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWRpdGVkVmFsdWUgPyAnJyA6IChwcm9wZXJ0eS5kZWZhdWx0IHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwRWxlbWVudFwiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVmFsdWVUb0xpc3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWVkaXRjaGlwaW5wdXQtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NsaWNrYWJsZVRlbXBsYXRlJ1wiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImFkZi10ZXh0aXRlbS1jbGlja2FibGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktcmVhZC1vbmx5JzogIWlzRWRpdGFibGUgfVwiXG4gICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInY2FyZC10ZXh0aXRlbS10b2dnbGUtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJjbGlja2VkKClcIlxuICAgICAgICAoY2xpY2spPVwiY2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1wcm9wZXJ0eS1maWVsZCBhZGYtY2FyZC10ZXh0aXRlbS1maWVsZFwiIFtmbG9hdExhYmVsXT1cIidhbHdheXMnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UHJvcGVydHkgfHwgaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWxhYmVsLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInByb3BlcnR5LmlucHV0VHlwZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtcHJvcGVydHktdmFsdWVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS12YWx1ZS1lZGl0YWJsZSc6IGVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXRleHRpdGVtLWNsaWNrYWJsZS12YWx1ZSc6IGlzQ2xpY2thYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXJlYWRvbmx5LXZhbHVlJzogaXNSZWFkb25seVByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWhhcy1lcnJvcic6IGlzRWRpdGFibGUgJiYgaGFzRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWhhcy1pY29uLXN1ZmZpeCc6IHNob3dDbGlja2FibGVJY29uXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5LmRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInVwZGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ1cGRhdGUoKVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFpc0VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2NhcmQtdGV4dGl0ZW0tdmFsdWUtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NsaWNrYWJsZUljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRleHRpdGVtLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWNsaWNrYWJsZS1pY29uLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi10ZXh0aXRlbS1pY29uXCI+e3sgcHJvcGVydHk/Lmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZW1wdHlUZW1wbGF0ZSdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtdGV4dGl0ZW0tZGVmYXVsdC12YWx1ZVwiPnt7IHByb3BlcnR5LmRlZmF1bHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBoYXNFcnJvcnNcIiBjbGFzcz1cImFkZi10ZXh0aXRlbS1lcnJvclwiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInY2FyZC10ZXh0aXRlbS1lcnJvci0nICsgcHJvcGVydHkua2V5XCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXJyb3JzXCI+e3sgZXJyb3IubWVzc2FnZSB8IHRyYW5zbGF0ZSA6IGVycm9yIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L21hdC1lcnJvcj5cbjwvZGl2PlxuIl19
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC12aWV3LXRleHRpdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvY2FyZC12aWV3L2NvbXBvbmVudHMvY2FyZC12aWV3LXRleHRpdGVtL2NhcmQtdmlldy10ZXh0aXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2NhcmQtdmlldy9jb21wb25lbnRzL2NhcmQtdmlldy10ZXh0aXRlbS9jYXJkLXZpZXctdGV4dGl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUs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ZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhcmQtdmlldy10ZXh0aXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2FyZFZpZXcgfSBmcm9tICcuLi9iYXNlLWNhcmQtdmlldyc7XG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCwgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY2xpcGJvYXJkL2NsaXBib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZFZpZXdJdGVtVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jYXJkLXZpZXctaXRlbS12YWxpZGF0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVBBUkFUT1IgPSAnLCAnO1xuY29uc3QgdGVtcGxhdGVUeXBlcyA9IHtcbiAgICBjbGlja2FibGVUZW1wbGF0ZTogJ2NsaWNrYWJsZVRlbXBsYXRlJyxcbiAgICBtdWx0aWxpbmVUZW1wbGF0ZTogJ211bHRpbGluZVRlbXBsYXRlJyxcbiAgICBjaGlwc1RlbXBsYXRlOiAnY2hpcHNUZW1wbGF0ZScsXG4gICAgZW1wdHlUZW1wbGF0ZTogJ2VtcHR5VGVtcGxhdGUnLFxuICAgIGRlZmF1bHRUZW1wbGF0ZTogJ2RlZmF1bHRUZW1wbGF0ZSdcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNhcmQtdmlldy10ZXh0aXRlbScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0U25hY2tCYXJNb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJkLXZpZXctdGV4dGl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhcmQtdmlldy10ZXh0aXRlbS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1jYXJkLXZpZXctdGV4dGl0ZW0nIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2FyZFZpZXdUZXh0SXRlbUNvbXBvbmVudCBleHRlbmRzIEJhc2VDYXJkVmlldzxDYXJkVmlld1RleHRJdGVtTW9kZWw+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlFbXB0eSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvcHlUb0NsaXBib2FyZEFjdGlvbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHVzZUNoaXBzRm9yTXVsdGlWYWx1ZVByb3BlcnR5ID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlWYWx1ZVNlcGFyYXRvcjogc3RyaW5nID0gREVGQVVMVF9TRVBBUkFUT1I7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlMYWJlbEZvckNoaXBzID0gZmFsc2U7XG5cbiAgICBlZGl0ZWRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXJyb3JzOiBDYXJkVmlld0l0ZW1WYWxpZGF0b3JbXTtcbiAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcbiAgICB0ZXh0SW5wdXQgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucHJvcGVydHk/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRJbnB1dC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCh0ZXh0SW5wdXRWYWx1ZSkgPT4gdGV4dElucHV0VmFsdWUgIT09IHRoaXMuZWRpdGVkVmFsdWUgJiYgdGV4dElucHV0VmFsdWUgIT09IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0ZXh0SW5wdXRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFZhbHVlID0gdGV4dElucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5zZXRUZW1wbGF0ZVR5cGUoKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dElucHV0LmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRlbXBsYXRlVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1Byb3BlcnR5IHx8IHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGlja2FibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9IHRlbXBsYXRlVHlwZXMuY2xpY2thYmxlVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDaGlwVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9IHRlbXBsYXRlVHlwZXMuY2hpcHNUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGUgPSB0ZW1wbGF0ZVR5cGVzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVUeXBlID0gdGVtcGxhdGVUeXBlcy5lbXB0eVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGlwVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGVkVmFsdWUgPSB0aGlzLnByb3BlcnR5LnZhbHVlID8gQXJyYXkuZnJvbSh0aGlzLnByb3BlcnR5LnZhbHVlKSA6IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lZGl0ZWRWYWx1ZSA9IHRoaXMucHJvcGVydHkuZGlzcGxheVZhbHVlO1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUodGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0RXJyb3JNZXNzYWdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRFcnJvck1lc3NhZ2VzKCkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmlzVmFsaWQodGhpcy5lZGl0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5LnZhbHVlID0gdGhpcy5wcmVwYXJlVmFsdWVGb3JVcGxvYWQodGhpcy5wcm9wZXJ0eSwgdGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UudXBkYXRlKHsgLi4udGhpcy5wcm9wZXJ0eSwgaXNWYWxpZFZhbHVlOiB0cnVlIH0gYXMgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsLCB0aGlzLnByb3BlcnR5LnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB0aGlzLnByb3BlcnR5LmdldFZhbGlkYXRpb25FcnJvcnModGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UudXBkYXRlKHsgLi4udGhpcy5wcm9wZXJ0eSwgaXNWYWxpZFZhbHVlOiBmYWxzZSB9IGFzIENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCwgdGhpcy5lZGl0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmVwYXJlVmFsdWVGb3JVcGxvYWQocHJvcGVydHk6IENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCwgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm11bHRpdmFsdWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KHRoaXMubXVsdGlWYWx1ZVNlcGFyYXRvci50cmltKCkpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS50eXBlID09PSAnaW50JyB8fCBwcm9wZXJ0eS50eXBlID09PSAnbG9uZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlSW50TG9uZ1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlVmFsdWVGcm9tTGlzdChpdGVtSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmVkaXRlZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0ZWRWYWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFZhbHVlVG9MaXN0KG5ld0xpc3RJdGVtOiBNYXRDaGlwSW5wdXRFdmVudCkge1xuICAgICAgICBjb25zdCBjaGlwSW5wdXQgPSBuZXdMaXN0SXRlbS5jaGlwSW5wdXQuaW5wdXRFbGVtZW50O1xuICAgICAgICBsZXQgY2hpcFZhbHVlID0gbmV3TGlzdEl0ZW0udmFsdWUudHJpbSgpIHx8ICcnO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0ZWRWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmlzVmFsaWQoY2hpcFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydHkudHlwZSA9PT0gJ2ludCcgfHwgdGhpcy5wcm9wZXJ0eS50eXBlID09PSAnbG9uZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaXBWYWx1ZSA9IHRoaXMucHJlcGFyZUludExvbmdWYWx1ZShjaGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGVkVmFsdWUucHVzaChjaGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjaGlwSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpcElucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IHRoaXMucHJvcGVydHkuZ2V0VmFsaWRhdGlvbkVycm9ycyhjaGlwVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BlcnR5LmNsaWNrQ2FsbEJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydHkuY2xpY2tDYWxsQmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJkVmlld1VwZGF0ZVNlcnZpY2UuY2xpY2tlZCh0aGlzLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZWRpdGVkVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWx1ZVRvQ29weTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvcHlUb0NsaXBib2FyZEFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdDT1JFLk1FVEFEQVRBLkFDQ0VTU0lCSUxJVFkuQ09QWV9UT19DTElQQk9BUkRfTUVTU0FHRScpO1xuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLmNvcHlDb250ZW50VG9DbGlwYm9hcmQodmFsdWVUb0NvcHksIGNsaXBib2FyZE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5kb1RleHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlaJyAmJiB0aGlzLnRleHRJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNob3dQcm9wZXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUVtcHR5IHx8ICF0aGlzLnByb3BlcnR5LmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0NsaWNrYWJsZUljb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ljb24gJiYgdGhpcy5lZGl0YWJsZTtcbiAgICB9XG5cbiAgICBnZXQgaXNDbGlja2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmNsaWNrYWJsZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmVycm9ycz8ubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBpc0NoaXBWaWV3RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkubXVsdGl2YWx1ZWQgJiYgdGhpcy51c2VDaGlwc0Zvck11bHRpVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0xhYmVsRm9yQ2hpcHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlMYWJlbEZvckNoaXBzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUludExvbmdWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnRydW5jKE51bWJlcih2YWx1ZSkpKTtcbiAgICB9XG59XG4iLCI8ZGl2IFtuZ1N3aXRjaF09XCJ0ZW1wbGF0ZVR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtcHJvcGVydHktZmllbGQgYWRmLWNhcmQtdGV4dGl0ZW0tZmllbGRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZC1vbmx5JzogIWlzRWRpdGFibGVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UHJvcGVydHkgfHwgaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWxhYmVsLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS1yZWFkb25seS12YWx1ZSc6IGlzUmVhZG9ubHlQcm9wZXJ0eVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcm9wZXJ0eS5tdWx0aWxpbmVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LXZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS1yZWFkb25seS12YWx1ZSc6IGlzUmVhZG9ubHlQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS12YWx1ZS1oYXMtZXJyb3InOiBpc0VkaXRhYmxlICYmIGhhc0Vycm9yc1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wZXJ0eS5kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dElucHV0XCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKHByb3BlcnR5LmRpc3BsYXlWYWx1ZSlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09SRS5NRVRBREFUQS5BQ1RJT05TLkNPUFlfVE9fQ0xJUEJPQVJEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLXZhbHVlLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cInVuZG9UZXh0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wZXJ0eS5tdWx0aWxpbmVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtjZGtUZXh0YXJlYUF1dG9zaXplXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjZGtBdXRvc2l6ZU1pblJvd3NdPVwiMVwiXG4gICAgICAgICAgICAgICAgW2Nka0F1dG9zaXplTWF4Um93c109XCI1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS12YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWVkaXRhYmxlJzogZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZG9ubHktdmFsdWUnOiBpc1JlYWRvbmx5UHJvcGVydHlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcGVydHkuZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRJbnB1dFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLXZhbHVlLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjaGlwc1RlbXBsYXRlJ1wiXG4gICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWZpZWxkIGFkZi10ZXh0aXRlbS1jaGlwLWxpc3QtY29udGFpbmVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYWRmLXByb3BlcnR5LXJlYWQtb25seSc6ICFpc0VkaXRhYmxlIH1cIlxuICAgID5cbiAgICAgICAgPG1hdC1sYWJlbFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93TGFiZWxGb3JDaGlwc1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2NhcmQtdGV4dGl0ZW0tbGFiZWwtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS1sYWJlbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwRWxlbWVudCBjbGFzcz1cImFkZi10ZXh0aXRlbS1jaGlwLWxpc3RcIj5cbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKm5nRm9yPVwibGV0IHByb3BlcnR5VmFsdWUgb2YgZWRpdGVkVmFsdWU7IGxldCBpZHggPSBpbmRleFwiIFtyZW1vdmFibGVdPVwiaXNFZGl0YWJsZVwiIChyZW1vdmVkKT1cInJlbW92ZVZhbHVlRnJvbUxpc3QoaWR4KVwiPlxuICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5VmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0VkaXRhYmxlXCIgbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICpuZ0lmPVwiaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS1maWVsZCBhZGYtdGV4dGl0ZW0tY2hpcC1saXN0LWlucHV0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1wcm9wZXJ0eS1yZWFkLW9ubHknOiAhaXNFZGl0YWJsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1wcm9wZXJ0eS12YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWVkaXRhYmxlJzogZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtcHJvcGVydHktcmVhZG9ubHktdmFsdWUnOiBpc1JlYWRvbmx5UHJvcGVydHlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IHByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWRpdGVkVmFsdWUgPyAnJyA6IChwcm9wZXJ0eS5kZWZhdWx0IHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwRWxlbWVudFwiXG4gICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVmFsdWVUb0xpc3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWVkaXRjaGlwaW5wdXQtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NsaWNrYWJsZVRlbXBsYXRlJ1wiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImFkZi10ZXh0aXRlbS1jbGlja2FibGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktcmVhZC1vbmx5JzogIWlzRWRpdGFibGUgfVwiXG4gICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInY2FyZC10ZXh0aXRlbS10b2dnbGUtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJjbGlja2VkKClcIlxuICAgICAgICAoY2xpY2spPVwiY2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1wcm9wZXJ0eS1maWVsZCBhZGYtY2FyZC10ZXh0aXRlbS1maWVsZFwiIFtmbG9hdExhYmVsXT1cIidhbHdheXMnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UHJvcGVydHkgfHwgaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWxhYmVsLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb3BlcnR5LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtcHJvcGVydHktdmFsdWUtZWRpdGFibGUnOiBlZGl0YWJsZSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBwcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInByb3BlcnR5LmlucHV0VHlwZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtcHJvcGVydHktdmFsdWVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgcHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1wcm9wZXJ0eS12YWx1ZS1lZGl0YWJsZSc6IGVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXRleHRpdGVtLWNsaWNrYWJsZS12YWx1ZSc6IGlzQ2xpY2thYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXJlYWRvbmx5LXZhbHVlJzogaXNSZWFkb25seVByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWhhcy1lcnJvcic6IGlzRWRpdGFibGUgJiYgaGFzRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLXByb3BlcnR5LXZhbHVlLWhhcy1pY29uLXN1ZmZpeCc6IHNob3dDbGlja2FibGVJY29uXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5LmRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInVwZGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ1cGRhdGUoKVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFpc0VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2NhcmQtdGV4dGl0ZW0tdmFsdWUtJyArIHByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NsaWNrYWJsZUljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRleHRpdGVtLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidjYXJkLXRleHRpdGVtLWNsaWNrYWJsZS1pY29uLScgKyBwcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi10ZXh0aXRlbS1pY29uXCI+e3sgcHJvcGVydHk/Lmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZW1wdHlUZW1wbGF0ZSdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtdGV4dGl0ZW0tZGVmYXVsdC12YWx1ZVwiPnt7IHByb3BlcnR5LmRlZmF1bHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBoYXNFcnJvcnNcIiBjbGFzcz1cImFkZi10ZXh0aXRlbS1lcnJvclwiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInY2FyZC10ZXh0aXRlbS1lcnJvci0nICsgcHJvcGVydHkua2V5XCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXJyb3JzXCI+e3sgZXJyb3IubWVzc2FnZSB8IHRyYW5zbGF0ZSA6IGVycm9yIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L21hdC1lcnJvcj5cbjwvZGl2PlxuIl19
|
|
@@ -29,7 +29,7 @@ export class FormModel {
|
|
|
29
29
|
static { this.SAVE_OUTCOME = '$save'; }
|
|
30
30
|
static { this.COMPLETE_OUTCOME = '$complete'; }
|
|
31
31
|
static { this.START_PROCESS_OUTCOME = '$startProcess'; }
|
|
32
|
-
constructor(json, formValues, readOnly = false, formService, enableFixedSpace) {
|
|
32
|
+
constructor(json, formValues, readOnly = false, formService, enableFixedSpace, injectedFieldValidators) {
|
|
33
33
|
this.formService = formService;
|
|
34
34
|
this.taskName = FormModel.UNSET_TASK_NAME;
|
|
35
35
|
this.fieldsCache = [];
|
|
@@ -37,7 +37,7 @@ export class FormModel {
|
|
|
37
37
|
this.tabs = [];
|
|
38
38
|
this.fields = [];
|
|
39
39
|
this.outcomes = [];
|
|
40
|
-
this.fieldValidators = [
|
|
40
|
+
this.fieldValidators = [];
|
|
41
41
|
this.customFieldTemplates = {};
|
|
42
42
|
this.readOnly = false;
|
|
43
43
|
this.isValid = true;
|
|
@@ -68,6 +68,7 @@ export class FormModel {
|
|
|
68
68
|
}
|
|
69
69
|
this.parseOutcomes();
|
|
70
70
|
}
|
|
71
|
+
this.loadInjectedFieldValidators(injectedFieldValidators);
|
|
71
72
|
this.validateForm();
|
|
72
73
|
}
|
|
73
74
|
onFormFieldChanged(field) {
|
|
@@ -376,5 +377,8 @@ export class FormModel {
|
|
|
376
377
|
variable.value = value;
|
|
377
378
|
}
|
|
378
379
|
}
|
|
380
|
+
loadInjectedFieldValidators(injectedFieldValidators) {
|
|
381
|
+
this.fieldValidators = injectedFieldValidators ? [...FORM_FIELD_VALIDATORS, ...injectedFieldValidators] : [...FORM_FIELD_VALIDATORS];
|
|
382
|
+
}
|
|
379
383
|
}
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvY29yZS9mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBc0IscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtuRixPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUE2QmhHLE1BQU0sT0FBTyxTQUFTO2FBQ1gsb0JBQWUsR0FBVyxlQUFlLEFBQTFCLENBQTJCO2FBQzFDLGlCQUFZLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMvQixxQkFBZ0IsR0FBVyxXQUFXLEFBQXRCLENBQXVCO2FBQ3ZDLDBCQUFxQixHQUFXLGVBQWUsQUFBMUIsQ0FBMkI7SUE4QnZELFlBQ0ksSUFBVSxFQUNWLFVBQXVCLEVBQ3ZCLFdBQW9CLEtBQUssRUFDZixXQUFtQyxFQUM3QyxnQkFBMEI7UUFEaEIsZ0JBQVcsR0FBWCxXQUFXLENB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RSxDQUFDO1lBQ1IsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLEtBQVU7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvcm1GaWVsZEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZXZlbnRzL2Zvcm0tZmllbGQuZXZlbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtRmllbGRFdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy92YWxpZGF0ZS1mb3JtLWZpZWxkLmV2ZW50JztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZXZlbnRzL3ZhbGlkYXRlLWZvcm0uZXZlbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyTW9kZWwgfSBmcm9tICcuL2NvbnRhaW5lci5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtRmllbGRUeXBlcyB9IGZyb20gJy4vZm9ybS1maWVsZC10eXBlcyc7XG5pbXBvcnQgeyBGb3JtRmllbGRNb2RlbCB9IGZyb20gJy4vZm9ybS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtVmFsdWVzIH0gZnJvbSAnLi9mb3JtLXZhbHVlcyc7XG5pbXBvcnQgeyBUYWJNb2RlbCB9IGZyb20gJy4vdGFiLm1vZGVsJztcblxuaW1wb3J0IHsgRm9ybVZhcmlhYmxlTW9kZWwgfSBmcm9tICcuL2Zvcm0tdmFyaWFibGUubW9kZWwnO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhcmlhYmxlTW9kZWwgfSBmcm9tICcuL3Byb2Nlc3MtdmFyaWFibGUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybU91dGNvbWVNb2RlbCB9IGZyb20gJy4vZm9ybS1vdXRjb21lLm1vZGVsJztcbmltcG9ydCB7IEZvcm1GaWVsZFZhbGlkYXRvciwgRk9STV9GSUVMRF9WQUxJREFUT1JTIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBGb3JtRmllbGRUZW1wbGF0ZXMgfSBmcm9tICcuL2Zvcm0tZmllbGQtdGVtcGxhdGVzJztcbmltcG9ydCB7IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwgfSBmcm9tICcuL3VwbG9hZC13aWRnZXQtY29udGVudC1saW5rLm1vZGVsJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm9jZXNzRm9ybU1vZGVsIH0gZnJvbSAnLi9wcm9jZXNzLWZvcm0tbW9kZWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdpZGdldFR5cGVFbnVtLCBXaWRnZXRWaXNpYmlsaXR5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvd2lkZ2V0LXZpc2liaWxpdHkubW9kZWwnO1xuaW1wb3J0IHsgVGhlbWVNb2RlbCB9IGZyb20gJy4vdGhlbWUubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1NZXNzYWdlIHtcbiAgICBzaG93OiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlcHJlc2VudGF0aW9uTW9kZWwge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIGlkPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgdGFza0lkPzogc3RyaW5nO1xuICAgIHRhc2tOYW1lPzogc3RyaW5nO1xuICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ/OiBzdHJpbmc7XG4gICAgY3VzdG9tRmllbGRUZW1wbGF0ZXM/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICAgIHNlbGVjdGVkT3V0Y29tZT86IHN0cmluZztcbiAgICBmaWVsZHM/OiBhbnlbXTtcbiAgICB0YWJzPzogYW55W107XG4gICAgb3V0Y29tZXM/OiBhbnlbXTtcbiAgICBmb3JtRGVmaW5pdGlvbj86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICBmaWVsZHM/OiBhbnlbXTtcbiAgICB9O1xuICAgIGRpc3BsYXlNb2RlOiBzdHJpbmc7XG4gICAgdGhlbWU/OiBUaGVtZU1vZGVsO1xufVxuZXhwb3J0IGNsYXNzIEZvcm1Nb2RlbCBpbXBsZW1lbnRzIFByb2Nlc3NGb3JtTW9kZWwge1xuICAgIHN0YXRpYyBVTlNFVF9UQVNLX05BTUU6IHN0cmluZyA9ICdOYW1lbGVzcyB0YXNrJztcbiAgICBzdGF0aWMgU0FWRV9PVVRDT01FOiBzdHJpbmcgPSAnJHNhdmUnO1xuICAgIHN0YXRpYyBDT01QTEVURV9PVVRDT01FOiBzdHJpbmcgPSAnJGNvbXBsZXRlJztcbiAgICBzdGF0aWMgU1RBUlRfUFJPQ0VTU19PVVRDT01FOiBzdHJpbmcgPSAnJHN0YXJ0UHJvY2Vzcyc7XG5cbiAgICByZWFkb25seSBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSB0YXNrSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBjb25maXJtTWVzc2FnZTogQ29uZmlybU1lc3NhZ2U7XG4gICAgcmVhZG9ubHkgdGFza05hbWUgPSBGb3JtTW9kZWwuVU5TRVRfVEFTS19OQU1FO1xuICAgIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBzZWxlY3RlZE91dGNvbWU6IHN0cmluZztcbiAgICByZWFkb25seSBlbmFibGVGaXhlZFNwYWNlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGRpc3BsYXlNb2RlOiBhbnk7XG5cbiAgICBmaWVsZHNDYWNoZTogRm9ybUZpZWxkTW9kZWxbXSA9IFtdO1xuXG4gICAganNvbjogYW55O1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHZhbHVlczogRm9ybVZhbHVlcyA9IHt9O1xuICAgIHRhYnM6IFRhYk1vZGVsW10gPSBbXTtcbiAgICBmaWVsZHM6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdID0gW107XG4gICAgb3V0Y29tZXM6IEZvcm1PdXRjb21lTW9kZWxbXSA9IFtdO1xuICAgIGZpZWxkVmFsaWRhdG9yczogRm9ybUZpZWxkVmFsaWRhdG9yW10gPSBbLi4uRk9STV9GSUVMRF9WQUxJREFUT1JTXTtcbiAgICBjdXN0b21GaWVsZFRlbXBsYXRlczogRm9ybUZpZWxkVGVtcGxhdGVzID0ge307XG4gICAgdGhlbWU/OiBUaGVtZU1vZGVsO1xuXG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgcmVhZE9ubHkgPSBmYWxzZTtcbiAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBwcm9jZXNzVmFyaWFibGVzOiBQcm9jZXNzVmFyaWFibGVNb2RlbFtdID0gW107XG4gICAgdmFyaWFibGVzOiBGb3JtVmFyaWFibGVNb2RlbFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAganNvbj86IGFueSxcbiAgICAgICAgZm9ybVZhbHVlcz86IEZvcm1WYWx1ZXMsXG4gICAgICAgIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgICAgIHByb3RlY3RlZCBmb3JtU2VydmljZT86IEZvcm1WYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgZW5hYmxlRml4ZWRTcGFjZT86IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0ganNvbi5pZDtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IGpzb24ubmFtZTtcbiAgICAgICAgICAgIHRoaXMudGFza0lkID0ganNvbi50YXNrSWQ7XG4gICAgICAgICAgICB0aGlzLnRhc2tOYW1lID0ganNvbi50YXNrTmFtZSB8fCBqc29uLm5hbWUgfHwgRm9ybU1vZGVsLlVOU0VUX1RBU0tfTkFNRTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JZCA9IGpzb24ucHJvY2Vzc0RlZmluaXRpb25JZDtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRUZW1wbGF0ZXMgPSBqc29uLmN1c3RvbUZpZWxkVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE91dGNvbWUgPSBqc29uLnNlbGVjdGVkT3V0Y29tZTtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0ganNvbi5jbGFzc05hbWUgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IGpzb24udmFyaWFibGVzIHx8IGpzb24uZm9ybURlZmluaXRpb24/LnZhcmlhYmxlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1ZhcmlhYmxlcyA9IGpzb24ucHJvY2Vzc1ZhcmlhYmxlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRml4ZWRTcGFjZSA9IGVuYWJsZUZpeGVkU3BhY2U7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1NZXNzYWdlID0ganNvbi5jb25maXJtTWVzc2FnZSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGUgPSBqc29uLmRpc3BsYXlNb2RlO1xuICAgICAgICAgICAgdGhpcy50aGVtZSA9IGpzb24udGhlbWUgfHwganNvbi5mb3JtRGVmaW5pdGlvbj8udGhlbWU7XG5cbiAgICAgICAgICAgIHRoaXMudGFicyA9IChqc29uLnRhYnMgfHwgW10pLm1hcCgodGFiSnNvbikgPT4gbmV3IFRhYk1vZGVsKHRoaXMsIHRhYkpzb24pKTtcblxuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLnBhcnNlUm9vdEZpZWxkcyhqc29uKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzQ2FjaGUgPSB0aGlzLmdldEZvcm1GaWVsZHMoKTtcblxuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKGZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBhcnNlT3V0Y29tZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gICAgfVxuXG4gICAgb25Gb3JtRmllbGRDaGFuZ2VkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQpO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5uZXh0KG5ldyBGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGVudGlyZSBmb3JtIGFuZCBhbGwgZm9ybSBmaWVsZHMuXG4gICAgICovXG4gICAgdmFsaWRhdGVGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUZvcm1FdmVudDogYW55ID0gbmV3IFZhbGlkYXRlRm9ybUV2ZW50KHRoaXMpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yc0ZpZWxkOiBGb3JtRmllbGRNb2RlbFtdID0gdGhpcy5maWVsZHNDYWNoZS5maWx0ZXIoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUZvcm1GaWVsZFR5cGVzLmlzUmVhY3RpdmVUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFmaWVsZC52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudmFsaWRhdGlvblN1bW1hcnkuaXNBY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gZXJyb3JzRmllbGQubGVuZ3RoIDw9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybUV2ZW50LmlzVmFsaWQgPSB0aGlzLmlzVmFsaWQ7XG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1FdmVudC5lcnJvcnNGaWVsZCA9IGVycm9yc0ZpZWxkO1xuICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS52YWxpZGF0ZUZvcm0ubmV4dCh2YWxpZGF0ZUZvcm1FdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYSBzcGVjaWZpYyBmb3JtIGZpZWxkLCB0cmlnZ2VycyBmb3JtIHZhbGlkYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmllbGQgRm9ybSBmaWVsZCB0byB2YWxpZGF0ZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkRXZlbnQgPSBuZXcgVmFsaWRhdGVGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UudmFsaWRhdGVGb3JtRmllbGQubmV4dCh2YWxpZGF0ZUZpZWxkRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkRXZlbnQuaXNWYWxpZCkge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNJbnZhbGlkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghRm9ybUZpZWxkVHlwZXMuaXNSZWFjdGl2ZVR5cGUoZmllbGQudHlwZSkgJiYgIWZpZWxkLnZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzSW52YWxpZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBBY3Rpdml0aSBzdXBwb3J0cyAzIHR5cGVzIG9mIHJvb3QgZmllbGRzOiBjb250YWluZXJ8Z3JvdXB8ZHluYW1pYy10YWJsZVxuICAgIHByaXZhdGUgcGFyc2VSb290RmllbGRzKGpzb246IGFueSk6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdIHtcbiAgICAgICAgbGV0IGZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmIChqc29uLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzID0ganNvbi5maWVsZHM7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbi5mb3JtRGVmaW5pdGlvbj8uZmllbGRzKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBqc29uLmZvcm1EZWZpbml0aW9uLmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50czogKENvbnRhaW5lck1vZGVsIHwgRm9ybUZpZWxkTW9kZWwpW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb290RWxlbWVudDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuRFlOQU1JQ19UQUJMRSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBGb3JtRmllbGRNb2RlbCh0aGlzLCBmaWVsZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBDb250YWluZXJNb2RlbChuZXcgRm9ybUZpZWxkTW9kZWwodGhpcywgZmllbGQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLnRhYikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFicy5maW5kKChjdXJyZW50VGFiKSA9PiBmaWVsZC50YWIgPT09IGN1cnJlbnRUYWIuaWQpO1xuICAgICAgICAgICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiLmZpZWxkcy5wdXNoKGN1cnJlbnRSb290RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb290RWxlbWVudHMucHVzaChjdXJyZW50Um9vdEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3RFbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBleHRlcm5hbCBkYXRhIGFuZCBvdmVycmlkZXMgZmllbGQgdmFsdWVzXG4gICAgLy8gVHlwaWNhbGx5IHVzZWQgd2hlbiBmb3JtIGRlZmluaXRpb24gYW5kIGZvcm0gZGF0YSBjb21pbmcgZnJvbSBkaWZmZXJlbnQgc291cmNlc1xuICAgIHByaXZhdGUgbG9hZERhdGEoZm9ybVZhbHVlczogRm9ybVZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzQ2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlSWQgPSBgdmFyaWFibGVzLiR7ZmllbGQubmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5PdmVycmlkZUZpZWxkVmFsdWVXaXRoUHJvY2Vzc1ZhbHVlKGZpZWxkLCB2YXJpYWJsZUlkLCBmb3JtVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmpzb24udmFsdWUgPSBmb3JtVmFsdWVzW3ZhcmlhYmxlSWRdIHx8IGZvcm1WYWx1ZXNbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQucGFyc2VWYWx1ZShmaWVsZC5qc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FuT3ZlcnJpZGVGaWVsZFZhbHVlV2l0aFByb2Nlc3NWYWx1ZShmaWVsZDogRm9ybUZpZWxkTW9kZWwsIHZhcmlhYmxlSWQ6IHN0cmluZywgZm9ybVZhbHVlczogRm9ybVZhbHVlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIUZvcm1GaWVsZFR5cGVzLmlzQ29uc3RhbnRWYWx1ZVR5cGUoZmllbGQudHlwZSkgJiYgKHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbdmFyaWFibGVJZF0pIHx8IHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbZmllbGQuaWRdKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0RlZmluZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZm9ybSB2YXJpYWJsZSB0aGF0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgYG5hbWVgIG9yIGBpZGAgdmFsdWUuXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSBtb2RlbFxuICAgICAqL1xuICAgIGdldEZvcm1WYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcpOiBGb3JtVmFyaWFibGVNb2RlbCB7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUgPT09IGlkZW50aWZpZXIgfHwgdmFyaWFibGUuaWQgPT09IGlkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBmb3JtIHZhcmlhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci5cbiAgICAgKiBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnZlcnNpb24gb2YgdHlwZXMgKGRhdGUsIGJvb2xlYW4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGBuYW1lYCBvciBgaWRgIHZhbHVlXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuZ2V0Rm9ybVZhcmlhYmxlKGlkZW50aWZpZXIpO1xuXG4gICAgICAgIGlmICh2YXJpYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVZhbHVlKHZhcmlhYmxlLnR5cGUsIHZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb2Nlc3MgdmFyaWFibGUgdmFsdWUuXG4gICAgICogV2hlbiBtYXBwaW5nIGEgcHJvY2VzcyB2YXJpYWJsZSB3aXRoIGEgZm9ybSB2YXJpYWJsZSB0aGUgbWFwcGluZ1xuICAgICAqIGlzIGFscmVhZHkgcmVzb2x2ZWQgYnkgdGhlIHJlc3QgQVBJIHdpdGggdGhlIG5hbWUgb2YgdmFyaWFibGVzLmZvcm1WYXJpYWJsZU5hbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFZhcmlhYmxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBwcm9jZXNzIHZhcmlhYmxlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0UHJvY2Vzc1ZhcmlhYmxlVmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzVmFyaWFibGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gW2B2YXJpYWJsZXMuJHtuYW1lfWAsIG5hbWVdO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzVmFyaWFibGUgPSB0aGlzLnByb2Nlc3NWYXJpYWJsZXMuZmluZCgoZW50cnkpID0+IG5hbWVzLmluY2x1ZGVzKGVudHJ5Lm5hbWUpKTtcblxuICAgICAgICAgICAgaWYgKHByb2Nlc3NWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlKHByb2Nlc3NWYXJpYWJsZS50eXBlLCBwcm9jZXNzVmFyaWFibGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcGFyc2VWYWx1ZSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCdUJykgPyB2YWx1ZSA6IGAke3ZhbHVlfVQwMDowMDowMC4wMDBaYDtcbiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBoYXNUYWJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICYmIHRoaXMudGFicy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ZpZWxkcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzICYmIHRoaXMuZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzT3V0Y29tZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dGNvbWVzICYmIHRoaXMub3V0Y29tZXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXRGaWVsZEJ5SWQoZmllbGRJZDogc3RyaW5nKTogRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHNDYWNoZS5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGZpZWxkSWQpO1xuICAgIH1cblxuICAgIGdldEZvcm1GaWVsZHMoZmlsdGVyVHlwZXM/OiBzdHJpbmdbXSk6IEZvcm1GaWVsZE1vZGVsW10ge1xuICAgICAgICBpZiAodGhpcy5maWVsZHNDYWNoZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJGaWVsZHNCeVR5cGUodGhpcy5maWVsZHNDYWNoZSwgZmlsdGVyVHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10gPSBbXTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKHRoaXMuZmllbGRzLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckZpZWxkc0J5VHlwZShmb3JtRmllbGRNb2RlbCwgZmlsdGVyVHlwZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0ZpZWxkcyhmaWVsZHM6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdGlvbkZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VjdGlvbkZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb250YWluZXJGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbnRhaW5lckZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRmllbGQoZmllbGQsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbnRhaW5lckZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgQ29udGFpbmVyTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQgaW5zdGFuY2VvZiBDb250YWluZXJNb2RlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2VjdGlvbkZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuU0VDVElPTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlY3Rpb25GaWVsZChzZWN0aW9uOiBGb3JtRmllbGRNb2RlbCwgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9ybUZpZWxkTW9kZWwucHVzaChzZWN0aW9uKTtcbiAgICAgICAgc2VjdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb250YWluZXJGaWVsZChjb250YWluZXI6IENvbnRhaW5lck1vZGVsLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmb3JtRmllbGRNb2RlbC5wdXNoKGNvbnRhaW5lci5maWVsZCk7XG4gICAgICAgIGNvbnRhaW5lci5maWVsZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVGaWVsZChmaWVsZDogRm9ybUZpZWxkTW9kZWwsIGZvcm1GaWVsZE1vZGVsOiBGb3JtRmllbGRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvcm1GaWVsZE1vZGVsLnB1c2goZmllbGQpO1xuICAgICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWVsZHMoT2JqZWN0LnZhbHVlcyhmaWVsZC5maWVsZHMpLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckZpZWxkc0J5VHlwZShmaWVsZHM6IEZvcm1GaWVsZE1vZGVsW10sIHR5cGVzPzogc3RyaW5nW10pOiBGb3JtRmllbGRNb2RlbFtdIHtcbiAgICAgICAgaWYgKCF0eXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiB0eXBlcy5pbmNsdWRlcyhmaWVsZD8udHlwZSkpO1xuICAgIH1cblxuICAgIG1hcmtBc0ludmFsaWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwYXJzZU91dGNvbWVzKCkge1xuICAgICAgICBpZiAodGhpcy5qc29uLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZU91dGNvbWUgPSBuZXcgRm9ybU91dGNvbWVNb2RlbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgaWQ6IEZvcm1Nb2RlbC5TQVZFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NBVkUnLFxuICAgICAgICAgICAgICAgIGlzU3lzdGVtOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlT3V0Y29tZSA9IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBpZDogRm9ybU1vZGVsLkNPTVBMRVRFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFByb2Nlc3NPdXRjb21lID0gbmV3IEZvcm1PdXRjb21lTW9kZWwodGhpcywge1xuICAgICAgICAgICAgICAgIGlkOiBGb3JtTW9kZWwuU1RBUlRfUFJPQ0VTU19PVVRDT01FLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTVEFSVCBQUk9DRVNTJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU91dGNvbWVzID0gKHRoaXMuanNvbi5vdXRjb21lcyB8fCBbXSkubWFwKChvYmopID0+IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIG9iaikpO1xuXG4gICAgICAgICAgICB0aGlzLm91dGNvbWVzID0gW3NhdmVPdXRjb21lXS5jb25jYXQoY3VzdG9tT3V0Y29tZXMubGVuZ3RoID4gMCA/IGN1c3RvbU91dGNvbWVzIDogW2NvbXBsZXRlT3V0Y29tZSwgc3RhcnRQcm9jZXNzT3V0Y29tZV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkVmFsdWVzTm90UHJlc2VudCh2YWx1ZXNUb1NldElmTm90UHJlc2VudDogRm9ybVZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkc0NhY2hlLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWVzVG9TZXRJZk5vdFByZXNlbnRbZmllbGQuaWRdICYmICghdGhpcy52YWx1ZXNbZmllbGQuaWRdIHx8IHRoaXMuaXNWYWxpZERyb3BEb3duKGZpZWxkLmlkKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tmaWVsZC5pZF0gPSB2YWx1ZXNUb1NldElmTm90UHJlc2VudFtmaWVsZC5pZF07XG4gICAgICAgICAgICAgICAgZmllbGQuanNvbi52YWx1ZSA9IHRoaXMudmFsdWVzW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnBhcnNlVmFsdWUoZmllbGQuanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZERyb3BEb3duKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoa2V5KTtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEZvcm1GaWVsZFR5cGVzLkRST1BET1dOKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy52YWx1ZXNba2V5XSA9PT0gJ3N0cmluZycgPyB0aGlzLnZhbHVlc1trZXldID09PSAnZW1wdHknIDogT2JqZWN0LmtleXModGhpcy52YWx1ZXNba2V5XSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXROb2RlSWRWYWx1ZUZvclZpZXdlcnNMaW5rZWRUb1VwbG9hZFdpZGdldChsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQ6IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwpIHtcbiAgICAgICAgY29uc3QgbGlua2VkV2lkZ2V0VHlwZSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZD8ub3B0aW9ucz8ubGlua2VkV2lkZ2V0VHlwZSA/PyAndXBsb2FkV2lkZ2V0JztcblxuICAgICAgICBjb25zdCBzdWJzY3JpYmVkVmlld2VycyA9IHRoaXMuZmllbGRzQ2FjaGUuZmlsdGVyKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQudXBsb2FkV2lkZ2V0SWQgPT09IGZpZWxkLnBhcmFtc1tsaW5rZWRXaWRnZXRUeXBlXVxuICAgICAgICApO1xuXG4gICAgICAgIHN1YnNjcmliZWRWaWV3ZXJzLmZvckVhY2goKHZpZXdlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbdmlld2VyLmlkXSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZC5pZDtcbiAgICAgICAgICAgIHZpZXdlci5qc29uLnZhbHVlID0gdGhpcy52YWx1ZXNbdmlld2VyLmlkXTtcbiAgICAgICAgICAgIHZpZXdlci52YWx1ZSA9IHZpZXdlci5wYXJzZVZhbHVlKHZpZXdlci5qc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWaXNpYmlsaXR5KGZpZWxkSWQ6IHN0cmluZywgdmlzaWJpbGl0eTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB2aXNpYmlsaXR5UnVsZTogV2lkZ2V0VmlzaWJpbGl0eU1vZGVsID0gbmV3IFdpZGdldFZpc2liaWxpdHlNb2RlbCgpO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUub3BlcmF0b3IgPSB2aXNpYmlsaXR5ID8gJ2VtcHR5JyA6ICchZW1wdHknO1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUubGVmdFR5cGUgPSBXaWRnZXRUeXBlRW51bS5maWVsZDtcbiAgICAgICAgICAgIGZpZWxkLnZpc2liaWxpdHlDb25kaXRpb24gPSB2aXNpYmlsaXR5UnVsZTtcbiAgICAgICAgICAgIGZpZWxkLmlzVmlzaWJsZSA9IHZpc2liaWxpdHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZERpc2FibGVkKGZpZWxkSWQ6IHN0cmluZywgZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZWFkT25seSA9IHRoaXMucmVhZE9ubHkgfHwgZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZFJlcXVpcmVkKGZpZWxkSWQ6IHN0cmluZywgcmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWYWx1ZShmaWVsZElkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlVmFyaWFibGVWYWx1ZSh2YXJpYWJsZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmdldEZvcm1WYXJpYWJsZSh2YXJpYWJsZUlkKTtcbiAgICAgICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvY29yZS9mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBc0IscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtuRixPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUE2QmhHLE1BQU0sT0FBTyxTQUFTO2FBQ1gsb0JBQWUsR0FBVyxlQUFlLEFBQTFCLENBQTJCO2FBQzFDLGlCQUFZLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMvQixxQkFBZ0IsR0FBVyxXQUFXLEFBQXRCLENBQXVCO2FBQ3ZDLDBCQUFxQixHQUFXLGVBQWUsQUFBMUIsQ0FBMkI7SUE4QnZELFlBQ0ksSUFBVSxFQUNWLFVBQXVCLEVBQ3ZCLFdBQW9CLEtBQUssRUFDZixXQUFtQyxFQUM3QyxnQkFBMEIsRUFDMUIsdUJBQThDO1FBRnBDLGdCQUFX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WSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsS0FBVTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLHVCQUE2QztRQUM3RSxJQUFJLENBQUMsZUFBZSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQztJQUN6SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGb3JtRmllbGRFdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy9mb3JtLWZpZWxkLmV2ZW50JztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybUZpZWxkRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ldmVudHMvdmFsaWRhdGUtZm9ybS1maWVsZC5ldmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0ZUZvcm1FdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy92YWxpZGF0ZS1mb3JtLmV2ZW50JztcbmltcG9ydCB7IENvbnRhaW5lck1vZGVsIH0gZnJvbSAnLi9jb250YWluZXIubW9kZWwnO1xuaW1wb3J0IHsgRm9ybUZpZWxkVHlwZXMgfSBmcm9tICcuL2Zvcm0tZmllbGQtdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kZWwgfSBmcm9tICcuL2Zvcm0tZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybVZhbHVlcyB9IGZyb20gJy4vZm9ybS12YWx1ZXMnO1xuaW1wb3J0IHsgVGFiTW9kZWwgfSBmcm9tICcuL3RhYi5tb2RlbCc7XG5cbmltcG9ydCB7IEZvcm1WYXJpYWJsZU1vZGVsIH0gZnJvbSAnLi9mb3JtLXZhcmlhYmxlLm1vZGVsJztcbmltcG9ydCB7IFByb2Nlc3NWYXJpYWJsZU1vZGVsIH0gZnJvbSAnLi9wcm9jZXNzLXZhcmlhYmxlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1PdXRjb21lTW9kZWwgfSBmcm9tICcuL2Zvcm0tb3V0Y29tZS5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtRmllbGRWYWxpZGF0b3IsIEZPUk1fRklFTERfVkFMSURBVE9SUyB9IGZyb20gJy4vZm9ybS1maWVsZC12YWxpZGF0b3InO1xuaW1wb3J0IHsgRm9ybUZpZWxkVGVtcGxhdGVzIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXRlbXBsYXRlcyc7XG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsIH0gZnJvbSAnLi91cGxvYWQtd2lkZ2V0LWNvbnRlbnQtbGluay5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLXZhbGlkYXRpb24tc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc0Zvcm1Nb2RlbCB9IGZyb20gJy4vcHJvY2Vzcy1mb3JtLW1vZGVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlRW51bSwgV2lkZ2V0VmlzaWJpbGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3dpZGdldC12aXNpYmlsaXR5Lm1vZGVsJztcbmltcG9ydCB7IFRoZW1lTW9kZWwgfSBmcm9tICcuL3RoZW1lLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maXJtTWVzc2FnZSB7XG4gICAgc2hvdzogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXByZXNlbnRhdGlvbk1vZGVsIHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHRhc2tJZD86IHN0cmluZztcbiAgICB0YXNrTmFtZT86IHN0cmluZztcbiAgICBwcm9jZXNzRGVmaW5pdGlvbklkPzogc3RyaW5nO1xuICAgIGN1c3RvbUZpZWxkVGVtcGxhdGVzPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbiAgICBzZWxlY3RlZE91dGNvbWU/OiBzdHJpbmc7XG4gICAgZmllbGRzPzogYW55W107XG4gICAgdGFicz86IGFueVtdO1xuICAgIG91dGNvbWVzPzogYW55W107XG4gICAgZm9ybURlZmluaXRpb24/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgZmllbGRzPzogYW55W107XG4gICAgfTtcbiAgICBkaXNwbGF5TW9kZTogc3RyaW5nO1xuICAgIHRoZW1lPzogVGhlbWVNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBGb3JtTW9kZWwgaW1wbGVtZW50cyBQcm9jZXNzRm9ybU1vZGVsIHtcbiAgICBzdGF0aWMgVU5TRVRfVEFTS19OQU1FOiBzdHJpbmcgPSAnTmFtZWxlc3MgdGFzayc7XG4gICAgc3RhdGljIFNBVkVfT1VUQ09NRTogc3RyaW5nID0gJyRzYXZlJztcbiAgICBzdGF0aWMgQ09NUExFVEVfT1VUQ09NRTogc3RyaW5nID0gJyRjb21wbGV0ZSc7XG4gICAgc3RhdGljIFNUQVJUX1BST0NFU1NfT1VUQ09NRTogc3RyaW5nID0gJyRzdGFydFByb2Nlc3MnO1xuXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29uZmlybU1lc3NhZ2U6IENvbmZpcm1NZXNzYWdlO1xuICAgIHJlYWRvbmx5IHRhc2tOYW1lID0gRm9ybU1vZGVsLlVOU0VUX1RBU0tfTkFNRTtcbiAgICByZWFkb25seSBwcm9jZXNzRGVmaW5pdGlvbklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRPdXRjb21lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZW5hYmxlRml4ZWRTcGFjZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBkaXNwbGF5TW9kZTogYW55O1xuXG4gICAgZmllbGRzQ2FjaGU6IEZvcm1GaWVsZE1vZGVsW10gPSBbXTtcblxuICAgIGpzb246IGFueTtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICB2YWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICB0YWJzOiBUYWJNb2RlbFtdID0gW107XG4gICAgZmllbGRzOiAoQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbClbXSA9IFtdO1xuICAgIG91dGNvbWVzOiBGb3JtT3V0Y29tZU1vZGVsW10gPSBbXTtcbiAgICBmaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdID0gW107XG4gICAgY3VzdG9tRmllbGRUZW1wbGF0ZXM6IEZvcm1GaWVsZFRlbXBsYXRlcyA9IHt9O1xuICAgIHRoZW1lPzogVGhlbWVNb2RlbDtcblxuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgaXNWYWxpZCA9IHRydWU7XG4gICAgcHJvY2Vzc1ZhcmlhYmxlczogUHJvY2Vzc1ZhcmlhYmxlTW9kZWxbXSA9IFtdO1xuICAgIHZhcmlhYmxlczogRm9ybVZhcmlhYmxlTW9kZWxbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGpzb24/OiBhbnksXG4gICAgICAgIGZvcm1WYWx1ZXM/OiBGb3JtVmFsdWVzLFxuICAgICAgICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgICBwcm90ZWN0ZWQgZm9ybVNlcnZpY2U/OiBGb3JtVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIGVuYWJsZUZpeGVkU3BhY2U/OiBib29sZWFuLFxuICAgICAgICBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycz86IEZvcm1GaWVsZFZhbGlkYXRvcltdXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICAgICAgdGhpcy5qc29uID0ganNvbjtcblxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgICAgdGhpcy5pZCA9IGpzb24uaWQ7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBqc29uLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnRhc2tJZCA9IGpzb24udGFza0lkO1xuICAgICAgICAgICAgdGhpcy50YXNrTmFtZSA9IGpzb24udGFza05hbWUgfHwganNvbi5uYW1lIHx8IEZvcm1Nb2RlbC5VTlNFVF9UQVNLX05BTUU7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSWQgPSBqc29uLnByb2Nlc3NEZWZpbml0aW9uSWQ7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkVGVtcGxhdGVzID0ganNvbi5jdXN0b21GaWVsZFRlbXBsYXRlcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPdXRjb21lID0ganNvbi5zZWxlY3RlZE91dGNvbWU7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGpzb24uY2xhc3NOYW1lIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMgPSBqc29uLnZhcmlhYmxlcyB8fCBqc29uLmZvcm1EZWZpbml0aW9uPy52YXJpYWJsZXMgfHwgW107XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWYXJpYWJsZXMgPSBqc29uLnByb2Nlc3NWYXJpYWJsZXMgfHwgW107XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpeGVkU3BhY2UgPSBlbmFibGVGaXhlZFNwYWNlO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtTWVzc2FnZSA9IGpzb24uY29uZmlybU1lc3NhZ2UgfHwge307XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0ganNvbi5kaXNwbGF5TW9kZTtcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSBqc29uLnRoZW1lIHx8IGpzb24uZm9ybURlZmluaXRpb24/LnRoZW1lO1xuXG4gICAgICAgICAgICB0aGlzLnRhYnMgPSAoanNvbi50YWJzIHx8IFtdKS5tYXAoKHRhYkpzb24pID0+IG5ldyBUYWJNb2RlbCh0aGlzLCB0YWJKc29uKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5wYXJzZVJvb3RGaWVsZHMoanNvbik7XG4gICAgICAgICAgICB0aGlzLmZpZWxkc0NhY2hlID0gdGhpcy5nZXRGb3JtRmllbGRzKCk7XG5cbiAgICAgICAgICAgIGlmIChmb3JtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wYXJzZU91dGNvbWVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRJbmplY3RlZEZpZWxkVmFsaWRhdG9ycyhpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gICAgfVxuXG4gICAgb25Gb3JtRmllbGRDaGFuZ2VkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQpO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5uZXh0KG5ldyBGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGVudGlyZSBmb3JtIGFuZCBhbGwgZm9ybSBmaWVsZHMuXG4gICAgICovXG4gICAgdmFsaWRhdGVGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUZvcm1FdmVudDogYW55ID0gbmV3IFZhbGlkYXRlRm9ybUV2ZW50KHRoaXMpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yc0ZpZWxkOiBGb3JtRmllbGRNb2RlbFtdID0gdGhpcy5maWVsZHNDYWNoZS5maWx0ZXIoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUZvcm1GaWVsZFR5cGVzLmlzUmVhY3RpdmVUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFmaWVsZC52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudmFsaWRhdGlvblN1bW1hcnkuaXNBY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gZXJyb3JzRmllbGQubGVuZ3RoIDw9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybUV2ZW50LmlzVmFsaWQgPSB0aGlzLmlzVmFsaWQ7XG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1FdmVudC5lcnJvcnNGaWVsZCA9IGVycm9yc0ZpZWxkO1xuICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS52YWxpZGF0ZUZvcm0ubmV4dCh2YWxpZGF0ZUZvcm1FdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYSBzcGVjaWZpYyBmb3JtIGZpZWxkLCB0cmlnZ2VycyBmb3JtIHZhbGlkYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmllbGQgRm9ybSBmaWVsZCB0byB2YWxpZGF0ZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkRXZlbnQgPSBuZXcgVmFsaWRhdGVGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UudmFsaWRhdGVGb3JtRmllbGQubmV4dCh2YWxpZGF0ZUZpZWxkRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkRXZlbnQuaXNWYWxpZCkge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNJbnZhbGlkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghRm9ybUZpZWxkVHlwZXMuaXNSZWFjdGl2ZVR5cGUoZmllbGQudHlwZSkgJiYgIWZpZWxkLnZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzSW52YWxpZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBBY3Rpdml0aSBzdXBwb3J0cyAzIHR5cGVzIG9mIHJvb3QgZmllbGRzOiBjb250YWluZXJ8Z3JvdXB8ZHluYW1pYy10YWJsZVxuICAgIHByaXZhdGUgcGFyc2VSb290RmllbGRzKGpzb246IGFueSk6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdIHtcbiAgICAgICAgbGV0IGZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmIChqc29uLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzID0ganNvbi5maWVsZHM7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbi5mb3JtRGVmaW5pdGlvbj8uZmllbGRzKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBqc29uLmZvcm1EZWZpbml0aW9uLmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50czogKENvbnRhaW5lck1vZGVsIHwgRm9ybUZpZWxkTW9kZWwpW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb290RWxlbWVudDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuRFlOQU1JQ19UQUJMRSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBGb3JtRmllbGRNb2RlbCh0aGlzLCBmaWVsZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBDb250YWluZXJNb2RlbChuZXcgRm9ybUZpZWxkTW9kZWwodGhpcywgZmllbGQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLnRhYikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFicy5maW5kKChjdXJyZW50VGFiKSA9PiBmaWVsZC50YWIgPT09IGN1cnJlbnRUYWIuaWQpO1xuICAgICAgICAgICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiLmZpZWxkcy5wdXNoKGN1cnJlbnRSb290RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb290RWxlbWVudHMucHVzaChjdXJyZW50Um9vdEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3RFbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBleHRlcm5hbCBkYXRhIGFuZCBvdmVycmlkZXMgZmllbGQgdmFsdWVzXG4gICAgLy8gVHlwaWNhbGx5IHVzZWQgd2hlbiBmb3JtIGRlZmluaXRpb24gYW5kIGZvcm0gZGF0YSBjb21pbmcgZnJvbSBkaWZmZXJlbnQgc291cmNlc1xuICAgIHByaXZhdGUgbG9hZERhdGEoZm9ybVZhbHVlczogRm9ybVZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzQ2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlSWQgPSBgdmFyaWFibGVzLiR7ZmllbGQubmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5PdmVycmlkZUZpZWxkVmFsdWVXaXRoUHJvY2Vzc1ZhbHVlKGZpZWxkLCB2YXJpYWJsZUlkLCBmb3JtVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmpzb24udmFsdWUgPSBmb3JtVmFsdWVzW3ZhcmlhYmxlSWRdIHx8IGZvcm1WYWx1ZXNbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQucGFyc2VWYWx1ZShmaWVsZC5qc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FuT3ZlcnJpZGVGaWVsZFZhbHVlV2l0aFByb2Nlc3NWYWx1ZShmaWVsZDogRm9ybUZpZWxkTW9kZWwsIHZhcmlhYmxlSWQ6IHN0cmluZywgZm9ybVZhbHVlczogRm9ybVZhbHVlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIUZvcm1GaWVsZFR5cGVzLmlzQ29uc3RhbnRWYWx1ZVR5cGUoZmllbGQudHlwZSkgJiYgKHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbdmFyaWFibGVJZF0pIHx8IHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbZmllbGQuaWRdKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0RlZmluZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZm9ybSB2YXJpYWJsZSB0aGF0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgYG5hbWVgIG9yIGBpZGAgdmFsdWUuXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSBtb2RlbFxuICAgICAqL1xuICAgIGdldEZvcm1WYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcpOiBGb3JtVmFyaWFibGVNb2RlbCB7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUgPT09IGlkZW50aWZpZXIgfHwgdmFyaWFibGUuaWQgPT09IGlkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBmb3JtIHZhcmlhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci5cbiAgICAgKiBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnZlcnNpb24gb2YgdHlwZXMgKGRhdGUsIGJvb2xlYW4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGBuYW1lYCBvciBgaWRgIHZhbHVlXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuZ2V0Rm9ybVZhcmlhYmxlKGlkZW50aWZpZXIpO1xuXG4gICAgICAgIGlmICh2YXJpYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVZhbHVlKHZhcmlhYmxlLnR5cGUsIHZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb2Nlc3MgdmFyaWFibGUgdmFsdWUuXG4gICAgICogV2hlbiBtYXBwaW5nIGEgcHJvY2VzcyB2YXJpYWJsZSB3aXRoIGEgZm9ybSB2YXJpYWJsZSB0aGUgbWFwcGluZ1xuICAgICAqIGlzIGFscmVhZHkgcmVzb2x2ZWQgYnkgdGhlIHJlc3QgQVBJIHdpdGggdGhlIG5hbWUgb2YgdmFyaWFibGVzLmZvcm1WYXJpYWJsZU5hbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFZhcmlhYmxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBwcm9jZXNzIHZhcmlhYmxlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0UHJvY2Vzc1ZhcmlhYmxlVmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzVmFyaWFibGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gW2B2YXJpYWJsZXMuJHtuYW1lfWAsIG5hbWVdO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzVmFyaWFibGUgPSB0aGlzLnByb2Nlc3NWYXJpYWJsZXMuZmluZCgoZW50cnkpID0+IG5hbWVzLmluY2x1ZGVzKGVudHJ5Lm5hbWUpKTtcblxuICAgICAgICAgICAgaWYgKHByb2Nlc3NWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlKHByb2Nlc3NWYXJpYWJsZS50eXBlLCBwcm9jZXNzVmFyaWFibGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcGFyc2VWYWx1ZSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCdUJykgPyB2YWx1ZSA6IGAke3ZhbHVlfVQwMDowMDowMC4wMDBaYDtcbiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBoYXNUYWJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICYmIHRoaXMudGFicy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ZpZWxkcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzICYmIHRoaXMuZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzT3V0Y29tZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dGNvbWVzICYmIHRoaXMub3V0Y29tZXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXRGaWVsZEJ5SWQoZmllbGRJZDogc3RyaW5nKTogRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHNDYWNoZS5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGZpZWxkSWQpO1xuICAgIH1cblxuICAgIGdldEZvcm1GaWVsZHMoZmlsdGVyVHlwZXM/OiBzdHJpbmdbXSk6IEZvcm1GaWVsZE1vZGVsW10ge1xuICAgICAgICBpZiAodGhpcy5maWVsZHNDYWNoZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJGaWVsZHNCeVR5cGUodGhpcy5maWVsZHNDYWNoZSwgZmlsdGVyVHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10gPSBbXTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKHRoaXMuZmllbGRzLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckZpZWxkc0J5VHlwZShmb3JtRmllbGRNb2RlbCwgZmlsdGVyVHlwZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0ZpZWxkcyhmaWVsZHM6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdGlvbkZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VjdGlvbkZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb250YWluZXJGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbnRhaW5lckZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRmllbGQoZmllbGQsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbnRhaW5lckZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgQ29udGFpbmVyTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQgaW5zdGFuY2VvZiBDb250YWluZXJNb2RlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2VjdGlvbkZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuU0VDVElPTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlY3Rpb25GaWVsZChzZWN0aW9uOiBGb3JtRmllbGRNb2RlbCwgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9ybUZpZWxkTW9kZWwucHVzaChzZWN0aW9uKTtcbiAgICAgICAgc2VjdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb250YWluZXJGaWVsZChjb250YWluZXI6IENvbnRhaW5lck1vZGVsLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmb3JtRmllbGRNb2RlbC5wdXNoKGNvbnRhaW5lci5maWVsZCk7XG4gICAgICAgIGNvbnRhaW5lci5maWVsZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVGaWVsZChmaWVsZDogRm9ybUZpZWxkTW9kZWwsIGZvcm1GaWVsZE1vZGVsOiBGb3JtRmllbGRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvcm1GaWVsZE1vZGVsLnB1c2goZmllbGQpO1xuICAgICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWVsZHMoT2JqZWN0LnZhbHVlcyhmaWVsZC5maWVsZHMpLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckZpZWxkc0J5VHlwZShmaWVsZHM6IEZvcm1GaWVsZE1vZGVsW10sIHR5cGVzPzogc3RyaW5nW10pOiBGb3JtRmllbGRNb2RlbFtdIHtcbiAgICAgICAgaWYgKCF0eXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiB0eXBlcy5pbmNsdWRlcyhmaWVsZD8udHlwZSkpO1xuICAgIH1cblxuICAgIG1hcmtBc0ludmFsaWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwYXJzZU91dGNvbWVzKCkge1xuICAgICAgICBpZiAodGhpcy5qc29uLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZU91dGNvbWUgPSBuZXcgRm9ybU91dGNvbWVNb2RlbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgaWQ6IEZvcm1Nb2RlbC5TQVZFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NBVkUnLFxuICAgICAgICAgICAgICAgIGlzU3lzdGVtOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlT3V0Y29tZSA9IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBpZDogRm9ybU1vZGVsLkNPTVBMRVRFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFByb2Nlc3NPdXRjb21lID0gbmV3IEZvcm1PdXRjb21lTW9kZWwodGhpcywge1xuICAgICAgICAgICAgICAgIGlkOiBGb3JtTW9kZWwuU1RBUlRfUFJPQ0VTU19PVVRDT01FLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTVEFSVCBQUk9DRVNTJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU91dGNvbWVzID0gKHRoaXMuanNvbi5vdXRjb21lcyB8fCBbXSkubWFwKChvYmopID0+IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIG9iaikpO1xuXG4gICAgICAgICAgICB0aGlzLm91dGNvbWVzID0gW3NhdmVPdXRjb21lXS5jb25jYXQoY3VzdG9tT3V0Y29tZXMubGVuZ3RoID4gMCA/IGN1c3RvbU91dGNvbWVzIDogW2NvbXBsZXRlT3V0Y29tZSwgc3RhcnRQcm9jZXNzT3V0Y29tZV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkVmFsdWVzTm90UHJlc2VudCh2YWx1ZXNUb1NldElmTm90UHJlc2VudDogRm9ybVZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkc0NhY2hlLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWVzVG9TZXRJZk5vdFByZXNlbnRbZmllbGQuaWRdICYmICghdGhpcy52YWx1ZXNbZmllbGQuaWRdIHx8IHRoaXMuaXNWYWxpZERyb3BEb3duKGZpZWxkLmlkKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tmaWVsZC5pZF0gPSB2YWx1ZXNUb1NldElmTm90UHJlc2VudFtmaWVsZC5pZF07XG4gICAgICAgICAgICAgICAgZmllbGQuanNvbi52YWx1ZSA9IHRoaXMudmFsdWVzW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnBhcnNlVmFsdWUoZmllbGQuanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZERyb3BEb3duKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoa2V5KTtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEZvcm1GaWVsZFR5cGVzLkRST1BET1dOKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy52YWx1ZXNba2V5XSA9PT0gJ3N0cmluZycgPyB0aGlzLnZhbHVlc1trZXldID09PSAnZW1wdHknIDogT2JqZWN0LmtleXModGhpcy52YWx1ZXNba2V5XSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXROb2RlSWRWYWx1ZUZvclZpZXdlcnNMaW5rZWRUb1VwbG9hZFdpZGdldChsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQ6IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwpIHtcbiAgICAgICAgY29uc3QgbGlua2VkV2lkZ2V0VHlwZSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZD8ub3B0aW9ucz8ubGlua2VkV2lkZ2V0VHlwZSA/PyAndXBsb2FkV2lkZ2V0JztcblxuICAgICAgICBjb25zdCBzdWJzY3JpYmVkVmlld2VycyA9IHRoaXMuZmllbGRzQ2FjaGUuZmlsdGVyKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQudXBsb2FkV2lkZ2V0SWQgPT09IGZpZWxkLnBhcmFtc1tsaW5rZWRXaWRnZXRUeXBlXVxuICAgICAgICApO1xuXG4gICAgICAgIHN1YnNjcmliZWRWaWV3ZXJzLmZvckVhY2goKHZpZXdlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbdmlld2VyLmlkXSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZC5pZDtcbiAgICAgICAgICAgIHZpZXdlci5qc29uLnZhbHVlID0gdGhpcy52YWx1ZXNbdmlld2VyLmlkXTtcbiAgICAgICAgICAgIHZpZXdlci52YWx1ZSA9IHZpZXdlci5wYXJzZVZhbHVlKHZpZXdlci5qc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWaXNpYmlsaXR5KGZpZWxkSWQ6IHN0cmluZywgdmlzaWJpbGl0eTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB2aXNpYmlsaXR5UnVsZTogV2lkZ2V0VmlzaWJpbGl0eU1vZGVsID0gbmV3IFdpZGdldFZpc2liaWxpdHlNb2RlbCgpO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUub3BlcmF0b3IgPSB2aXNpYmlsaXR5ID8gJ2VtcHR5JyA6ICchZW1wdHknO1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUubGVmdFR5cGUgPSBXaWRnZXRUeXBlRW51bS5maWVsZDtcbiAgICAgICAgICAgIGZpZWxkLnZpc2liaWxpdHlDb25kaXRpb24gPSB2aXNpYmlsaXR5UnVsZTtcbiAgICAgICAgICAgIGZpZWxkLmlzVmlzaWJsZSA9IHZpc2liaWxpdHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZERpc2FibGVkKGZpZWxkSWQ6IHN0cmluZywgZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZWFkT25seSA9IHRoaXMucmVhZE9ubHkgfHwgZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZFJlcXVpcmVkKGZpZWxkSWQ6IHN0cmluZywgcmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWYWx1ZShmaWVsZElkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlVmFyaWFibGVWYWx1ZSh2YXJpYWJsZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmdldEZvcm1WYXJpYWJsZSh2YXJpYWJsZUlkKTtcbiAgICAgICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkSW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0b3JzID0gaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMgPyBbLi4uRk9STV9GSUVMRF9WQUxJREFUT1JTLCAuLi5pbmplY3RlZEZpZWxkVmFsaWRhdG9yc10gOiBbLi4uRk9STV9GSUVMRF9WQUxJREFUT1JTXTtcbiAgICB9XG59XG4iXX0=
|